linux-2.6.35.3 usb gadget zero 与skeleton 存在的问题

首先言明,linux-2.6.35.3 driver/usb/usb-skeleton.c  gadget/f_loopback.c均存在bug。

实验过程:

内核源码用linux-2.6.35.3是周立功MX287提供的。但上述两个源文件应该不是周立功公司提供的。

编译usb-skeleton.c,生成usb-skeleton.ko

编译gadget/zero.c 生成zero.ko.

准备两台设备,均为周立功MX287开发板A, B,A的otg口 和B的host口互联。

设备A  insmod usb-skeleton.ko

设备B :上insmod zero.ko loopdefault=1 。

 设备A 以阻塞的方式打开/dev/skel0, 先写一个一个hello world! 成功,然后去读直接卡死了,没有一点反应。开源的好处就是有源代码可以研究。分析源代码,通过加输出语句,发现第一次读就卡死在297行。

skel_read(....)

{

292         if (!dev->processed_urb) {
293                 /*
294                  * the URB hasn't been processed
295                  * do it now
296                  */
297                 wait_for_completion(&dev->bulk_in_completion);
298                 dev->bulk_in_copied = 0;
299                 dev->processed_urb = 1;
300         }

..

}

这个判断语句,意思是还有urb没有处理,我第一次读,哪里来的urb?这个processed_urb仅存在于struct usb_skel这个结构体中,并在是在probe中创建struct usb_skel dev, 当时全部初始化成0.而这个变量也仅仅在skel_read()中出现,问题那就简单了,在probe中把他初始化成1,在测试,OK,可以回读。这个问题在Linux4.0中的usb-skeleton.c中不存在,processed_urb这个成员变量直接就不存在了。OK, 排了第一个雷。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值