1. 程式人生 > >linux 開發板(Linux USB Gadget) 模擬u盤

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的可移動裝置中。

可能還有地方有問題沒有發現,希望高手指點更正!!!