u盤自動掛載-udev(轉載加修改),經過測試

來源:互聯網
上載者:User

原文:http://blog.163.com/shaohj_1999@126/blog/static/6340685120113142227667/

       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中的規則檔案實現一些相應的功能。

  下面我們先容一下如何?裝置節點的自動建立及隨身碟或SD卡的自動掛載。

  一、.udev的移植(現在的檔案系統中一般默然對udev進行了支援)

  由於檔案系統中預設是沒有對udev進行支援的,所以我們移植一個udev。

  1.下載UDEV源碼udev-080.tar.bz2,並解壓

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

  2.交叉編譯。

  修改Makefile,具體修改如下:
        CROSS = arm-softfloat-linux-gnu-
        儲存退出。
        執行命令:make 進行編譯,然後執行arm-softfloat-linux-gnu-STrip udev udevd udevstart udevinfo udevtest。並拷貝這些檔案到rootfs/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
    有這上面寫些,重新啟動系統後,我們的檔案系統就有了自動建立節點的功能了。

  二、自動掛載隨身碟或SD卡

  1.在/etc下建立udev目錄

  2.在/etc/udev下穿件目錄rules.d和檔案udev.conf

  3.在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=".
    udev_log="err"

  4.在rules.d下建立規則檔案

  如實現隨身碟自動掛載
    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等。

  在/sbin/下建立mount-usb.sh檔案添加如下內容
    #!/bin/sh
    /bin/mount -t vfat /dev/$1 /tmp
    sync

  修改檔案許可權為其添加可執行檔許可權。

  這樣就實現了隨身碟的自動掛載,下面附上隨身碟的卸載規則檔案和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卡掛載

ACTION!="add",GOTO="farsight"
    KERNEL=="mmcblk[0-9]p[0-9]",RUN+="/sbin/mount-sd.sh %k"
    LABEL="farsight"

mount

==========================經測試,上面的方法成功==========================

其他相關文章:
通過udev自動掛載隨身碟

      目前一些主流案頭系統(如Gnome,KDE,Xfce)的較新版本都支援自動掛載(mount)隨身碟了. 一個流傳很廣的說法是
HAL(硬體抽象層) 起了自動掛載的作用, 其實這是誤解. 對於2.6核心而言, udev 才是直接從核心接收裝置串連或斷開資訊的主體.
udev
從核心得到資訊後,根據一些簡單規則(注意,是簡單規則), 在 /dev 目錄下建立相應的裝置節點, 並進行某些相關操作. HAL
所做的事情是在 udev 的規則中加上一條(或幾條), 讓 udev 把收到的資訊也傳遞給 HAL. 接下來, HAL
用更為複雜的規則來匹配和描述當前串連著的硬體. 舉一個簡單的例子, udev 知道的是隨身碟已經串連了並且有一個分區; 而 HAL
能更進一步知道這個分區的卷標名及其它一些資訊.
上面這些都還不能自動掛載隨身碟. Gnome 等案頭系統會啟動一個守護進程(daemon), 通過 D-Bus 從 HAL 那裡得到硬體資訊, 如果發現有隨身碟串連了就由它們來掛載它(實際是調用 pmount).
問題是, 如果你不想用Gnome,KDE,Xfce這些案頭系統, 那麼由它們提供的隨身碟自動掛載功能也就失效了,有解決辦法麼?
解決的辦法之一, 便是讓 udev 來幹這件事情!
udev 的主要功能是即時地在 /dev 目錄下建立和刪除裝置節點, 但它也能在建立節點的同時, 執行一個額外地程式. 具體的原理這裡就不詳說了, 有時間請仔細閱讀 Writing udev rules  這篇文章. 寫規則時特別注意 KERNEL, SUBSYSTEM 等這些關鍵字單數和複數(最後有沒有'S')的區別. 複數(比如 KERNELS)表示你想用父裝置的屬性來匹配, 單數(比如 KERNEL)是要匹配裝置本身的屬性.
在 /etc/udev/rules.d 目錄下建立檔案 10_usbkey.rules, 其內容如下
KERNEL=="sda1", SUBSYSTEM=="block", RUN+="/root/usbmount.sh"
其它參考資料:
udev:http://zh.wikipedia.org/wiki/Udev
hal:http://en.wikipedia.org/wiki/Hardware_abstraction_layer
d-bus:http://en.wikipedia.org/wiki/D-BUS

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.