linux 开发板(Linux USB Gadget) 模拟u盘

http://blog.youkuaiyun.com/a_tu_/article/details/43707023

前几天,搞了 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的可移动设备中。

可能还有地方有问题没有发现,希望高手指点更正!!!

### 配置 U 模拟 SD 卡功能 在 Linux 系统中,可以通过特定的方法使 U 具备类似于 SD 卡的功能。具体实现方式依赖于系统的底层支持以及相应的驱动程序。 #### 使用 USB Gadget 模拟 SD 卡 对于某些嵌入式 Linux 设备而言,可以利用 `USB Gadget` 功能来让外部计算机认为该设备挂载了一个可读写的存储介质。通过配置 `configfs` 和加载合适的内核模块,可以让开发板上的 U 被 PC 识别为 FAT32 分区的 SD 卡[^4]。 ```bash sudo modprobe g_mass_storage file=/dev/sdX removable=1 cdrom=0 stall=0 ro=0 ``` 上述命令中的 `/dev/sdX` 应替换为实际代表 U 的设备节点名称;此操作会使指定的 U 作为大容量存储设备暴露给主机系统,并允许对其进行读写访问。 当完成文件传输之后,为了确保数据一致性,在断开连接前应当卸载对应的磁分区: ```bash sync && sudo umount /media/user/usb-drive-label-or-id ``` 这里假设已经知道目标路径名 `/media/user/usb-drive-label-or-id` 是用来表示已装载的 U 位置。 #### 文件系统格式化注意事项 值得注意的是,如果希望 Windows 或其他操作系统能够顺利地识别并使用这个 U ,则建议提前将其格式化成常见的文件系统类型如 FAT32 或 exFAT。即使跳过了手动格式化的步骤,首次插入未初始化过的 U 时,Windows 还是可以自动提示用户进行必要的格式化过程[^1]。 #### 实现跨平台兼容性 为了让不同类型的计算环境都能良好协作,除了正确设置硬件接口外,还需要考虑软件层面的因素。例如,确保所选文件系统能够在各个平台上无障碍工作,同时也要注意权限管理等问题以便应用程序正常存取所需资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值