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  --->
               USB Gadget Drivers
                     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的可移动设备中。

           

            

 

 

你可能感兴趣的:(Linux,IMX6Q)