當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > linux中的熱插拔和mdev機(jī)制
linux中的熱插拔和mdev機(jī)制
時(shí)間:2018-09-20 來源:未知
mdev是busybox自帶的一個(gè)簡(jiǎn)化版的udev,作用是在系統(tǒng)啟動(dòng)和熱插拔或動(dòng)態(tài)加載驅(qū)動(dòng)程序時(shí),自動(dòng)產(chǎn)生驅(qū)動(dòng)程序所需的節(jié)點(diǎn)文件,在文件系統(tǒng)中的/dev目錄下的設(shè)備節(jié)點(diǎn)都是由mdev創(chuàng)建的mdev掃描/sys/class和/sys/block中所有的類設(shè)備目錄,如果在目錄中含有名為"dev"的文件,且文件中包含的是設(shè)備號(hào),則mdev就利用這些信息為這個(gè)設(shè)備在/dev下創(chuàng)建設(shè)備節(jié)點(diǎn)用法:
1. 執(zhí)行mdev前要掛載 /sys
mount -t tmpfs mdev /dev
mount -t sysfs sysfs /sys
2.命令內(nèi)核在增刪設(shè)備時(shí)執(zhí)行/sbin/mdev,使設(shè)備節(jié)點(diǎn)會(huì)被創(chuàng)建和刪除
echo /sbin/mdev > /proc/sys/kernel/hotplug
3.設(shè)置mdev,讓它在系統(tǒng)啟動(dòng)時(shí)創(chuàng)建所有的設(shè)備節(jié)點(diǎn)
mdev -s
關(guān)于熱插拔:
需要內(nèi)核中支持hotplug
編寫mdev配置文件:/etc/mdev.conf
該文件的作用是:mdev在找到匹配設(shè)備時(shí)自動(dòng)執(zhí)行自定義命令
格式為: : [<@$*>]
@ 創(chuàng)建節(jié)點(diǎn)后執(zhí)行的
$ 刪除節(jié)點(diǎn)前執(zhí)行的
* 創(chuàng)建后和刪除前都運(yùn)行的
如自動(dòng)掛載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
當(dāng)檢測(cè)到類似sda1這樣的設(shè)備時(shí),執(zhí)行/etc/hotplug/usb里的腳本,腳本的內(nèi)容就是掛載和卸載U盤;當(dāng)檢測(cè)到類似mmcblk0p1這樣的設(shè)備時(shí),執(zhí)行/etc/hotplug/sd里的腳本,腳本的內(nèi)容就是掛載和卸載SD卡。
mdev是busybox中的一個(gè)udev管理程序的一個(gè)精簡(jiǎn)版,他也可以實(shí)現(xiàn)設(shè)備節(jié)點(diǎn)的自動(dòng)創(chuàng)建和設(shè)備的自動(dòng)掛載,只是在實(shí)現(xiàn)的過程中有點(diǎn)差異,在發(fā)生熱插拔時(shí)間的時(shí)候,mdev是被hotplug直接調(diào)用,這時(shí)mdev通過環(huán)境變量中的 ACTION 和 DEVPATH,來確定此次熱插拔事件的動(dòng)作以及影響了/sys中的那個(gè)目錄。接著會(huì)看看這個(gè)目錄中是否有“dev”的屬性文件,如果有就利用這些信息為這個(gè)設(shè)備在/dev 下創(chuàng)建設(shè)備節(jié)點(diǎn)文件。
下面是如何讓我們的系統(tǒng)支持mdev。
1.在使用busybox制作根文件系統(tǒng)的時(shí)候,選擇支持mdev
Linux System Utilities --->
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device addition/removal
2.在文件系統(tǒng)添加如下內(nèi)容
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的手冊(cè)中可以找到。
3.添加對(duì)熱插拔事件的響應(yīng),實(shí)現(xiàn)U盤和SD卡的自動(dòng)掛載。
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
紅色部分,是一個(gè)腳本,腳本內(nèi)容可以根據(jù)我們的需要定制,可以實(shí)現(xiàn)掛載,卸載或其他一些功能。
如下是自動(dòng)掛載和卸載的腳本:
/etc/sd_card_inserting
#!/bin/sh
mount -t vfat /dev/mmcblk0p1 /mnt/sd
/etc/sd_card_removing
#!/bin/sh
sync
umount /mnt/sd

