无题

果然是人贱不能移:前几天晚上无论是看电影、还是玩儿游戏都睡不好觉,结果昨天躺床上看了会儿代码,睡得这个香啊!

要说为啥要看代码,因为发现前阵子调查的GadgetFs"似乎"对USB Audio Class的支持有问题:在GadgetFs的驱动代码inode.c中,有一段注释:

/* NOTE:  audio endpoint extensions not accepted here;
* just don't include the extra bytes.
*/

就是讲Audio Endpoint俺们不支持,你爱咋咋的。。。

不支持Audio Endpoint,我就接收不了PCM数据,接下来就没法干了。于是今天查了下kernel 3.18的代码,发现gadget目录下没有inode.c了!!!仔细看了下原来挪到legacy目录下,这不是过时了么!!!上网搜了一下,找了个PDF,里面讲了linux usb gadget driver的发展历史,简述如下:

1. 第一个gadget的framework是由David Brownell在2003年早些时候提出的,正式采用了gadget的命名,而且只很少的UDC driver,g_zero&g_ether就是这时候添加的;

2. 2003年晚些时候,gadgetfs被引入,用于在userspace中开发gadget驱动,MTP/PTP是主要的用例;

3. composite framework在2008年加入,开始支持多功能USB gadget驱动(我的问题就此,没能及时的发现要做的协议和gadgetfs驱动之间是匹配不上的);

4. FunctionFS在2010年引入,重要!相当于多功能版的gadgetfs(但还缺点什么);

5. 3.11的内核,牛B人物来了---USB Gadget ConfigFS,用户空间API可以任意组合已有的Linux USB Gadget驱动,创造出怪物一样的USB Gadget设备;支持所有的除FunctionFS和Mass Storage之外已知gadget驱动;3.13之后,FunctionFS和Mass Storage也提供支持;

世界似乎总是这样:当你为了一些事头痛不以的时候,答案就在下个拐弯的地方等你。。。

你可能感兴趣的:(无题)