URB处理流程 linux?
发布网友
发布时间:2022-10-03 15:00
我来回答
共1个回答
热心网友
时间:2023-10-10 21:26
URB参数是指向URB的指针,mem flags参数与传递给kmalloc ()函数参数的意义相同,它用于告知USB核心如何在此时分配内存缓冲区。
在提交URB到USB核心后,直到完成函数被调用之前,不要访问URB中的任何成员。
usb_submit_urb ()在原子上下文和进程上下文中都可以被调用,mem_flags变量需根据调用环境进行相应的设置,如下所示。
·GFP_ATOMIC:在中断处理函数、底半部、tasklet、定时器处理函数以及URB完成函数中,在调用者持有自旋锁或者读写锁时以及当驱动将current->state修改为非TASK_RUNNING时,应使用此标志。
·GFP_NOIO:在存储设备的块IO和错误处理路径中,应使用此标志;
·GFP_KERNEL:如果没有任何理由使用GFP_ATOMIC和GFP_NOIO,就使用GFP_KERNEL。
如果usb_submit_urb ()调用成功,即URB的控制权被移交给USB核心,该函数返回0;否则,返回错误号。
4)提交由USB核心指定的USB主机控制器驱动。
5)被USB主机控制器处理,进行一次到USB设备的传送。
第4)~5)步由USB核心和主机控制器完成,不受USB设备驱动的控制。
6)当URB完成,USB主机控制器驱动通知USB设备驱动。