platform的probe函式是何時被呼叫的

2021-09-30 08:52:51 字數 923 閱讀 3854

這幾天搞ti的vpfe,裡面裝置的註冊使用platform,平台裝置註冊方式來註冊的。一直都知道

裡的probe函式,但是不知道是何時被呼叫的。經過跟蹤**,在module_init(vpfe_init);模組初始化的時候,vpfe_init函式中呼叫了 這裡

err = driver_register(&vpfe_driver);

的原型為:

跟蹤bus_add_driver(drv);得到bus_add_driver(struct device_driver * drv)的原型:

這裡呼叫了 driver_probe_device(drv, dev);

原型:

可以看出是先呼叫了匯流排的probe方法,接著呼叫了裝置的probe方法。

總之一句話,probe函式作為driver的最基本的函式指標,一旦你的device和driver匹配(match,由匯流排(bus)來完成,匹配工作發生在device_register()和drvier_register()

的時候),probe函式就肯定會被呼叫,期間一般會完成device的初始化,註冊中斷等操作。

順便講下在核心中是怎麼按照driver mode來實現整個系統的裝置和驅動註冊的。

在系統初始化階段,會首先向核心註冊各種常用的匯流排型別,比如pci, usb, spi, i2c, platform等等,當然你也可以自己發明一種匯流排型別註冊上去。

這部分**一般放在./arch/arm/mach-***/board-***.c中。

在此之後,會將系統的裝置列表,基本上整個系統的device都在這裡了,一一地註冊進核心,就是呼叫device_regisger註冊的過程。然後是對於各個device裝置driver的註冊。

這部分**一般放在./drvier/下面。

大部分device和driver的匹配方式就是看名字是否相同,這部分屬於匯流排分內的事情。

platform匯流排的probe函式呼叫

我們知道,platform匯流排提供了裝置和驅動的mach函式,當裝置和驅動匹配完成後,就會執行驅動的probe函式,但是這個probe函式是如何被呼叫的呢。probe函式在裝置驅動註冊最後收尾工作,當裝置的device 和其對應的driver 在匯流排上完成配對之後,系統就呼叫platform裝置...

驅動註冊的probe函式

probe的呼叫 從driver register看起 int driver register struct device driver drv klist init與init completion沒去管它,可能是2.6的這個裝置模型要做的一些工作。直覺告訴我要去bus add driver。bus...

驅動註冊的probe函式

probe的呼叫 從driver register看起 int driver register struct device driver drv klist init與init completion沒去管它,可能是2.6的這個裝置模型要做的一些工作。直覺告訴我要去bus add driver。bus...