標籤:linux usb 核心配置 arm mdev
筆記性質的文章。
其實,我是想在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 supportFile Systems ---> DOS/FAT/NT Filesystems ---> <*>VFAT (Windows-95) fs support (936) Default codepage for FAT (iso8859-1)Default iocharater for FAT
2、燒寫核心並載入
[[email protected] /]# ls /dev/
插入隨身碟後會發現該目錄下多了sda1(對於有的隨身碟,並不是這個名字,所以在自動載入指令碼裡要注意區別對待)節點,這個就是我們系統識別到隨身碟後分配的。
3、手動掛載隨身碟到指定目錄/udisk
[[email protected] /]# mount /dev/sda1 /udisk/[[email protected] /]# [[email protected] /]# ls /udisk/images images____完了之後,卸載之:[[email protected] /]# umount /udisk/
4、自動掛在隨身碟實現及指令碼分析
在/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指令碼內容及解釋:
#!/bin/sh# 為了方便,shell 的環境變數 $MDEV 會被設定成裝置名稱。 例如 the device 'hdc' was matched, MDEV would be set to "hdc"case $MDEV in udisk | sda1) DEVNAME=udisk MOUNTPOINT=/udisk ;; sdcard | mmcblk0p1) DEVNAME=sdcard MOUNTPOINT=/sdcard ;; *) exit 0 ;;esac# 若不存在/dev/null節點,建立之test ! -c /dev/null && mknod -m 0666 /dev/null c 1 3# 熱插拔實現原理及過程:# 在/etc/init.d/rcS檔案中有句:echo /sbin/mdev > /proc/sys/kernel/hotplug# 那麼當有熱插拔事件產生時,核心就會調用位於/sbin目錄的mdev# 這時mdev通過環境變數中的 ACTION 和DEVPATH(這兩個變數是系統內建的)來確定此次熱插拔事件的動作以及影響了/sys中的那個目錄# 接著會看看這個目錄中是否有“dev”的屬性檔案,如果有就利用這些資訊為這個裝置在/dev 下建立裝置節點檔案。case $ACTION in remove) /bin/umount $MOUNTPOINT || true rmdir $MOUNTPOINT >/dev/null 2>&1 || true ;; *) /bin/mkdir $MOUNTPOINT > /dev/null 2>&1 || true /bin/mount -t vfat -o codepage=936 -o iocharset=utf8 -o sync -o noatime -o nodiratime /dev/$DEVNAME $MOUNTPOINT > /dev/null 2>&1 || true ;;esacexit 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>]
特殊字元的意義如下: @ 在建立裝置節點後運行命令。 $ 在刪除裝置節點前運行命令。 * 在建立裝置節點後和刪除裝置節點前都運行命令。比如:
sd[a-z]*[0-9] 0:0 0660 @(mount /dev/$MDEV /udisk)sd[a-z]*[0-9] 0:0 0660 *(umount /udisk)
PPS:
Device or resource busy表示裝置忙,可能裝置已經被用了,比如已經完成了掛載。
ARM-Linux支援並自動掛載隨身碟