流程分析
inittab:
調用rcS
{
rcS:
mount -a 掛載fstab中的文件系統(dev、sys等)
{
fstab:
掛載
/dev
/proc
/sys
/tmp
}
啓動hotplog,使用mdev -s監控熱插拔硬件,自動創建硬件模塊
設備節點,如果/etc/mdev.conf中有硬件描述,則按照裏面的屬性進行操作:
{
U盤
創建/dev設備節點等
}
insmod加載其他模塊.ko
}
啓動控制檯shell
啓動mdev,必須:
①busybox編譯時,選擇支持;
②在rcS中添加:
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
③在/etc/下創建mdev.conf文件。
實例分析:
下面以一個usb攝像頭的例子做演示,達到的效果:
當插入USB攝像頭的時候,系統自動執行mjpg-streamer
在mdev.conf中添加:
video0 0:0 777 * /etc/auto_mjpg_streamer.sh
在etc下創建auto_mjpg_streamer.sh腳本:
#!/bin/sh
if [ $ACTION = "add" ]; #這裏的語法好惡心,括號兩邊要加空格
then
/opt/mjpeg/mjpg_streamer -i "/opt/mjpeg/input_uvc.so -y" -o "/opt/mjpeg/output_http.so -w ./www" &
echo -e "Find /dev/video0,Starting Mjpg-streamer.\n"
else
killall mjpg_streameri
echo -e "Disconnect /dev/video0,Closing Mjpg-streamer.\n"
fi
最後爲腳本添加執行權限:
chmod +x auto_mjpg_streamer.sh
試驗中發現一個奇怪的現象:
上電如果USB連接着攝像頭,則掛載文件系統之後,“斷開連接”中的腳本命令會被執行,此時只有重新插拔攝像頭,mjpg-streamer纔會被正確啓動,未查明原因。
Udev
添加的規則在/etc/udev/rules.d/中:
ACTION!=”add”,GOTO=”farsight”
KERNEL==”sd[a-z][0-9]”,RUN+=”/sbin/mount-usb.sh %k”
LABEL=”farsight”
在/sbin/下創建mount-usb.sh文件添加如下內容:
#!/bin/sh
/bin/mount -t vfat /dev/$1 /tmp
sync
P.S.:對於KERNEL參數完全匹配的時候,/dev中的設備節點將會消失,此時可以指定NAME=”%k”創建名爲內核設備名的節點。