一.USB的基本概念
在最初的標準里,USB接頭有4條線:電源,D-,D+,地線。我們暫且把這樣的叫做標準的USB接頭吧。后來OTG出現了,又增加了miniUSB接頭。而miniUSB接頭則有5條線,多了一條ID線,用來標識身份用的。
熱插拔(hot-plugging或Hot Swap)即帶電插拔,熱插拔功能就是允許用戶在不關閉系統,不切斷電源的情況下取出和更換損壞的硬盤、電源或板卡等部件,從而提高了系統對災難的及時恢復能力、擴展性和靈活性等。
二.Linux內核USB驅動框架
Linux內核支持兩種主要類型的USB驅動程序:宿主(host)系統上的驅動程序和設備(device)上的驅動程序。從宿主的USB驅動程序控制插入其中的USB設備,而USB設備的驅動程序控制該設備如何作為一個USB設備和主機通信。
主機側:?
從主機側去看,在Linux驅動中,處于USB驅動最底層的是USB主機控制器硬件,在其上的是USB主機控制器驅動,在主機控制器驅動上的為USB核心層,再上層為USB設備驅動層。因此,在主機側的層級結構中,要實現的USB驅動包括:USB主機控制器驅動和USB設備驅動。
USB核心層(USB core)向上為USB設備驅動提供編程接口,向下為USB主機控制器驅動提供編程接口,維護整個系統的USB設備信息,完成設備熱插拔控制、總線數據傳輸控制等。
USB設備驅動(USB Devices driver)負責驅動具體的設備,例如U盤,鼠標等設備。
三.USB設備檢測流程
在主機端控制器驅動加載的過程中,注冊了根集線器,然后匹配了相應的hub驅動程序,同時完成了對Hub的輪詢函數和狀態處理函數的設置。這樣,一旦hub集線器的狀態發生變化,就會產生相應的中斷,主機端控制器就會執行相應的中斷處理函數。Hub集線器主要是用于USB的匹配識別。
?
在系統初始化的時候在usb_init函數中調用usb_hub_init函數,就進入了hub的初始化。
在usb_hub_init函數中完成了注冊hub驅動,并且利用函數kthread_run創建一個內核線程。該線程用來管理監視hub的狀態,所有的情況都通過該線程來報告。
四.USB插拔log分析
待更新。。。。