<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    關于實現udev/mdev自動掛載與卸載

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    在網上有很多關于講mdev的自動掛載基本上都是一個版本,經過測試自動掛載確實可行,但是關于自動卸載mdev似乎不能很好的支持,經過修改已經可以做到與udev的效果相似。不能在掛載的目錄中進行熱插拔,否則會出現問題,不過此問題在下次插入U盤時不會造成影響,可能對U盤有損壞。

    本文介紹了mdev與udev兩種方法來實現自動掛載,讀者可根據需要任選其一即可。

            首先介紹一下mdev與udev之間的關系:

            mdev是busybox中的一個udev管理程序的一個精簡版,他也可以實現設備節點的自動創建和設備的自動掛載,只是在實現的過程中有點差異,在發生熱插拔時間的時候,mdev是被hotplug直接調用,這時mdev通過環境變量中的 ACTION 和 DEVPATH,來確定此次熱插拔事件的動作以及影響了/sys中的那個目錄。接著會看看這個目錄中是否有“dev”的屬性文件,如果有就利用這些信息為這個設備在/dev 下創建設備節點文件。

     

     

    /***********************************************************************************************************************************************************************************/

    1.mdev支持

    ①用busybox制作根文件系統的時候,要選擇支持mdev機制

    Linux System Utilities  --->   
               [*] mdev      
               [*]   Support /etc/mdev.conf
               [*]     Support command execution at device addition/removal

    ②在文件系統/etc/init.d/rsC文件中添加如下內容

    Vi  /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

    這些語句的添加在busybox的/doc/mdev.txt中可以找到。

     

    ③添加對熱插拔事件的響應,實現U盤和SD卡的自動掛載。

    Vi /etc/mdev.conf
           sd[a-z][0-9]      0:0 666        @/etc/mdev/udisk_insert                        

             sd[a-z]                   0:0 666          $/etc/mdev/udisk_remove

    紅色部分,是一個腳本,腳本內容可以根據我們的需要定制,可以實現掛載,卸載或其他一些功能。

    注:@表示是在插入(創建設備結點)后執行后面的腳本,$表示在拔出(刪除設備結點)前執行后面的腳本。

    如下是自動掛載和卸載的腳本名稱及其內容:

    #!/bin/sh

    if [ -d /sys/block/*/$MDEV ]  ; then

      mkdir -p /media/$MDEV

      mount /dev/$MDEV /media/$MDEV 

    fi

    根文件系統中的etc/mdev/udisk_remove文件內容:
            #!/bin/sh         umount -l /media/$MDEV         rm -rf /media/$MDEV           #!/bin/sh         umount -l /media/sd*         rm -rf /media/sd*

    修改為紅色部分后能夠自動掛載

    以上兩個腳本需要可執行權限:chmod +x  /etc/mdev/udisk_insert

                   chmod +x etc/mdev/udisk_remove

    /***********************************************************************************************************************************************************************************/

    2.udev支持 

            linux傳統上使用靜態設備創建的方法,在dev下創建了大量的節點,而不管這些節點相應的硬件設備是否存在。采用udev的方法,系統檢測到設備才會去創建這些設備對應的節點。

            這里我們簡單的說一下udev的工作原理:

            udev是依賴于sysfs的,當系統中添加一個新的設備后,內核檢測到后就會產生一個hotplug event并查找/proc/sys/kernel/hotplug去找出管理設備連接的用戶空間程序,若udev已經啟動,內核會通知udev去檢測sysfs中關于這個新設備的信息并創建設備節點。如/dev/vcs,在/sys/class/tty/vcs/dev存放的是”7:0”,既/dev/vcs的主次設備號。并且udev還會根據/etc/udev/rules.d中的規則文件實現一些相應的功能。

    下面我們介紹一下如何實現設備節點的自動創建及u盤或sd卡的自動掛載。

    因為文件系統中默認是沒有對udev進行支持的,所以我們移植一個udev。

    1.下載udev源碼udev-100.tar.bz2,并解壓

    網址:http://www.us.kernel.org/pub/linux/utils/kernel/hotplug

    2.交叉編譯。

    修改makefile,具體修改如下:

            cross = arm-linux-

    保存退出。

    然后執行命令:make 進行編譯,然后執行arm-linux-strip udev udevd udevstart udevinfo udevtest,并拷貝這些文件到目標板根文件/bin目錄下面。

    3.添加udev的支持

    下面三種方法功能相同

            (1)并修改etc/init.d/rcs腳本,然后添加如下命令:

            /bin/mount -t sysfs sysfs /sys 

            /bin/mount -t tmpfs tmpfs /dev

            /bin/udevd --daemon

            /bin/udevstart

            (2)如果linuxrc是二進制文件的話 

            rm /linuxrc

            vi /linuxrc

            添加如下內容

            /bin/mount -t sysfs sysfs /sys

            /bin/mount -t tmpfs tmpfs /dev

            /bin/udevd --daemon

            /bin/udevstart

            exec /sbin/init

            (3)修改/etc/fstab為

            #device mount-point type options dump fsck order

            proc /proc proc defaults 0 0

            tmpfs /tmp tmpfs defaults 0 0

            sysfs /sys sysfs defaults 0 0

            tmpfs /dev tmpfs defaults 0 0

            修改/etc/init.d/rcs,添加如下內容

    /bin/udevd --daemon

    /bin/udevstart

            重新啟動系統,文件系統就能夠自動創建節點。

     

    4.在/etc下創建udev目錄

    5.在/etc/udev下穿件目錄rules.d和文件udev.conf

    6.在udev.conf中添加如下內容

    # udev.conf

            # the initial syslog(3) priority: "err", "info", "debug" or its

            # numerical equivalent. for runtime debugging, the daemons internal

            # state can be changed with: "udevcontrol log_priority=<value>".

            udev_log="err"

    7.在rules.d下創建規則文件

    如實現u盤自動掛載

            vim 11-add-usb.rules

    添加如下內容

            action!="add",goto="farsight"

            kernel=="sd[a-z][0-9]",run+="/sbin/mount-usb.sh %k"

            label="farsight"

    這個文件中action后是說明是什么事件,kernel后是說明是什么設備比如sda1,mmcblk0p1等,run這個設備插入后去執行哪個程序%k是傳入這個程序的參數,這里%k=kernel的值也就是sda1等http://www.woaidiannao.com。

    在/sbin/下創建mount-usb.sh文件添加如下內容 計算機

            #!/bin/sh

            /bin/mount -t vfat /dev/$1 /tmp

            sync

    修改文件權限為其添加可執行的權限。

    這樣就實現了u盤的自動掛載,下面附上u盤的卸載規則文件和sd卡的文件

    usb卸載

    11-add-remove.rules

            action !="remove",goto="farsight"

            subsystem!="block",goto="farsight"

            kernel=="sd[a-z][0-9]",run+="/sbin/umount-usb.sh"

            label="farsight"

    umount-usb.sh

            #!/bin/sh

            sync

            umount /tmp/

    sd卡掛載

    12-add-sd.rules

    action!="add",goto="farsight"

            kernel=="mmcblk[0-9]p[0-9]",run+="/sbin/mount-sd.sh %k"

            label="farsight"

    mount-sd.sh

            #!/bin/sh

            /bin/mount -t vfat /dev/$1 /tmp

            sync

     

    sd卸載

    12-remove-sd.rules

            action !="remove",goto="farsight"

            subsystem!="block",goto="farsight"

            kernel=="mmcblk*",run+="/sbin/umount-sd.sh"

            label="farsight"

    umount-sd.sh

            #!/bin/sh

            sync

            /bin/umount /tmp/

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全