使用configfs配置usb mass storage设备

前面使用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都默认支持, 故不再赘述。

你可能感兴趣的:(USB)