所有命令都是在开发板上执行。
挂载 configfs 文件系统
# modprobe libcomposite
# mount -t configfs none /sys/kernel/config
# ls /sys/kernel/config/
usb_gadget
#ls /sys/kernel/config/usb_gadget // 一开始它是空目录
创建目录
# cd /sys/kernel/config/usb_gadget
# mkdir test_serial
# ls test_serial/ -l
total 0
-rw-r--r-- 1 root root 4096 Jan 1 03:20 UDC
-rw-r--r-- 1 root root 4096 Jan 1 03:20 bDeviceClass
-rw-r--r-- 1 root root 4096 Jan 1 03:20 bDeviceProtocol
-rw-r--r-- 1 root root 4096 Jan 1 03:20 bDeviceSubClass
-rw-r--r-- 1 root root 4096 Jan 1 03:20 bMaxPacketSize0
-rw-r--r-- 1 root root 4096 Jan 1 03:20 bcdDevice
-rw-r--r-- 1 root root 4096 Jan 1 03:20 bcdUSB
drwxr-xr-x 2 root root 0 Jan 1 01:49 configs
drwxr-xr-x 2 root root 0 Jan 1 01:49 functions
-rw-r--r-- 1 root root 4096 Jan 1 03:20 idProduct
-rw-r--r-- 1 root root 4096 Jan 1 03:20 idVendor
drwxr-xr-x 2 root root 0 Jan 1 01:49 os_desc
drwxr-xr-x 2 root root 0 Jan 1 01:49 strings
创建目录后,里面就自动生成了很多文件、目录,比如:
设置设备描述符,比如设置厂家 ID、产品 ID,这是可选的
echo "0x1234" > idVendor
echo "0x5678" > idProduct
创建配置:格式为"configs/.",name 可以取任意字符,number 是配置编号
mkdir configs/c.1
创建功能(function、接口):格式为"functions/.",name 对应 function 的名字,比如 acm 对应 ACM 功能,对应的驱动为usb_f_acm.ko;instance name 可以取任意字符
mkdir functions/acm.test1
把配置和功能联系起来:ln -s functions/. configs/.
ln -s functions/acm.test1 configs/c.1/
使能 Gadget(确定使用哪个 USB Device Controller):echo > UDC,可用的 UDC,可以在 /sys/class/udc/* 目录下查看
echo ci_hdrc.0 > UDC
echo "" > UDC
rm configs/c.1/acm.test1
rmdir configs/c.1
rmdir functions/acm.test1
rmdir test_serial
因为 STM32MP157 系统里已经使用 adb 设备,要想模拟串口设备,需要先清除 adb,命令如下:
cd /sys/kernel/config/usb_gadget/g1
echo "" > UDC
rm configs/b.1/ffs.adb
rmdir configs/b.1/strings/0x409
rmdir configs/b.1
rmdir functions/ffs.adb
rm strings/0x409
cd ..
rmdir g1
清除后,就按照《1.1 使用》来操作,需要注意的是最后一步:
ls /sys/class/udc/
49000000.usb-otg
echo 49000000.usb-otg > UDC
全部0条评论
快来发表一下你的评论吧 !