linux中的熱插拔和mdev機制
時間:2018-09-20 來源:未知
mdev是busybox自帶的一個簡化版的udev,作用是在系統啟動和熱插拔或動態加載驅動程序時,自動產生驅動程序所需的節點文件,在文件系統中的/dev目錄下的設備節點都是由mdev創建的mdev掃描/sys/class和/sys/block中所有的類設備目錄,如果在目錄中含有名為"dev"的文件,且文件中包含的是設備號,則mdev就利用這些信息為這個設備在/dev下創建設備節點用法:
1. 執行mdev前要掛載 /sys
mount -t tmpfs mdev /dev
mount -t sysfs sysfs /sys
2.命令內核在增刪設備時執行/sbin/mdev,使設備節點會被創建和刪除
echo /sbin/mdev > /proc/sys/kernel/hotplug
3.設置mdev,讓它在系統啟動時創建所有的設備節點
mdev -s
關于熱插拔:
需要內核中支持hotplug
編寫mdev配置文件:/etc/mdev.conf
該文件的作用是:mdev在找到匹配設備時自動執行自定義命令
格式為: : [<@$*>]
@ 創建節點后執行的
$ 刪除節點前執行的
* 創建后和刪除前都運行的
如自動掛載U盤和SD卡腳本:
sd[a-z][0-9] 0:0 0660 @/etc/hotplug/usb/udisk_insert
sd[a-z] 0:0 0660 $/etc/hotplug/usb/udisk_remove
mmcblk[0-9]p[0-9] 0:0 0660 @/etc/hotplug/sd/sd_insert
mmcblk[0-9] 0:0 0660 $/etc/hotplug/sd/sd_remove
當檢測到類似sda1這樣的設備時,執行/etc/hotplug/usb里的腳本,腳本的內容就是掛載和卸載U盤;當檢測到類似mmcblk0p1這樣的設備時,執行/etc/hotplug/sd里的腳本,腳本的內容就是掛載和卸載SD卡。
mdev是busybox中的一個udev管理程序的一個精簡版,他也可以實現設備節點的自動創建和設備的自動掛載,只是在實現的過程中有點差異,在發生熱插拔時間的時候,mdev是被hotplug直接調用,這時mdev通過環境變量中的 ACTION 和 DEVPATH,來確定此次熱插拔事件的動作以及影響了/sys中的那個目錄。接著會看看這個目錄中是否有“dev”的屬性文件,如果有就利用這些信息為這個設備在/dev 下創建設備節點文件。
下面是如何讓我們的系統支持mdev。
1.在使用busybox制作根文件系統的時候,選擇支持mdev
Linux System Utilities --->
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device addition/removal
2.在文件系統添加如下內容
Vim /etc/init.d/rcS
mount -t tmpfs mdev /dev
mount -t sysfs sysfs /sys
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev –s
這些語句的添加在mdev的手冊中可以找到。
3.添加對熱插拔事件的響應,實現U盤和SD卡的自動掛載。
Vim /etc/mdev.conf
mmcblk[0-9]p[0-9] 0:0 666 @ /etc/sd_card_inserting
mmcblk[0-9] 0:0 666 $ /etc/sd_card_removing
sd[a-z] [0-9] 0:0 666 @ /etc/usb/usb_inserting
sd[a-z] 0:0 666 $ /etc/usb/usb_removing
紅色部分,是一個腳本,腳本內容可以根據我們的需要定制,可以實現掛載,卸載或其他一些功能。
如下是自動掛載和卸載的腳本:
/etc/sd_card_inserting
#!/bin/sh
mount -t vfat /dev/mmcblk0p1 /mnt/sd
/etc/sd_card_removing
#!/bin/sh
sync
umount /mnt/sd

