Mdev 熱插拔

流程分析

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”創建名爲內核設備名的節點。

發佈了57 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章