热插拔事件是从内核空间发送到用户空间的通知,一般这时候系统配置出现了变化,比如插入/移除耳机,插入/移除SD卡或者USB存储设备等。
热插拔事件默认会调用/sbin/hotplug来加载驱动程序,创建设备节点等。
如果执行该动作的不是/sbin/hotplug,比如,很多都用mdev来做热插拔的处理,此时我们需要修改系统调用
方法如下:
echo /sbin/mdev > /proc/sys/kernel/hotplug
目的就是替换掉默认的/sbin/hotplug
同时我们还要配置/etc/mdev.conf, 改文件是给mdev使用的配置文件,目的是告诉mdev 热插拔时间产生的时候调用对应的工具来处理
比如如下:
sd[a-z][0-9] 0:0 666 @/etc/mdev/udisk_insert sd[a-z] 0:0 666 $/etc/mdev/udisk_remove mmcblk[0-9] 0:0 666 */etc/mdev/hotplug.sh
外设插入或者移除的时候mdev会创建或者删除对应的设备节点,然后根据设备节点名称匹配工具来善后,比如上面的
@ 表示设备添加的时候调用 @后面的工具来处理,
$ 表示设备移除的时候调用 $ 后面的工具来处理,
* 表示有设备的插拔事件(添加或者移除)发生时都调用该工具处理。
所以从脚本中我们可以看到如果有sda0~sda9 或sdz0~sdz9设备插入时调用/etc/mdev/udisk_insert处理
这应该是磁盘分区节点创建成功后会产生的事件,识别到磁盘分区后我们应该去挂载分区,这样上层用户才能使用该分区 udisk_insert应该就是用来挂载分区的
同理udisk_remove则是识别到磁盘移除后调用的工具
如果设备节点是mmcblk0~mmcblk9则调用/hotplug.sh工具
hotplu.sh如下
#!/bin/sh case $ACTION in remove) /etc/mdev/sdcard_remove exit0 esac /etc/mdev/sdcard_insert
这是一个sdcard插入和拔出调用的工具,用来挂在卡和卸载卡