ARM-Linux支持並自動掛載U盤


受不了xxxx惡心人的行為,遂搬遷至博客園。
始發:2015-04-07 19:10:42

  

其實,我是想在ARM開發板上實現我的FW150US-USB無線網卡功能,所以測試下USB接口。

1、配置內核

Device Drivers --->
        SCSI device support --->
                <*> SCSI device support
                [*] legacy /proc/scsi/ support
                <*> SCSI disk support
                <*> SCSI tap support
                <*> SCSI CDROM support
        [*] USB support --->
                <*> Support for Host-side USB
                [*] USB device filesystem
                <*> OHCI HCD support
                <*> USB Mass Storage support
 
File Systems --->
        DOS/FAT/NT  Filesystems --->
                <*>VFAT (Windows-95) fs support
                (936) Default codepage for FAT
                (iso8859-1)Default iocharater for FAT

 

2、燒寫內核並加載

[root@lnx /]# ls /dev/

插入U盤后會發現該目錄下多了sda1(對於有的U盤,並不是這個名字,所以在自動加載腳本里要注意區別對待)節點,這個就是我們系統識別到U盤后分配的。

 

3、手動掛載U盤到指定目錄/udisk

[root@lnx /]# mount /dev/sda1 /udisk/
[root@lnx /]# 
[root@lnx /]# ls /udisk/
images      images____
 
完了之后,卸載之:
[root@lnx /]# umount /udisk/

 

4、自動掛在U盤實現及腳本分析

/etc/mdev.conf 文件中添加如下語句:

sda1            0:0     0600    =udisk */bin/hotplug_usb.sh

如果無法確認是否是[sda1(默認是這個)],使用正則表達式自動匹配:

sd[a-z]*[0-9]   0:0     0600    =udisk */bin/hotplug_usb.sh

  

至於為何這么寫,參見結尾處關於配置文件mdev.comn
hotplug_usb.sh腳本內容及解釋:
 1 #!/bin/sh
 2  
 3 # 為了方便,shell 的環境變量 $MDEV 會被設置成設備名。 例如 the device 'hdc' was matched, MDEV would be set to "hdc"
 4 case $MDEV in
 5     udisk | sda1)
 6             DEVNAME=udisk
 7             MOUNTPOINT=/udisk
 8             ;;
 9     sdcard | mmcblk0p1)
10             DEVNAME=sdcard
11             MOUNTPOINT=/sdcard
12             ;;
13     *)
14             exit 0
15             ;;
16 esac
17 
18 # 若不存在/dev/null節點,創建之
19 test ! -c /dev/null && mknod -m 0666 /dev/null c 1 3
20 
21 # 熱插拔實現原理及過程:
22 #  在/etc/init.d/rcS文件中有句:echo /sbin/mdev > /proc/sys/kernel/hotplug
23 #  那么當有熱插拔事件產生時,內核就會調用位於/sbin目錄的mdev
24 #  這時mdev通過環境變量中的 ACTION 和 DEVPATH(這兩個變量是系統自帶的)來確定此次熱插拔事件的動作以及影響了/sys 中的哪個目錄
25 #  接着會看看這個目錄中是否有“dev”的屬性文件,如果有就利用這些信息為這個設備在/dev 下創建設備節點文件。
26 case $ACTION in
27     remove)
28             /bin/umount $MOUNTPOINT || true
29             rmdir $MOUNTPOINT >/dev/null 2>&1 || true
30             ;;
31     *)
32             /bin/mkdir $MOUNTPOINT > /dev/null 2>&1 || true
33             /bin/mount -t vfat -o codepage=936 -o iocharset=utf8 -o sync -o noatime -o nodiratime /dev/$DEVNAME $MOUNTPOINT > /dev/null 2>&1 || true
34             ;;
35 esac
36  
37 exit 0

 

PS:關於 mdev.conf 文件
/etc/mdev.conf 是mdev 的配置文件,用來控制設備節點的 ownership/permissions。如果不使用該文件,系統默認 root/root 660 權限。
該文件的格式為:
[-]<device regex> <uid>:<gid> <permissions>
或者
@<maj[,min1[-min2]]> <uid>:<gid> <permissions>
或者
$envvar=<regex> <uid>:<gid> <permissions>
比如:
hd[a-z][0-9]*     0:3     660
 
如果我們想把節點移動到另一個目錄或者重命名該節點,則配置格式:
<device regex> <uid>:<gid> <permissions> [=path/new_name]
比如:
hda 0:3 660 =drives/
這樣“ hda ”就被移動到drives/子目錄里面
而:
hdb 0:3 660 =cdrom
就把“ hdb ”重命名成“ cdrom”
 
如果你想 mdev 在找到匹配行時可以執行自定義的命令,那么文件格式如下:
    <device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
 
特殊字符的意義如下:
    @ 在創建設備節點后運行命令。
    $ 在刪除設備節點前運行命令。
    * 在創建設備節點后和刪除設備節點前都運行命令。

比如:

1 sd[a-z]*[0-9] 0:0 0660 @(mount /dev/$MDEV /udisk)
2 sd[a-z]*[0-9] 0:0 0660 *(umount /udisk)

 

PPS:
Device or resource busy 表示設備忙,可能設備已經被用了,比如已經完成了掛載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM