2.跟我走吧,現在就出發

2.跟我走吧,現在就出發

這裏說的是USB中的Hub。在USB的世界裏,Hub永遠都只是綠葉,它不可能是紅花,它的存在只是爲了支持更多設備連接到USB總線上來,誰也不會爲了使用Hub而購買Hub,買Hub的原因是爲了要使用別的設備。

也許設計代碼的人和我一樣,希望大家能夠更多地關注Hub,所以,關於Hub的代碼在Core的目錄下面。

在Linux內核代碼目錄中, 所有設備驅動程序有關的代碼都在drivers/目錄下面,在這個目錄中的USB子目錄包含了所有USB設備的驅動,而USB目錄下面又有它自己的子目錄。

注意到每一個目錄下面都有一個Kconfig文件和一個Makefile,這很重要。再厲害的黑客如果不看Makefile,不看Kconfig,也別想搞清楚這裏的結構。很多年輕人喜歡研究usb-skeleton.c,據說這個文件對他們很有啓發,所以這裏我也推薦這個文件。有時間有興趣的話可以看一看,其實就是一個簡單的USB設備驅動程序的框架。

執行命令lsmod,查看它的輸出,找到了USBcore那一行嗎?Core就是核心,你需要在你的電腦裏用USB設備,那麼兩個模塊是必需的,一個是usbcore,這就是核心模塊;另一個是主機控制器的驅動程序,比如在usbcore那一行看到的ehci_hcd和uhci_hcd。

什麼是EHCI? OHCI就是主機控制器的接口。從硬件上來說,USB設備要想工作,除了外設本身,必須還有一個USB主機控制器。一般來說,一個電腦裏有一個USB主機控制器就可以了,它就可以控制很多個設備了,比如U盤,USB鍵盤,USB鼠標。所有的外設都把自己的請求提交給USB主機控制器。然後讓USB主機控制器統一來調度。而設備怎麼連到主機控制器上?這就是我們故事的主角--Hub,"乳名"叫做集線器。

關於Hub的代碼,在drivers/usb/core/目錄下面,有一個叫做hub.c的文件。這個文件可不簡單。

  1. localhost:/usr/src/linux-2.6.22/drivers/usb/core # wc -l hub.c  
  2. 3122 hub.c 

Hub竟然有三千多行代碼,真要是按行計費,寫代碼的那些傢伙還不發財了?事實還好不是那樣。

三千多行就三千多行吧,總不能見困難就退吧。跟我走吧,現在就出發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章