为什么我的MTD驱动程序成为普通文件?

时间:2015-07-21 01:09:45

标签: linux linux-kernel driver embedded-linux kernel-module

我正在使用phram和ramoops将最新的系统日志存储在保留的内存中,这样一旦我的计算机崩溃,我可以在重启后转储恐慌日志。 MTD驱动程序phram和模块ramoops用于自动将系统日志记录到内存中:

/# insmod /lib/modules/phram.ko phram=phram-oops,<addr>,<len>    
/# ls -l /dev/mtdchar/param-oops
crw-r--r--    1 root     root       90,  24 Jul 20 16:34 phram-oops

直到最近我才重新使用此驱动程序来备份引导加载程序日志 - 在引导期间,phram-oops将u-boot日志备份到一个保留的内存区域;在Linux shell启动后,转储u-boot日志,清除phram-oops dd if=/dev/zero bs=65536 count=1 of=/dev/mtdchar/param-oops,rmmod phram和insmod phram以及新的内存区域以进行恐慌日志。然后转储上次启动的系统日志。在此步骤之前,/dev/mtdchar/phram-oops仍然正常工作:

/# ls -l /dev/mtdchar/phram-oops
crw-r--r--    1 root     root       90,  24 Jul 20 16:34 /dev/mtdchar/phram-oops

但是,运行dd if=/dev/zero bs=65536 count=1 of=/dev/mtdchar/phram-oops” again to clear the memory, driver / dev / mtdchar / phram-oops后成为文件!!!

/# ls -l /dev/mtdchar/phram-oops
-rw-r--r--    1 root     root         65536 Jul 20 16:34 /dev/mtdchar/phram-oops

因此,之前的日志仍保留在内存中,无法清除。有关驱动程序如何转向文件的任何想法?以及如何解决它?

1 个答案:

答案 0 :(得分:1)

这个问题似乎是由hotplug引起的 - 它需要在rmmod phram之后和insmod phram之前使用新地址延迟一些。否则,设备驱动程序很可能未正确加载,因此dd命令可以将其创建为普通文件。