linux usb声卡 submit urb,Linux 內核提交 urb

本文详细介绍了如何通过usb_submit_urb函数将URB提交给USB核心进行数据传输。阐述了不同内存分配标志(GFP_ATOMIC、GFP_NOIO、GFP_KERNEL)的适用场景,确保在各种上下文中正确调用。
AI助手已提取文章相关产品:

一旦 urb 被正確地創建,並且被 USB 驅動初始化, 它已准備好被提交給 USB 核心來發送 出到 USB 設備. 這通過調用函數 usb_submit_urb 實現:

int usb_submit_urb(struct urb *urb, int mem_flags);

urb 參數是一個指向 urb 的指針, 它要被發送到設備. mem_flags 參數等同於傳遞給 kmalloc 調用的同樣的參數, 並且用來告訴 USB 核心如何及時分配任何內存緩沖在這個 時間.

在 urb 被成功提交給 USB 核心之后, 應當從不試圖存取 urb 結構的任何成員直到完成 函數被調用.

因為函數 usb_submit_urb 可被在任何時候被調用(包括從一個中斷上下文), mem_flags 變量的指定必須正確. 真正只有 3 個有效值可用, 根據何時 usb_submit_urb 被調用:

GFP_ATOMIC

這個值應當被使用無論何時下面的是真:

· 調用者處於一個 urb 完成處理者, 一個中斷, 一個后半部, 一個 tasklet, 或者一個時鍾回調.

調用者持有一個自旋鎖或者讀寫鎖. 注意如果正持有一個旗標, 這個值不必要.

current->state 不是 TASK_RUNNING. 狀態一直是 TASK_RUNNING 除非驅動已 自己改變 current 狀態.

GFP_NOIO

這個值應當被使用, 如果驅動在塊 I/O 補丁中. 它還應當用在所有的存儲類型的 錯誤處理補丁中.

GFP_KERNEL

這應當用在所有其他的情況中, 不屬於之前提到的類別.

您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值