萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 電腦入門

Udev 實現 USB 隨身碟與 SD 卡自動掛載完整教學

Linux 傳統靜態裝置節點方式會在 /dev 建立大量無用節點。udev 基於 sysfs,僅在偵測到硬體時動態建立對應節點,並可透過規則檔實現自動掛載等進階功能。本文詳述 udev 移植與 USB/SD 卡自動掛載完整流程。

一、udev 移植與啟動

1. 取得原始碼並交叉編譯

# 下載 udev-080.tar.bz2 並解壓
# 修改 Makefile
CROSS = arm-softfloat-linux-gnu-
# 編譯並 strip
make
arm-softfloat-linux-gnu-strip udev udevd udevstart udevinfo udevtest
# 複製至 rootfs/bin/

2. 系統啟動時掛載 sysfs、tmpfs 並啟動 udevd

三種等效方式(擇一):

  • 修改 /etc/init.d/rcS: 加入掛載指令與 /bin/udevd --daemon、/bin/udevstart
  • 修改 /linuxrc(若為二進位): 同樣加入掛載與 udev 啟動指令,最後 exec /sbin/init
  • 修改 /etc/fstab 與 rcS: 將 sysfs、tmpfs 寫入 fstab,rcS 僅啟動 udevd 與 udevstart

重啟後系統即具備自動建立裝置節點能力。

二、自動掛載 USB 隨身碟與 SD 卡

1. 建立 udev 規則目錄與設定檔

mkdir -p /etc/udev/rules.d
# /etc/udev/udev.conf
udev_log="err"

2. USB 隨身碟掛載規則 /etc/udev/rules.d/11-add-usb.rules

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

%k 為核心傳入的裝置名稱(如 sda1)。

3. 掛載腳本 /sbin/mount-usb.sh

#!/bin/sh
/bin/mount -t vfat /dev/$1 /tmp
sync

記得 chmod +x /sbin/mount-usb.sh。

4. USB 卸載規則 11-add-remove.rules 與 umount-usb.sh

# 規則
ACTION!="remove", GOTO="farsight"
SUBSYSTEM!="block", GOTO="farsight"
KERNEL=="sd[a-z][0-9]", RUN+="/sbin/umount-usb.sh"
LABEL="farsight"

# 腳本
#!/bin/sh
sync
umount /tmp/

5. SD 卡掛載/卸載規則與腳本(同理,KERNEL 改為 mmcblk[0-9]p[0-9])

# 11-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

# 11-remove-sd.rules
ACTION!="remove", GOTO="farsight"
SUBSYSTEM!="block", GOTO="farsight"
KERNEL=="mmcblk[0-9]p[0-9]", RUN+="/sbin/umount-sd.sh"
LABEL="farsight"

# umount-sd.sh
#!/bin/sh
sync
umount /tmp/

完成驗證

插入 USB 或 SD 卡,系統自動掛載至 /tmp;拔出時自動卸載並同步緩衝區,資料更安全。此架構輕量、無需額外守護程式,極適合嵌入式裝置。

copyright © 萬盛學電腦網 all rights reserved