linux下使用usb总线实现类似于tcp/ip的server/client通信

硬件环境:2440开发板,pc,USB数据线

软件环境:ubuntu,linux 3.4.2


要实现标题的功能,需要写四个程序

1.pc端的host驱动,这个可以借鉴drivers/usb/下的usb-skeleton.c,只需要更改它的vendor_id 和produce_id 即可

2.host端的用户层程序

3.gadget端驱动,即运行在2440上的usb gadget驱动,2440的usb控制器驱动已经写好了,位于drivers/usb/gadget/s3c2410_udc.c,它通过usb_add_gadget_udc将自己注册到udc-core, 类似与host端的usb-core, gadget端驱动也有udc-core,位于drivers/usb/gadget/udc-core.c. usb功能驱动通过usb_gadget_probe_driver将自己注册到udc-core。

4.gadget端用户层程序。


目前遇到的问题总结如下:

1.3c2410_udc.c的debug函数dprintk如果将printk(KERN_DEBUG "%s", printk_buf);  的KERN_DEBUG删除,会出现枚举失败的情况,猜想的原因可能是不加KERN_DEBUG,因为默认printk输出到终端,而加了KERN_DEBUG默认不会输出到终端,需要用dmesg来查看。因为输出到终端,导致需要时间开销较大,造成枚举时给host端的返回数据不够及时,导致出错。

2.usb-skeleton驱动在用户层调用read之后,会陷入内核,调用usb-skeleton的read,而read在提交urb之后会调用wait_fo

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值