2 USB 主控制器
本節(jié)簡單了解一下 4412 的主控制驅(qū)動。
2.1 USB 主控制器的功能
USB 主控制器是集成到片上系統(tǒng)的,例如,4412 開發(fā)板,主控制器是在 4412 芯片上,
代碼也是集成在三星原廠提供的內(nèi)核中的。主控制器主要有一下功能:
1. 解析和維護 URB
2. 負責不同 USB 傳輸類型的調(diào)度工作
3. 負責 USB 數(shù)據(jù)的實際傳輸工作
4. 實現(xiàn)虛擬 USB HUB(集線器)的功能
2.2 了解 USB 主控制器驅(qū)動
USB 的 USB CORE 在內(nèi)核源碼“drivers/usb/core/”中,如下圖所示,可以看到和各種
功能對應(yīng)的內(nèi)核源碼。其中有,USBCORE 核心代碼,hub、urb 等等。這些都是具體平臺無
關(guān)的代碼,在任意平臺中都是通用的核心層代碼,給外部驅(qū)動提供對應(yīng)的 API。
另外在內(nèi)核目錄“drivers/usb/serial/”下可以看到前面文檔中介紹的 USB 轉(zhuǎn)串口驅(qū)
動,這個目錄里面是 usb 轉(zhuǎn)串口的驅(qū)動源碼。
USB 主控制在內(nèi)核源碼“drivers/usb/host/”中,如下圖所示,可以看到其中只有一個
編譯生成的“.o”文件。
至此,我們完成分析了主控制的設(shè)備注冊和驅(qū)動注冊。具體實現(xiàn)代碼更加復(fù)雜,但是這部
分不需要我們?nèi)プ觯性瓘S會提供做好的驅(qū)動。
本文檔只是讓大家對主控制驅(qū)動有個感性的認識,在后面文檔中的設(shè)備描述符、URB(請
求塊)才是驅(qū)動學習的重點。
另外還有具體的 USB 驅(qū)動的移植,也比主機驅(qū)動和 USB 核心層驅(qū)動更重要,希望大家不
要花費過多的時間去研究主控制驅(qū)動和 USB 核心層代碼。而是要在主機驅(qū)動和核心層驅(qū)動的
基礎(chǔ)上,移植我們在項目和工程中需要的外圍模塊。到后面,大家會發(fā)現(xiàn),在移植和使用
USB 外圍設(shè)備驅(qū)動的時候,完全不需要用到 USB 主控制器、USB 驅(qū)動框架等等知識。