IMX6Q linux使用 usb gadget Storage功能,即板子做U盤和PC機通訊

硬件環境:天嵌IMX6q_coreC

內核版本:4.1.15

目的:板子做USB從機,通過otg連接PC機進行通信。即PC機上IMX6Q相當與U盤

      

      如果板卡作爲PC的外設,通過USB線連接,那麼板卡處於USB Device工作模式,也即是USB Gadget工作模式,這種模式下常見的功能是PC識別板卡爲U盤(USB Gadget Mass Storage Class),雙方交換數據,還有板卡通過PC上網(USB Gadget CDC),板卡端虛擬出一個網絡設備。本篇文章主要介紹板卡作爲PC的外部存儲設備。

 

飛思卡爾源碼原生支持MSC ,即usb gadget 設備中的MSC

MSC即 Mass Storage Class.

一.修改內核配置單

make ARCH=arm menuconfig

Device Drivers  --->
    [*] USB support  --->
        <*>   USB Gadget Support  --->
            <M>   USB Gadget Drivers
                <M>     Mass Storage Gadget

編譯模塊:make modules

只能編譯爲模塊,原因其加載有依賴項目。

驅動模塊生成位置:drivers/usb/gadget/legacy/g_mass_storage.ko

查看其Makefile,有依賴項目:

obj-$(CONFIG_USB_MASS_STORAGE)  += g_mass_storage.o

USB_LIBCOMPOSITE [=m] && USB_F_MASS_STORAGE [=m]

可以追到另外依賴的兩個驅動:1.drivers/usb/gadget/libcomposite.ko  

                                                        2.drivers/usb/gadget/function/usb_f_mass_storage.ko

將這一共3個驅動ko文件一起拷貝到文件系統。

 

 

二.加載驅動

1.分別先按順序加載依賴驅動:

     insmod libcomposite.ko

     insmod usb_f_mass_storage.ko

2.因爲加載MSC驅動是需要參數的,可以直接讓PC機識別SD卡,emmc,nandflash(emmc和nand默認格式爲extn,PC機必須爲linux才能識別):

      (1)讓ubuntuPC機識別板子上的SD卡:

          使用命令df查看SD卡分區,

          /dev/mmcblk1p1  15248320 929240  14319080   7% /run/media/mmcblk1p1         

          使用命令掛載MSC驅動並傳參,SD卡dev路徑:insmod g_mass_storage.ko file=/dev/mmcblk1p1 removable=1

          插上otg連接到PC機就可以讀寫板子上的SD卡數據了,因爲SD卡的格式是fat的在windows下也能識別,

          讀寫emmc,nandflash使用方法一樣,指定的路徑分別改爲emmc和nandflash的路徑就可以了,但是不能被windows識別,因爲windows僅能識別fat格式

 

       (2)在內存創建指定格式的小空間,並跟PC機通訊

             創建一個鏡像(本例放到/opt目錄下,名爲:test.img,容量:10MB):(僅需第一次創建時執行)

             dd if=/dev/zero of=/opt/test.img bs=1M count=10

             格式化鏡像爲fat格式,因爲windows僅能識別fat格式:(僅需第一次創建時執行)
             mkfs.vfat /opt/test.img

             關聯鏡像和loop設備(利用loop設備來掛載):(每次開機都要執行)
             losetup /dev/loop0 /opt/test.img

             掛載loop0到某個目錄下:(每次開機都要執行)
             mount -t vfat /dev/loop0 /mnt

             掛載MSC驅動:(每次開機都有執行),先掛載兩個依賴驅動

             insmod libcomposite.ko

             insmod usb_f_mass_storage.ko

             insmod g_mass_storage.ko file=/dev/loop0 removable=1            

             加載之後插入usb連接到PC,就可以在PC(win7)上訪問板卡了。

            一切完成之後,驗證是否正確。發現在windows下寫入文件或者新建文件夾。在開發板的掛載點的文件夾中能同步到windows的信息。而在開發板中新建的文件或文件夾,需要拔下設備,重連之後才能同步到windows的可移動設備中。

           

            

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章