linux usb gadget functionfs的使用

1、关于functionfs
        在听说这个之后,我查了一下资料,现在很多资料的介绍都是内核手册里的一段介绍,使用也只是简单的几个命令怎么用命令去配置usb device的设备,而关于怎么通信却少之又少。
        在3.11之后的内核中,引入了一种新的概念,将原来需要在使用内核模块的工作转移到了用户态,这个概念就是functionfs,在引入functionfs之后,内核引入了gadgetfs,gadgetfs和functionfs相对比呢,gadgetfs还是需要使用内核模块,把类似于设备ID这些参数转到了用户态空间来完成。虽然简化了一些操作,但还是需要编写内核模块,于是又引入了functionfs的概念,functionfs完全不需要编写内核模块。所有的代码都在用户空间完成。

2、基本原理
        内核将usb的ep0暴露到用户态,通过用户态程序与ep0交互实现设备模拟

3、挂载configfs
        mount -t configfs none /sys/kernel/config
通过上面的命令操作之后,将configfs挂载到用户态,通完configfs配置usb。
       mkdir /sys/kernel/config/usb_gadget/g1
创建出usb节点,g1这个名字随便起。
       echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor
       echo "0xD002" > /sys/kernel/config/usb_gadget/g1/idProduct
配置设备的PID和VID。
使用同样的方法配置设备的其它信息,这些信息在主机端使用lsusb将会看到。

4、编码实现

你可能感兴趣的:(functionfs,linux,p2p,运维)