linux 開發板(Linux USB Gadget) 模擬u盤
前幾天,搞了 hid裝置,通過usb hid裝置和windows進行通訊。現在開始搞這個 mass storge
首先說明 環境:linux版本:3.15 使用開發板:SAMa5d3 編譯環境:ubuntu 12.04
1、首先配置核心,見下圖
進入
Device Drivers --->
選擇進入
[*] USB support --->
再選擇最後一項進入
<*> USB Gadget Support --->
選擇編譯成模組,儲存退出。
USB Peripheral Controller --->
│ │ <M> USB Gadget Drivers
│ │ < > USB functions configurable through configfs
│ │ < > Gadget Zero (DEVELOPMENT)
│ │ < > Ethernet Gadget (with CDC Ethernet support)
│ │ < > Network Control Model (NCM) support
│ │ < > Gadget Filesystem
│ │ < > Function Filesystem
│ │ <M> Mass Storage Gadget
會在driver/usb/gadget/目錄下生成以下的ko檔案:
-rw-rw-r-- 1 a_tu a_tu 11253 2月 10 18:03 drivers/usb/gadget/g_mass_storage.ko
-rw-rw-r-- 1 a_tu a_tu 49265 2月 10 18:03 drivers/usb/gadget/libcomposite.ko
-rw-rw-r-- 1 a_tu a_tu 57658 2月 10 18:03 drivers/usb/gadget/usb_f_mass_storage.ko
如果你是用的2.6.3的核心,核心配置與前面的除了最後一項不同,其餘一樣。最後一項選擇:
<M> File-backed Storage Gadget
則生成的ko檔案為:
drivers/usb/gadget/g_file_storage.ko
把這些驅動檔案和核心拷貝到開發板中。
2、對開發板的操作
首先建立一個映象模擬U盤
#dd if=/dev/zero of=vfat.img bs=1M count=20 //製作一個fat格式的映象檔案,在主機上、開發板上做都可以
然後 mkdir vfat_mount_point//建立掛載點
mkfs.vfat vfat.img//格式化做出的映象 (如果你的開發板沒有mkfs命令,可以將sd卡插入虛擬機器,在虛擬機器的ubuntu下執行)當然如果這一步,沒有做也沒有關係,等windows發現新可移動裝置的時候,會提示你要格式化裝置,這時,會提示你選擇格式化的格式,選擇預設,格式化就ok了。
最後執行指令碼 storage.sh 。把這些命令寫成一個指令碼很方便,不用一條條的輸入,你還可以將這個指令碼寫的 /etc/init.d/rcS/這個啟動檔案中,讓它每次開機都自己執行。指令碼內容如下。提醒,下面命令要按順序寫
losetup /dev/loop0 vfat.img //將映象與loop0建立連線
insmod gadgetfs.ko
insmod libcomposite.ko
insmod usb_f_mass_storage.ko
mount /dev/loop0 vfat_mount_point //掛載掛載點
insmod g_mass_storage.ko file=/dev/loop0 stall=0 removable=1
執行完指令碼之後,核心提示資訊g_mass_storage gadget: g_mass_storage ready,說明你已經成功了,插上usb裝置。windows會提示你發現新的可移動裝置。
一切完成之後,驗證是否正確。發現在windows下寫入檔案或者新建資料夾。在開發板的掛載點的資料夾中能同步到windows的資訊。而在開發板中新建的檔案或資料夾,需要拔下裝置,重連之後才能同步到windows的可移動裝置中。
可能還有地方有問題沒有發現,希望高手指點更正!!!