前几天,搞了 hid设备,通过usb hid设备和windows进行通信。现在开始搞这个 mass storge
首先说明 环境:linux版本:3.15 使用开发板:SAMa5d3 编译环境:ubuntu 12.04
1、首先配置内核,见下图
进入
Device Drivers --->
选择进入
[*] USB support --->
再选择最后一项进入
USB Gadget Support --->
选择编译成模块,保存退出。
USB Peripheral Controller --->
│ │ 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
│ │ 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的内核,内核配置与前面的除了最后一项不同,其余一样。最后一项选择:
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的可移动设备中。
可能还有地方有问题没有发现,希望高手指点更正!!!