当前位置: 技术问答>linux和unix
linux中usb驱动的timerout问题
来源: 互联网 发布时间:2016-08-05
本文导语: 在bulk发送和接收USB数据时候.很多会调用一个usb_submit_urb函数. 请问如何设置timerout时间溢出让USB在规定的时间内无法完成就放弃该urb操作. 我没发现在哪里可以设置timerout参数啊. | 这个你的看看你的USB驱动提供...
在bulk发送和接收USB数据时候.很多会调用一个usb_submit_urb函数. 请问如何设置timerout时间溢出让USB在规定的时间内无法完成就放弃该urb操作. 我没发现在哪里可以设置timerout参数啊.
|
这个你的看看你的USB驱动提供给你的接口。
|
跟 kmalloc一样,既可以用在中断上下文,也可以用在进程上下文,也没有地方设置kmalloc的超时
usb_submit_urb也一样
usb_submit_urb也一样
|
usb_bulk_msg() 可以实现timeout
|
linux没那么不经搞吧
可以调用usb_submit_urb之后查看struct urb的status判断是否成功
就是说它也允许失败,控制权还还给你,不会一直执行下去的
可以调用usb_submit_urb之后查看struct urb的status判断是否成功
就是说它也允许失败,控制权还还给你,不会一直执行下去的
|
usb_fill_int_urb 里有一个参数指定缓冲区大小,对应struct urb里的transfer_buffer_length
我还没有分析usb_submit_urb的能力
查看代码得知usb_submit_urb调用了 usb_hcd_submit_urb
usb_hcd_submit_urb 里最后
if (atomic_read(&urb->reject))
wake_up(&usb_kill_urb_queue);
urb->reject是只能由USB核心和主机控制器访问的,被置位表示传输将失败
于是唤醒了usb_kill_urb_queue 队列
我还没有分析usb_submit_urb的能力
查看代码得知usb_submit_urb调用了 usb_hcd_submit_urb
usb_hcd_submit_urb 里最后
if (atomic_read(&urb->reject))
wake_up(&usb_kill_urb_queue);
urb->reject是只能由USB核心和主机控制器访问的,被置位表示传输将失败
于是唤醒了usb_kill_urb_queue 队列