USB Gadget 相关配置¶
USB Gadget 配置流程:
#!/bin/sh
# Mount ConfigFS if not already mounted
if [ ! -d /sys/kernel/config/usb_gadget ]; then
mount -t configfs none /sys/kernel/config
fi
mkdir /sys/kernel/config/usb_gadget/g1 0770
# write USB Device
echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor
echo "0x0440" > /sys/kernel/config/usb_gadget/g1/idProduct
mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409
echo "Microhard" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer
echo "product" > /sys/kernel/config/usb_gadget/g1/strings/0x409/product
# gadget configurations
mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1
echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes
echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower
mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409
# create functions
mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.0
# ln function to config
ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.0 /sys/kernel/config/
usb_gadget/g1/configs/c.1
# enable Gadget
echo "$(ls /sys/class/udc)" > UDC
配置2:
配置 USB ACM(串口)和 USB 大容量存储的示例脚本。
#!/bin/sh
# Mount ConfigFS if not already mounted
if [ ! -d /sys/kernel/config/usb_gadget ]; then
mount -t configfs none /sys/kernel/config
fi
# Create a new gadget
mkdir -p /sys/kernel/config/usb_gadget/g1
cd /sys/kernel/config/usb_gadget/g1
# Set vendor and product ID
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
# Set device information
mkdir -p strings/0x409
echo "0123456789" > strings/0x409/serialnumber
echo "Hywelstar" > strings/0x409/manufacturer
echo "Hywelstar's Upan" > strings/0x409/product
# Create configuration
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ACM and Mass Storage" > configs/c.1/strings/0x409/configuration
echo 120 > configs/c.1/MaxPower
# Add functions
mkdir -p functions/acm.usb0
mkdir -p functions/mass_storage.0
echo /dev/mmcblk0 > functions/mass_storage.0/lun.0/file
# Link functions to configuration
ln -s functions/acm.usb0 configs/c.1/
ln -s functions/mass_storage.0 configs/c.1/
# Enable UDC (USB Device Controller)
echo "$(ls /sys/class/udc)" > UDC
其中,需要块设备( /dev/mmcblk0)设置为一个大容量存储
# 需要块设备( /dev/mmcblk0)设置为一个大容量存储
echo /dev/mmcblk0 > functions/mass_storage.0/lun.0/file
# 关于这个ID 号,根据公司申请的是什么就填写什么
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
新增的串口

Upan 设备
这里是将/dev/mmcblk0 的数据块

假如这个Device 角色的USB设备配置成网络,RNDIS
#!/bin/sh
# Mount ConfigFS if not already mounted
if [ ! -d /sys/kernel/config/usb_gadget ]; then
mount -t configfs none /sys/kernel/config
fi
# Create a new gadget
mkdir -p /sys/kernel/config/usb_gadget/g1
cd /sys/kernel/config/usb_gadget/g1
# Set vendor and product ID
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
# Set device information
mkdir -p strings/0x409
echo "0123456789" > strings/0x409/serialnumber
echo "Hywelstar" > strings/0x409/manufacturer
echo "Hywelstar's Upan" > strings/0x409/product
# Create configuration
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ACM, Mass Storage, and RNDIS" > configs/c.1/strings/0x409/configuration
echo 120 > configs/c.1/MaxPower
# Add functions
mkdir -p functions/acm.usb0
mkdir -p functions/mass_storage.0
mkdir -p functions/rndis.usb0
# Configure Mass Storage
echo /dev/mmcblk0 > functions/mass_storage.0/lun.0/file
# Configure RNDIS
echo "Ethernet Network" > functions/rndis.usb0/host_addr
echo "00:11:22:33:44:55" > functions/rndis.usb0/dev_addr
# Link functions to configuration
ln -s functions/acm.usb0 configs/c.1/
ln -s functions/mass_storage.0 configs/c.1/
ln -s functions/rndis.usb0 configs/c.1/
# Enable UDC (USB Device Controller)
echo "$(ls /sys/class/udc)" > UDC
电脑设备端看到有一个RNDIS设备,安装驱动:

安装rndis 的驱动,同时需要设置IP 就可以像网线一样这样通信了。