Linux configfs的使用

描述

1. 体验

1.1 使用

所有命令都是在开发板上执行。

  • 挂载 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
    

    创建目录后,里面就自动生成了很多文件、目录,比如:

    • idVendor:表示厂家 ID,默认值是 0
    • idProduct:表示产品 ID,默认值是 0
  • 设置设备描述符,比如设置厂家 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
    

1.2 清除

  • 禁止 Gadget
    echo "" > UDC
    
  • 移除配置里的功能(Remove functions from configurations):命令:rm configs/./
    rm  configs/c.1/acm.test1
    
  • 移除配置:rmdir configs/.
    rmdir configs/c.1
    
  • 移除功能:rmdir functions/.
    rmdir functions/acm.test1
    
  • 移除 Gadget
    rmdir test_serial
    

1.3 STM32MP157上的实验

因为 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
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分