受不了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 表示設備忙,可能設備已經被用了,比如已經完成了掛載。