Linux那些事兒之我是EHCI 2 套路

2021-08-22 14:00:38 字數 1982 閱讀 5633

子曰:按套路出牌。的確,什麼東西都有套路,泡妞有泡妞的套路,花前月下不如花錢日下。打麻將有打麻將的套路,少吃少碰少放炮,多摸多槓多發財。星際有星際的套路,linux也有linux的套路。劉濤姐姐的故事再一次告訴我們,年齡不是問題,身高不是距離,有cai就行。

我們不妨看看 modprobe ehci-hcd 之後發生了什麼事情。ehci-hcd是乙個驅動程式,不知您記不記得我在sysfs中談論過裝置模型。有兩個重要的鍊錶掛在bus上,乙個是裝置device鍊錶,乙個是驅動driver鍊錶。

每當我們向一根bus註冊乙個驅動driver時,套路是這樣的:

driver_register(struct device_driver * drv) -> bus_add_driver() -> driver_attach() ->

bus_for_each_dev(drv->bus, null, drv, __driver_attach);

bus_for_each_dev遍歷該匯流排上所有的device,執行一次__driver_attach(),看能不能將驅動關聯(attach)到某個裝置上去。

__driver_attach()

->driver_probe_device()

->drv->bus->match(dev, drv), // 呼叫bus的match函式,看device和driver匹不匹配。如果匹配上,

繼續執行really_probe()。

->really_probe()

->driver->probe()。(如果bus->probe非空,則呼叫bus->probe)

而每當我們向一根bus新增乙個硬體時時,套路是這樣的:

device_add()

// device_add 中有很多操作kobject,註冊sysfs,形成硬體hiberarchy結構的**。

如果您忘記了,先回頭去參考參考"我是sysfs"

->bus_attach_device() -> device_attach() ->bus_for_each_drv()

bus_for_each_drv與bus_for_each_dev類似,遍歷該匯流排上所有的driver,執行一次__device_attach(),看能不能將裝置關聯(attach)到某個已登記的驅動上去。

__device_attach()

->driver_probe_device() //後面與上面一樣

總結一些,一句話,註冊乙個某個bus的驅動就是先把驅動自己鏈入到bus驅動鏈表中去,在從bus的裝置鍊錶中一一尋找,看有沒有自己可以關聯上的裝置。找到就probe,再把二者bind起來。反之,新增裝置道理也是一樣的。

好吧,我們還是看看modprobe ehci-hcd後的事情。一切從此開始,

module_init(ehci_hcd_init);

我們把不必要的預編譯**去掉後,ehci_hcd_init 如下:

int__initehci_hcd_init(

void

)...

if(retval

<0)

...pci_driver是乙個巨集,#definepci_driverehci_pci_driver。

struct

pci_driverehci_pci_driver

=...

;ehci_hcd_init 很簡單就是呼叫了pci_register_driver(),就是__pci_register_driver()。

int__pci_register_driver(

struct

pci_driver

*drv,

struct

module

*owner,

const

char

*mod_name)

...

driver_register(struct device_driver * drv)就是前面講過了,就是linux的套路。那我們看看pci匯流排的match, probe函式是什麼樣的吧。

Linux那些事兒之我是EHCI 引子

轉眼之間,到了2008年,先祝大家新年快樂,希望新的一年裡好運連連,工資猛漲。好久沒有寫了,乙個原因在於,作 為乙個phd學生,難免要做一些讀 寫 的瑣事,另乙個原因就是自己太懶了。大哥甲一如既往,堅持的寫作,著實讓人欽佩。此時此刻,我情 不自禁,作詩一首,北飄奇男子,江南大丈夫。海上常常生明月,江...

Linux那些事兒之我是EHCI 引子

轉眼之間,到了2008年,先祝大家新年快樂,希望新的一年裡好運連連,工資猛漲。好久沒有寫了,乙個原因在於,作為乙個phd學生,難免要做一些讀 寫 的瑣事,另乙個原因就是自己太懶了。大哥甲一如既往,堅持的寫作,著實讓人欽佩。此時此刻,我情不自禁,作詩一首,北飄奇男子,江南大丈夫。海上常常生明月,江湖就...

《Linux那些事兒之我是PCI》筆記

核心版本 2.6.22 1.pci access mode bios,direct,mmconfig,any。bios mode 有的bios程式提供了針對pci匯流排的操作,這些操作包括匯流排列舉,此種bios稱為pci bios 此種方式直接使用bios程式列舉的結果。64位平台沒有該選項 di...