USB MSC

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值