前面使用configfs配置了一个usb虚拟网卡设备. (cdc ecm)
这里使用configfs配置一个 mass storage设备
1. 准备文件系统,
可以使用实际的本地磁盘分区, 如/dev/mmcblk0p1,
也可以使用自己制作的loop回环块设备。 前提是有做过格式化, 且文件系统主机端能识别。 比如fat格式。
回环块设备制作方式简单如下:
dd if=/dev/zero of=/mnt/mass_stor.img bs=1M count=20
losetup -f /mnt/mass_stor.img (分配可用的loop设备)
mount /dev/loop0 /mnt/media
2. 利用configfs制作gadget mass storage设备
cd /sys/kernel/config
mkdir g_mass
echo "0x200" > bcdUDB
echo "0x100" > bcdDevice
echo "0x1234" > idVendor
echo "0x5678" > idProduct
mkdir configs/c1.1
mkdir functions/mass_storage.0
echo /dev/loop0 > functions/mass_storage.0/lun.0/file
mkdir strings/0x409
echo "0123456789ABCDEF" > serialnumber
echo "river" > manufacturer
echo "river_msc" > product
mkdir configs/c1.1/strings/0x409
echo "abc" > configs/c1.1/strings/0x409/configuration
ln -s functions/mass_storage.0 configs/c1.1
ls /sys/class/udc
fe200000.dwc3
echo "fe200000.dwc3" > UDC
3. ok, mass_storage 设备制作成功
* 注:
利用configfs无法制作多功能的复合设备,
故echo "fe200000.dwc3" > UDC时, 可能会报以下错误:
root@xxx:/sys/kernel/config/usb_gadget/g_ecm# echo "fe200000.dwc3" > UDC
[ 9880.063594] driver->udc_name: fe200000.dwc3
[ 9880.067787] begin to find udc(fe200000.dwc3)
[ 9880.072050] ret = 0
-sh: echo: write error: Device or resource busy
此时, 需要将之前绑定的gadget驱动卸载后才能加载新的驱动。
如何卸载之前的设备,
echo "" > UDC
4. 主机端,
msc驱动为常见驱动,一般Linux和Windows都默认支持, 故不再赘述。