文章目录

  • 一、创建设备
  • 二、创建配置
  • 三、创建功能
  • 四、将功能和对应的配置关联起来
  • 挂载functionfs文件系统
  • 五、使能该设备
  • 六、去使能该设备
  • 七、清除
  • 实现设计
  • 参考资料

cfg文件所在路径
https://gitee.com/openharmony/device_board_hihope/blob/master/rk3568/cfg/init.rk3568.usb.cfg
https://gitee.com/openharmony/drivers_peripheral/blob/master/usb/cfg/init.usb.configfs.cfg

  • 首先将configfs文件系统挂载到系统上
    mount configfs none /config

一、创建设备

  • 创建设备对应的目录:
    mkdir /config/usb_gadget/g1 0770 shell shell
  • 每个设备有它自己的product id和vendor id
    write /config/usb_gadget/g1/idVendor 0x2207
    write /config/usb_gadget/g1/idProduct 0x0018
  • 每个设备 也必须有他的 序列号、厂商、产品字符串,创建一个string目录用来存放这些信息。
    mkdir /config/usb_gadget/g1/strings/0x409 0770
    copy /sys/block/mmcblk0/device/cid /config/usb_gadget/g1/strings/0x409/serialnumber
    write /config/usb_gadget/g1/strings/0x409/manufacturer Rockchip
    write /config/usb_gadget/g1/strings/0x409/product \"HDC Device\"

二、创建配置

  • 每个设备由许多配置组成,这些配置对应的目录也需要被创建
    mkdir /config/usb_gadget/g1/configs/b.1 0770 shell shell
  • 每个配置也需要有自己的字符串,所以对于每种语言需要创建一个对应的string目录
    mkdir /config/usb_gadget/g1/configs/b.1/strings/0x409 0770 shell shell
  • 然后这个配置的字符串就可以被写进去了
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration hdc
  • 这个配置的其它一些属性也可以被设置进去
    write /config/usb_gadget/g1/configs/b.1/MaxPower 500

三、创建功能

  • 设备将会提供一些功能,对于每一个功能其对应的目录也必须被创建
    mkdir /config/usb_gadget/g1/functions/ffs.hdc

四、将功能和对应的配置关联起来

  • 现在创建了很多设备,每个设备有一些配置和一些功能。那么接下来就需要我们标识出来哪些功能在哪个配置里面是有效。一个功能可以被包含在多个配置当中。上述动作通过符号链接来完成。
    symlink /config/usb_gadget/g1/functions/ffs.hdc /config/usb_gadget/g1/configs/b.1/f1

挂载functionfs文件系统

  • functionfs可以把它当做一个具有独特行为的复合function。主要作用是在挂载的functionfs文件系统目录下生成ep0目录,用来写入描述符和字符串完成协商。
    mount functionfs hdc /dev/usb-ffs/hdc uid=2000,gid=2000

五、使能该设备

  • 为了使能这个设备我们必须要将它绑定到某个udc上面去
    write /config/usb_gadget/g1/UDC ${sys.usb.controller}
    UDC名称应该是目录/sys/class/udc/*下面的某一个。

六、去使能该设备

  • write /config/usb_gadget/g1/UDC none

七、清除

  • 从配置里面移除功能
    rm /config/usb_gadget/g1/configs/b.1/f1
  • 移除配置里面的字符串目录(没找到)
    rmdir configs/<config name>.<number>/strings/<lang>
  • 移除配置(没找到)
    rmdir configs/<config name>.<number>
  • 移除功能(没找到)
    rmdir functions/<name>.<instance name>
  • 移除设备字符串目录(没找到)
    rmdir strings/<lang>
  • 最后移除设备
    rmdir <gadget name>

实现设计

  • 一个gadget有它的config组,这个组有一些属性(idVendor, idProduct etc)和默认的子组(configs, functions, strings)。
  • 写这些属性,将会导致这些属性存储在对应的位置。在configs, functions, strings子组里面,用户可以创建他们的子组,代表相应的配置,功能和字符串。
  • 用户可以创建一些配置和功能,并使用符号链接将他们关联起来。在设备的UDC属性被写之后,这些信息将会被使用。这个写意味着将该设备和对应的UDC关联起来了。
  • drivers/usb/gadget/configfs.c里面的代码将会便利所有的配置,在每个配置里面将会便利所有的功能,并绑定他们。

参考资料

Linux USB gadget configured through configfs
How FunctionFS works

【OpenHarmony】usb gadget 配置hdc功能cfg文件解读相关推荐

  1. PXE配置中ks.cfg文件介绍

    ks.cfg文件:又称Kickstart文件,主要用于Linux系统的自动化安装. 在CentOS系统中 /root/anaconda-ks.cfg就是一个ks.cfg文件,它指明了当前系统预安装环境 ...

  2. python中怎么创建配置文件_在Python中创建游戏配置/选项(config.cfg)文件

    myConfig.cfg: [info] Width = 100 Height = 200 Name = My Game 解析python: import ConfigParser configPar ...

  3. android usb gadget分析

    Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c.这个文件实现USB的上层应用协议. 首先包含了一些 ...

  4. Android 8.1 usb gadget configuration

    Android 8.1 usb gadget configuration Android的usb gadget配置流程 开机过程中usb gadget配置 第一种:rc脚本 第二种:UsbDevice ...

  5. USB gadget 驱动之 android.c

    1. Gadget驱动 1.1 Gadget框架结构 kernel/drivers/usb/gadget,这个目录是android下usb gadget的主要目录. (1)Gadget功能组织单元:主 ...

  6. Android USB gadget

    Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c.这个文件实现USB的上层应用协议. 首先包含了一些 ...

  7. 迪文串口屏的CFG文件怎么用?

    迪文科技DGUS II中的CFG文件是系统参数配置文件,采用十六进制通过UltraEdit等软件进行编辑. 根据智能屏型号查找对应DGUS应用指南,参照应用指南CFG参数说明部分进行配置.以T5L 0 ...

  8. linux选择usb功能,USB gadget设备驱动解析(1)——功能体验

    利用Linux USB gadget设备驱动可以实现一些比较有意思的功能,举两个例子: 1.一个嵌入式产品中的某个存储设备,或是一个存储设备的某个分区,可以作为一个U盘被PC:设别,从而非常方便的完成 ...

  9. linux/android系统的USB gadget configfs用户空间配置USB HID U盘 adb dcd等模式的使用

    USB gadget configfs模式的使用: 即可android或linux在用户空间配置实现设备终端为HID,U盘.Adb以及cdc等功能 1.创建gadgets 每个gadget都必须创建自 ...

最新文章

  1. WordPress工作原理之程序文件执行顺序
  2. 使用ASP.NET MVC 2编程时遇到的两个小问题
  3. 如何监控和优化mysql查询性能_如何监视MySQL的性能
  4. react dispatch_React测试的那些事(三) React Hook 测试实例
  5. python 入门到实践期末考试常出现的考试内容_Python编程入门到实践—列表篇(一)...
  6. 每周总结(第十一周)
  7. 详解CSS display:inline-block的应用(转)
  8. 开发pc页面_干货分享:2020年Web前端开发学习路线图
  9. 巅峰对决 Spring Boot VS .NET 6
  10. HDU 4534 郑厂长系列故事——新闻净化
  11. python环境变量配置_Python零基础入门到年薪二十万-1.1节: 在windows中安装Python
  12. google 手机号码校验库libphonenumber
  13. mac rz sz的使用
  14. 移动硬盘格式化后还能恢复数据吗 格式化的移动硬盘数据能恢复吗
  15. 文件流转换为base64码 和 base64码转换为文件流
  16. Android Retrofit Put请求
  17. 电脑怎么设置开机密码?简单几步给你的电脑“上锁”
  18. 电子邮箱邮件怎么撤回,邮箱如何撤回邮件?
  19. Teams通话质量仪表盘进阶使用
  20. 陀螺仪随机误差的Allan方差分析

热门文章

  1. C语言fgetc和fputc函数用法详解
  2. Python数据分析5——数据清洗
  3. 20220323补卡-AC算法
  4. win10占用cpu过高的可能解决方法
  5. jQuery AJAX获取JSON数据解析多种方式示例
  6. 主成分分析的概念与发展
  7. 2021-06-20
  8. cmd -- bash编程
  9. java urlencode 解码_UrlEncode编码/UrlDecode解码使用方法
  10. 避免在循环中访问数据库,一次对于PHP代码的优化经历