USB驅動之主機控制器驅動

2021-08-04 15:46:51 字數 2371 閱讀 5174

usb 主機驅動的整體結構:

usb 主機控制器有 34種規格:ohci (open host controller inte***ce)、uhci(universal host controllerinte***ce) 和 ehci (enhanced host controller inte***ce)。ohci 驅動程式用來為非 pc 系統上以及帶有 sis 和 ali 晶元組的 pc 主機板上的 usb晶元提供支援。uhci 驅動程式多用來為大多數其他 pc 主機板(包括 intel 和 via)上的 usb 晶元提供支援。 ehci 由 usb 2.0 規範所提出, 它相容於 ohci 和 uhci。 uhci的硬體線路比 ohci 簡單,所以成本較低,但需要較複雜的驅動程式,cpu 負荷稍重。xhci,即可拓展主機控制器介面是intel公司開發的乙個usb主機控制器介面,它目前主要面向usb3.0,也支援usb 2.0及以下裝置。

1.主機控制器驅動

在 linux 核心中,用 usb_hcd 結構體描述 usb 主機控制器驅動,它包含 usb 主機控制器的「家務」資訊、硬體資源、狀態描述和用於操作主機控制器的 hc_driver等

usb_hcd結構體

1

struct usb_hcd

2 ;

usb_hcd 中的 hc_driver 成員非常重要,它包含具體的用於操作主機控制器的鉤子函式

hc_driver 結構體

1

struct hc_driver

2 ;

裝置驅動通過usb_submit_urb()提交乙個urb的時候 該函式會呼叫usb_hcd_submit_urb(),並最終呼叫至usb_hcd的driver成員的urb_enqueue函式

在 linux 核心中,使用如下函式來建立 hcd:

struct usb_hcd *usb_create_hcd (const

struct hc_driver *driver,

struct device *dev, char *bus_name);

如下函式被用來增加和移除 hcd:

int usb_add_hcd(struct usb_hcd *hcd,

unsigned

int irqnum, unsigned

long irqflags);

void usb_remove_hcd(struct usb_hcd *hcd);

2.ohci 主機控制器驅動

ohci hcd 驅動屬於 hcd 驅動的例項,它定義了乙個 ohci_hcd 結構體

ohci_hcd 結構體

1

struct ohci_hcd

2 ;

用如下內聯函式可實現 usb_hcd 和 ohci_hcd 的相互轉換:

struct ohci_hcd *hcd_to_ohci (struct usb_hcd *hcd);

struct usb_hcd *ohci_to_hcd (const

struct ohci_hcd *ohci);

從 usb_hcd 得到 ohci_hcd 只是取得「私有」資料,而從 ohci_hcd 得到 usb_hcd 則是通過 container_of()從結構體成員獲得結構體指標。

使用如下函式可初始化 ohci 主機控制器:

int ohci_init (struct ohci_hcd *ohci);
如下函式分別用於開啟、停止及復位 ohci 控制器:

int ohci_run (struct ohci_hcd *ohci);

void ohci_stop (struct usb_hcd *hcd);

void ohci_usb_reset (struct ohci_hcd *ohci);

比如我使用的單板為omap3 所以在\drivers\usb\host\ohci-omap3.c目錄定義了

static const struct hc_driver ohci_omap3_hc_driver = ;
在這裡是用ohci_omap3_hc_driver來作為引數建立hcd

static int __devinit ohci_hcd_omap3_probe(struct platform_device *pdev)

USB主機控制器ECHI

1.主機控制器 host controller uhci universal host controller inte ce 通用主機控制介面,usb1.0 1.1 ohci open host controller inte ce 開放主機控制介面,usb1.0 1.1 ehci enhanced...

usb主機控制器說明

usb拓撲 對於每個嵌入式的cpu晶元中一般都會整合乙個或多個host 控制器,每個host控制器其實就是乙個pci裝置,掛載在pci匯流排上,在linux系統中,驅動開發人員應該給host 控制器提供驅動程式,host 控制器用usb hcd結構來表示。該結構體在 include linux us...

07 Linux USB主機控制器和裝置驅動

移植 ohci s5p 驅動 拷貝drivers usb host 目錄下的 ohci exynos.c 為 ohci s5p.c。然後將所有 exynos 字串替換成 s5p,由於有些地方是 exynos4,所以還需要將 s5p4 替換為 s5p。最後還需要修改下標頭檔案,將 include修改為...