日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux设备驱动模型3——platform平台总线工作原理

發(fā)布時(shí)間:2023/12/20 linux 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux设备驱动模型3——platform平台总线工作原理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下內(nèi)容源于朱有鵬嵌入式課程的學(xué)習(xí),如有侵權(quán),請(qǐng)告知?jiǎng)h除。


四、platform平臺(tái)總線工作原理1

1、何為平臺(tái)總線?

(1)屬于總線中的一種,相對(duì)于usb、pci、i2c等物理總線來(lái)說(shuō),platform總線是虛擬的、抽象出來(lái)的。

(2)CPU與外部通信的2種方式:地址總線式連接和專用接口式連接(比如nand和cpu的連接)

  • 平臺(tái)總線對(duì)應(yīng)地址總線式連接設(shè)備(也就是SoC內(nèi)部集成的各種內(nèi)部外設(shè))。

(3)思考:為什么要有平臺(tái)總線?

  • 為了管理上的方便和統(tǒng)一。

2、平臺(tái)總線下管理的2員大將

(1)platform工作體系都定義在drivers/base/platform.c中。

(2)兩個(gè)結(jié)構(gòu)體:platform_device和platform_driver。

struct platform_device {const char * name; // 平臺(tái)總線下設(shè)備的名字int id;struct device dev; // 所有設(shè)備通用的屬性部分u32 num_resources;// 設(shè)備使用到的resource(IO或者中斷號(hào)等)的個(gè)數(shù)struct resource* resource;// 設(shè)備使用到的資源數(shù)組的首地址const struct platform_device_id* id_entry;// 設(shè)備ID表,很多個(gè)類似的同系列的產(chǎn)品,可以用同一個(gè)驅(qū)動(dòng)/* arch specific additions */struct pdev_archdata archdata;// 自留地,用來(lái)提供擴(kuò)展性的,表示設(shè)備的一些屬性 };

struct platform_driver {int (*probe) (struct platform_device *);// 驅(qū)動(dòng)探測(cè)函數(shù)int (*remove) (struct platform_device *);// 去掉一個(gè)設(shè)備void (*shutdown)(struct platform_device *);// 關(guān)閉一個(gè)設(shè)備int (*suspend) (struct platform_device *, pm_message_t state);//掛起int (*resume) (struct platform_device *);//喚醒struct device_driver driver;// 所有設(shè)備共用的一些屬性const struct platform_device_id *id_table;// 設(shè)備ID表,表示支持哪些設(shè)備 };

(3)兩個(gè)接口函數(shù)

  • platform_device_register(一般不使用這個(gè),而是使用platform_driver_register中的probe函數(shù)?有待深入研究),在系統(tǒng)啟動(dòng)時(shí)(見(jiàn)五1(2)),用來(lái)注冊(cè)設(shè)備。
  • platform_driver_register,用來(lái)注冊(cè)驅(qū)動(dòng)。



五、platform平臺(tái)總線工作原理2

1、平臺(tái)總線體系的工作流程

(1)第一步:系統(tǒng)啟動(dòng)時(shí),在bus系統(tǒng)中注冊(cè)platform(使得在/sys/bus/目錄有platform)。


(2)第二步:內(nèi)核移植(把硬件的信息寫(xiě)到軟件里)的人負(fù)責(zé)提供platform_device;(即提供板文件,文件里有設(shè)備信息。比如Mach-x210.c)



(3)第三步:寫(xiě)驅(qū)動(dòng)的人負(fù)責(zé)提供platform_driver;(主要是填充結(jié)構(gòu)體并register)



(4)第四步:platform的match函數(shù)發(fā)現(xiàn)driver和device匹配后(通過(guò)name來(lái)匹配),調(diào)用driver的probe函數(shù)來(lái)完成驅(qū)動(dòng)的初始化和安裝,然后設(shè)備就工作起來(lái)了。(這個(gè)是自動(dòng)的)



2、代碼分析:platform總線本身注冊(cè)

? ? ?





(1)每種總線(不光是platform,usb、i2c那些也是)都會(huì)帶一個(gè)match方法,用來(lái)對(duì)總線下的device和driver進(jìn)行匹配。

  • 理論上每種總線的匹配算法是不同的,但是實(shí)際上一般都是看name的。

(2)platform_match函數(shù)就是平臺(tái)總線的匹配方法。

  • 如果有id_table,則說(shuō)明驅(qū)動(dòng)可能支持多個(gè)設(shè)備;
  • 這時(shí)候要去對(duì)比id_table中所有的name,只要找到一個(gè)相同的就匹配上了不再找了,如果找完id_table都還沒(méi)找到就說(shuō)明沒(méi)有匹配上。
  • 如果沒(méi)有id_table或者沒(méi)有匹配上,那就直接對(duì)比device和driver的name,如果還沒(méi)匹配上那就匹配失敗。

(3)上面完成了第一步。下面完成第二第三步。(見(jiàn)六)


六、platform平臺(tái)總線工作原理3

1、platform設(shè)備和驅(qū)動(dòng)的注冊(cè)過(guò)程(參考leds-s3c24xx.c文件)

(1)platform_driver_register,驅(qū)動(dòng)部分:




(2)platform_device_register,設(shè)備部分

  • 如何找設(shè)備部分?即在板文件定義的設(shè)備信息?
  • 通過(guò)名字,即搜索名字。舉個(gè)例子如下(某個(gè)設(shè)備的信息):


  • 眾多設(shè)備組成一個(gè)數(shù)組,然后逐個(gè)注冊(cè)。(不能有一個(gè)出錯(cuò)!)
  • 對(duì)于linux2.6 arm平臺(tái)而言,對(duì)platform_device的定義通常在bsp的板文件中實(shí)現(xiàn)。
  • 板文件將設(shè)備歸納為一個(gè)數(shù)組,最終通過(guò)platform_add_devices()函數(shù)統(tǒng)一注冊(cè)



2、platform_data怎么玩



? ??


  • platform_data其實(shí)就是設(shè)備注冊(cè)時(shí)提供的、與設(shè)備有關(guān)的一些數(shù)據(jù)(譬如設(shè)備對(duì)應(yīng)的gpio、使用到的中斷號(hào)、設(shè)備名稱……);
  • 這些數(shù)據(jù)在設(shè)備和驅(qū)動(dòng)match之后,會(huì)由設(shè)備方轉(zhuǎn)給驅(qū)動(dòng)方(probe的第一句代碼)
  • 驅(qū)動(dòng)拿到這些數(shù)據(jù)后,通過(guò)這些數(shù)據(jù)得知設(shè)備的具體信息,然后來(lái)操作設(shè)備。
  • 這樣做的好處是:驅(qū)動(dòng)源碼中不攜帶數(shù)據(jù),只負(fù)責(zé)算法(對(duì)硬件的操作方法)。
  • 現(xiàn)代驅(qū)動(dòng)設(shè)計(jì)理念就是算法和數(shù)據(jù)分離,這樣最大程度保持驅(qū)動(dòng)的獨(dú)立性和適應(yīng)性。
  • 注意:leds-s3c24xx是驅(qū)動(dòng)文件,是不會(huì)有設(shè)備信息的,設(shè)備信息在板文件中定義。

3、match函數(shù)的調(diào)用軌跡


4、probe函數(shù)的功能和意義


總結(jié)

以上是生活随笔為你收集整理的Linux设备驱动模型3——platform平台总线工作原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。