USB MSC——虚拟大容量存储设备
内核版本:linux-4.19
加载msc的方式有两种:
- insmod ko模块
- configfs动态配置
insmod ko模块
内核配置
| Device Drivers
| USB support
| USB Gadget Support[=y]
| USB Gadget functions configurable through configfs[=M]
| Generic serial bulk in/out[=y]
| Mass storage[=y]
| Function filesystem (FunctionFS)[=y]
| USB Gadget precomposed configurations[=M]
| Mass Storage Gadget [=M]
加载模块
当前目录下创建分区——20MB Size
dd if=/dev/zero of=/tmp/vfat.img bs=1M count=20
格式化分区为vfat文件系统格式
mkfs.vfat /tmp/vfat.img
捆绑分区到loop0设备节点
losetup /dev/loop0 /tmp/vfat.img
挂载loop0节点到/mnt/usb临时目录
mount /dev/loop0 /mnt/usb
加载libcomposite.ko模块
insmod /lib/modules/$(uname -r)/libcomposite.ko
加载usb_f_mass_storage.ko 模块
insmod /lib/modules/$(uname -r)/usb_f_mass_storage.ko
加载g_mass_storage.ko 模块,并传递loop0设备节点
insmod /lib/modules/$(uname -r)/g_mass_storage.ko file=/dev/loop0 stall=0 removable=1
configfs动态配置
内核配置
| Device Drivers
| USB support
| USB Gadget Support[=y]
| USB Gadget functions configurable through configfs[=y]
| Mass storage[=y]
| Function filesystem (FunctionFS)[=y]
动态配置
挂载configfs系统
mount -t configfs none /sys/kernel/config/
创建usb设备
mkdir /sys/kernel/config/usb_gadget/g1
配置3位16进制的bcdUSB
echo “0x200” > /sys/kernel/config/usb_gadget/g1/bcdUSB
配置3位16进制的/bcdDevice
echo “0x100” > /sys/kernel/config/usb_gadget/g1/bcdDevice
配置4位16进制的VID号
echo “0x3333” > /sys/kernel/config/usb_gadget/g1/idVendor
配置4位16进制的PID号
echo “0x3333” > /sys/kernel/config/usb_gadget/g1/idProduct
创建配置c.1
mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1
创建function
mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.0
创建字符信息
mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409
配置6位10进制的串口号
echo “333333” > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
配置厂商字符串信息
echo “master” > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer
配置产品字符串信息
echo “demo” > /sys/kernel/config/usb_gadget/g1/strings/0x409/product
创建配置下的字符信息
mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409
设置配置名称
echo “demo1” > /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409
/configuration
链接function到配置
ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.0
/sys/kernel/config/usb_gadget/g1/configs/c.1
绑定控制器到虚拟设备
echo “hdc.0” > /sys/kernel/config/usb_gadget/g1/UDC
绑定分区
- 新建固定Size的分区
当前目录下创建分区——20MB Size
dd if=/dev/zero of=/tmp/vfat.img bs=1M count=20
格式化分区为vfat文件系统格式
mkfs.vfat /tmp/vfat.img
捆绑分区到loop0设备节点
losetup /dev/loop0 /tmp/vfat.img
挂载loop0节点到/mnt/usb临时目录
mount /dev/loop0 /mnt/usb
绑定分区到虚拟大容量存储设备
echo “/dev/loop0” > /sys/kernel/config/usb_gadget/g1/configs/c.1/mass_storage.0/lun.0/file
- 绑定已有存储设备
绑定已有的存储设备为虚拟大容量存储设备
echo “/dev/mmcblk1p1” > /sys/kernel/config/usb_gadget/g1/configs/c.1/mass_storage.0/lun.0/file

1967

被折叠的 条评论
为什么被折叠?



