IMX6Q linux使用 usb gadget Storage功能,即板子做U盘和PC机通讯

本文介绍如何在天嵌IMX6q_coreC开发板上配置USB Gadget MSC模式,使板卡作为PC的外部存储设备运行。包括内核配置、驱动编译与加载步骤,以及如何让PC识别开发板上的存储介质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

硬件环境:天嵌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的可移动设备中。

           

            

 

 

<think>我们正在讨论Linux内核中的g_mass_storage模块。根据引用内容,这个模块与USBgadget功能有关,允许设备作为USB大容量存储设备(如U使用功能:-将嵌入式设备(如开发板)模拟成USB存储设备-通过USB接口向主(如PC)提供存储访问-使用镜像文件作为存储介质用途:1.开发测试:在嵌入式开发中模拟U功能2.数据交换:在无存储接口的设备上实现文件传输3.系统维护:通过USB更新固件或恢复系统关键步骤(引用[3]):1.创建镜像文件2.格式化为vfat文件系统3.挂载镜像文件4.加载模块:gadgetfs,libcomposite,usb_f_mass_storage,g_mass_storage模块加载示例:```bashmodprobeg_mass_storagefile=/dev/loop0stall=0removable=1```技术细节(引用[4]):-处理USB与SCSI协议转换-字节序转换(LE/BE)-容量报告修正相关问题:1.g_mass_storage模块如何配置多个LUN?2.使用g_mass_storage时如何避免数据损坏?3.g_mass_storage支持哪些文件系统类型?</think>### g_mass_storage模块的功能与用途 `g_mass_storage`是Linux内核的USB gadget驱动模块,主要功能是**将嵌入式设备(如开发板)模拟成USB大容量存储设备**(如U或移动硬)。其核心用途是通过USB接口向主(如PC)提供存储访问能力。 #### 核心功能 1. **设备模拟** - 允许嵌入式设备作为标准USB Mass Storage Class设备被主识别 - 支持`SCSI``Bulk-Only Transport`协议规范[^4] 2. **存储介质映射** - 将本地文件/块设备映射为虚拟存储空间 - 支持镜像文件(如`.img`)或物理块设备(如`/dev/mmcblk0`)作为后端存储[^3] ```bash # 示例:使用1GB镜像文件模拟U modprobe g_mass_storage file=/path/to/image.img ``` 3. **协议转换** - 在USB协议与存储协议间转换数据 - 自动处理字节序转换(LE/BE)容量报告修正[^4] #### 典型应用场景 1. **嵌入式开发** - 开发板通过USBPC暴露存储分区,实现文件传输 - 引用案例:ARM板加载模块后可作为U被Windows识别[^2] 2. **系统维护** - 通过USB更新设备固件(如将固件镜像写入开发板) - 实现无网络环境下的数据交换 3. **虚拟设备测试** - 创建虚拟U测试主USB驱动兼容性 - 模拟不同文件系统(FAT32/ext4等)的存储设备 #### 技术特点 | 特性 | 说明 | |---------------|----------------------------------------------------------------------| | **热插拔** | 支持`removable=1`参数模拟可移动设备[^3] | | **多LUN支持** | 可配置多个逻辑单元(需修改驱动) | | **性能调优** | `stall=0`参数禁用STALL信令提升传输速度[^3] | | **安全卸载** | 需确保主卸载后执行`rmmod`,否则可能导致资源泄漏[^1] | > 模块路径:`/driver/usb/gadget/g_mass_storage.ko`(需内核启用`CONFIG_USB_GADGET`)[^2]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世黎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值