linux簡單字元驅動很簡單
,只需要在初始化時對實體地址進行對映,再註冊乙個
fileopenration
操作集,然後就和寫裸機程式一樣實現操作集就可以了。
問題一:為什麼要進行實體地址到虛擬位址的對映?
因為引入了mmu
記憶體管理,只允許使用者操作虛擬位址。
問題二:為什麼要引入mmu
,而不讓使用者直接操作實體地址?
因為記憶體管理非常複雜,主要是為了安全考慮。假如:驅動甲用到了一塊實體地址0x20000000
第一,是安全。第二,便捷。第三,統一通用。第四,方便管理。第五,便於應用…
可是這麼簡單的驅動你幾乎是在linux
核心裡看不到了,幾乎所有核心帶的驅動都是平台驅動.(你自己寫的除外)
問題三:linux
為什麼要引入平台驅動來增加驅動的開發難度呢?
答案就是:便於移植。
打個比方:從你家到北京。如果你知道地形的話隨便怎麼走都可以到北京。可是現在要所有的人都能從你家到北京,大部分人可能都不會走,這時候該怎麼辦?當然你可以帶他們走,可是我們講的是所有人。這時候可以這樣,修一條高速公路從你家到北京,然後所有的人(包括認路的不認路的,會開車的不會開車的)只需要按照一定規則在路邊等待專車就可以了,車子會帶你到北京。
缺點:必須要先修一條從你家到北京的路,然後請一些有專業經驗的司機。
優點:原本所有人需要學會認路的本領自己上北京,現在只需要知道一些車子的資訊在公路旁邊按照一定規則等就可以了(你只需要知道你坐哪一路車,然後告訴司機你到哪下就行了)。
1、修一條路就好比建一條平台匯流排,有經驗的司機就好比各種器件的原始裝置廠商。 2、
所有人就表示要做平板電腦,手機…各種的系統產品製造商。
3、「坐哪一路車,告訴司機到哪下」就是我們移植驅動需要告訴核心我們不同的晶元使用的硬體資源是哪些。
分析:建立一條平台匯流排,這事linux
幫你做了, 各種各樣複雜的驅動(各種網絡卡晶元,感測器晶元…)原始裝置廠商他幫你實現了驅動與硬體無關的驅動部分。(當然也不要佩服這些人,因為這些人他們只會寫一種驅動,就是說網絡卡產商他們專門寫網絡卡驅動,只寫一種驅動從無到有並不是很困難)
好了,現在最難的部分都讓有linux
核心和原始裝置廠商都幫我們做了。我們只需要在驅動移植的時候告訴驅動我們使用的硬體資源就行了。
總結:隨著linux
核心越來越複雜化
linux
從2.6
開始引入了平台驅動,其實是對開發做分工從而發揮嵌入式的優勢.
平台驅動、平台裝置主要設及到四個重要的結構體。
struct platform_driver
,struct platform_device
,struct device_driver
,struct device
。
linux 驅動 7 平台裝置驅動
目錄7.2 平台裝置 7.3 平台驅動 參考區分裝置驅動模型和平台裝置驅動模型。裝置驅動模型可以理解為匯流排 裝置 驅動。平台裝置驅動模型就是那些 linux 核心管理沒有物理匯流排 即是不需要特殊時序控制的裝置 也是linux核心沒有自動建立相應驅動匯流排的裝置型別 的裝置的一套 linux平台匯...
Linux平台PCIe驅動編寫
以前文章分析了pcie整個系統知識,包括如何掃瞄pcie樹,這篇文章講解一下當拿到乙個pcie裝置時如何編寫驅動程式。編寫驅動程式在應用程式中編寫,同樣可以在核心層編寫驅動。從應用層編寫驅動主要是使用pcilib庫和 dev mem介面,下面開始分析 根據pcie裝置的廠家id和裝置id初始化裝置,...
Linux 平台裝置驅動模型
linux 平台裝置驅動模型 一。平台匯流排概述 1.平台匯流排 platform bus 是linux2.6核心加入的一種虛擬匯流排,其優勢在於採用了匯流排的模型對裝置與驅動進行了管理,這樣提高了程式的可移植性 二。平台裝置 1.平台裝置使用structplatform device來描述 str...