platform匯流排的probe函式呼叫

2021-09-20 15:56:51 字數 2271 閱讀 6173

我們知道,platform匯流排提供了裝置和驅動的mach函式,當裝置和驅動匹配完成後,就會執行驅動的probe函式,但是這個probe函式是如何被呼叫的呢。

probe函式在裝置驅動註冊最後收尾工作,當裝置的device 和其對應的driver 在匯流排上完成配對之後,系統就呼叫platform裝置的probe函式完成驅動註冊最後工作。資源、中斷呼叫函式以及其他相關工作。下面是probe被呼叫的一些程式流程。

1:從註冊函式platform_driver_register()函式開始

1

2

3

4

5

6

7

8

9

10

11

12

intplatform_driver_register(structplatform_driver *drv)

這個函式首先是對驅動進行填充,然後呼叫driver_register()函式,這個函式是向核心註冊驅動的函式,不同的匯流排最終都是呼叫這個函式向核心進行驅動的註冊。

driver_register(&drv->driver);

bus_add_driver(drv);

driver_attach(drv);

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

__driver_attach

__driver_attach函式如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

staticint__driver_attach(structdevice *dev,void*data)

分析可知,首先是呼叫driver_mach_device函式進行裝置和驅動的匹配(這裡應該根據具體的匯流排來呼叫相應的mach函式),如果匹配失敗則直接return 0,如果匹配成功,則進行下一步,probe函式的呼叫,probe函式的呼叫通過driver_probe_device()函式來引出。呼叫層次如下

driver_probe_device(drv, dev);    

really_probe(dev, drv);

really_probe()函式的部分**如下

1

2

3

4

5

6

7

8

9

if(dev->bus->probe)elseif(drv->probe)

分析可知,在驅動和裝置匹配成功後,首先會判斷匯流排的的probe指標是否為空,如果不為空,則執行匯流排的prboe函式,如果匯流排的prboe函式為空,則進一步判斷驅動的probe函式是否為空,如果不為空,則執行驅動的probe函式

platform匯流排分析

推薦閱讀 講的很好 platform匯流排簡介 匯流排的產生的意義是讓裝置 硬體被抽象成乙個結構體來代表乙個裝置 和驅動分離 linux核心中常見的的匯流排有i2c匯流排,pci匯流排,串列埠匯流排,spi匯流排,pci匯流排,can匯流排,單匯流排等,所以有些裝置和驅動就可以掛在這些匯流排上,然後...

platform匯流排 學習

一直想要寫些部落格,記錄學習的過程,算是自己的乙個複習,也是鍛鍊一下自己的總結能力,但是一直到今天才開始。今天,學習的 platform匯流排。總的來說,platform匯流排是基於linux2.6核心的匯流排裝置驅動模型所自己定義出來的一條匯流排,具體為什麼要有這麼一條匯流排還沒有深入研究,目前覺...

Platform匯流排註冊驅動

linux核心中常見的的匯流排有i2c匯流排,pci匯流排,串列埠匯流排,spi匯流排,pci匯流排,can匯流排,單匯流排等,所以有些裝置和驅動就可以掛在這些匯流排上,然後通過匯流排上的match進行裝置和驅動的匹配。但是有的裝置並不屬於這些常見匯流排,所以我們引入了一種虛擬匯流排,也就是plat...