您的位置:首页 > 编程语言 > PHP开发

解决“cannot create /proc/sys/kernel/hotplug: nonexistent directory”

2017-02-23 13:40 585 查看
最近在制作文件系统时发现总是不能自动执行mdev,提示:

“cannot create /proc/sys/kernel/hotplug: nonexistent directory”错误。

在网上查阅了很多资料也没有什么具体的解决办法,最后发现是一个很傻的错误,竟然是内核里面没有勾上hotplug选项,为了这个我可郁闷了好长时间的。

可惜busybox还是不能使用“上”键显示上一条指令,奇怪哦。

以下是启动过程,凑字数的嘿嘿

==================================

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 68K

init started: BusyBox v1.9.2 (2008-08-15 10:15:54 CST)

starting pid 145, tty '': '/etc/init.d/rcS'

********************************

   SEU 4020 ARM Linux-2.6.16     

********************************

# mount all...........

# Starting mdev.........

starting pid 154, tty '': '/bin/sh'

Set search library path...........

/ # cd /dev

/dev # ls

console    mtdblock3 ram7       tty18      tty32      tty47      tty61

full       null       ram8       tty19      tty33      tty48      tty62

kmem       port       ram9       tty2       tty34      tty49      tty63

kmsg       ram0       random     tty20      tty35      tty5       tty7

mem        ram1       root       tty21      tty36      tty50      tty8

mtd0       ram10      tty        tty22      tty37      tty51      tty9

mtd0ro     ram11      tty0       tty23      tty38      tty52      ttyS0

mtd1       ram12      tty1       tty24      tty39      tty53      ttyS1

mtd1ro     ram13      tty10      tty25      tty4       tty54      ttyS2

mtd2       ram14      tty11      tty26      tty40      tty55      ttyS3

mtd2ro     ram15      tty12      tty27      tty41      tty56      urandom

mtd3       ram2       tty13      tty28      tty42      tty57      vcs

mtd3ro     ram3       tty14      tty29      tty43      tty58      vcsa

mtdblock0 ram4       tty15      tty3       tty44      tty59      zero

mtdblock1 ram5       tty16      tty30      tty45      tty6

mtdblock2 ram6       tty17      tty31      tty46      tty60

/dev #

 

2.mdev的hotplug模式

1, busybox 添加mdev支持

2, 在/etc/rc.d/rcS中添加
#mount filesystem

/bin/mount -a

#start mdev

echo /sbin/mdev > /proc/sys/kernel/hotplug    #设置系统的hotplug程序为mdev

mdev –s

 

/etc/fstab的内容如下:
proc    /proc   proc    defaults    0   0

none    /tmp    ramfs   defaults        0       0

mdev    /dev    ramfs   defaults        0       0

sysfs   /sys    sysfs   defaults        0       0

 

执行mdev -s :以‘-s’为参数调用位于 /sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描 /sys/class 和 /sys/block 中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev 下创建设备节点文件。一般只在启动时才执行一次 “mdev -s”。

 

热插拔事件:由于启动时运行了命令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于 /sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。

 

解决使用mdev时“cannot create /proc/sys/kernel/hotplug:nonexistent directory”错误

确保编译内核时编译如下选项:

CONFIG_PROC_FS=y

CONFIG_PROC_SYSCTL=y

CONFIG_HOTPLUG=y

CONFIG_NET=y

如果CONFIG_HOTPLUG和CONFIG_NET不选或没全选上的话,/proc/sys/kernel下将不会创建hotplug文件.(参见kernel/sysctl.c)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐