echo /sbin/mdev > /proc/sys/kernel/hotplug 作用解析

参见:https://zhidao.baidu.com/question/1606465593857998667.html

linux系统对于热插拔事件的产生默认都是调用/sbin/hotplug,该程序通过加载驱动程序,创建设备节点,挂载分区等。如果系统中不是/sbin/hotplug来执行,而是mdev,那么用户应当在早期启动的时候将该执行档(包含绝对位置)设置进去,于是有了上面的echo /sbin/mdev> /proc/sys/kernel/hotplug。我们可以在脚本中注释掉该命令行,重新开机后cat  /proc/sys/kernel/hotplug就会发现返回来的是/sbin/hotplug说明系统默认都是调用这个。这个的配置在内核编译的时候写好的,在内核目录下的.config可以看到有个配置叫做CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug",如果你编译的时候修改这个也是可以更改到的。

参见:https://blog.csdn.net/qq_21435127/article/details/80689577

mdev是busybox提供的一个工具,用在嵌入式系统中,相当于简化版的udev,作用是在系统启动和热插拔或动态加载驱动程序时,
自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的。在加载驱动过程中,根据驱动程序,在/dev下自动创建设备节点。

1、在/etc/init.d/rcS脚本里有“mdev -s”
解释:系统启动时,通过执行“mdev -s”扫描/sys/class和/sys/block,在目录中查找dev文件。例如:/sys/class/tty/tty0/dev,

它的内容为”4:0”,即主设备号是4,次设备号是0,dev的上一级目录为设备名,这里是tty0。/sys/class/下的每个文件夹都代表
着一个子系统。

2、在/etc/init.d/rcS脚本里有“echo /sbin/mdev > /proc/sys/kernel/hotplug”

解释:把/sbin/mdev写到/proc/sys/kernel/hotplug文件里。当有热插拔事件产生时,内核会调用/proc/sys/kernel/hotplug文件里指定的应用程序来处理热插拔事件。

设置mdev有三种方法,总结如下:
1、编译内核的时候直接配置CONFIG_UEVENT_HELPER_PATH,并且在之后的启动中不去修改uevent_helper,那么
uevent_helper代表的程序就是CONFIG_UEVENT_HELPER_PATH指定的程序

2、不管CONFIG_UEVENT_HELPER_PATH配置与否或如何设置,通过echo /sbin/mdev > /sys/kernel/uevent_helper
修改uevent_helper的内容,这个指令将会调用内核函数uevent_helper_store。过程涉及sysfs虚拟文件系统的
内容,这里不讨论。改变之后,/proc/sys/kernel/hotplug里的内容也会立即发生改变

3、不管CONFIG_UEVENT_HELPER_PATH配置与否或如何设置,通过echo /sbin/mdev > /proc/sys/kernel/hotplug
修改uevent_helper的内容.它的修改也会导致/sys/kernel/uevent_helper里的内容立即改变

对于上述的2、3两种方法,都是通过用户层的接口直接uevent_helper,所以谁在后面谁起作用。

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/107180696