首先簡單介紹一下自己,本人是成都地區一所高校學生,專業本不是計算機或者搞電子方面的,和嵌入式邊也不
沾的專業
,就連c語言也沒有學習(苦
逼啊),是搞電力發方面的,新一屆領導人上台了,大施改革,電力系統
也不算鐵飯碗了(以
後買房買車,還有好多東西,算了這些都是
私事)還是學
乙個有技術含量的把。
本人在學院
的創新實驗室學習嵌入式,關於驅動這塊前輩們都覺得很難,在網上查了一些資料,了解了學習方法
和專業術語(
本人沒有有學習操
作系統等),
本著它山之石可以攻玉的學習原則,總結了一下關於驅動方面的學習
要點以及學
習思維。
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平台驅動
linux簡單字元驅動很簡單 只需要在初始化時對實體地址進行對映,再註冊乙個 fileopenration 操作集,然後就和寫裸機程式一樣實現操作集就可以了。問題一 為什麼要進行實體地址到虛擬位址的對映?因為引入了mmu 記憶體管理,只允許使用者操作虛擬位址。問題二 為什麼要引入mmu 而不讓使用者...
linux 驅動 7 平台裝置驅動
目錄7.2 平台裝置 7.3 平台驅動 參考區分裝置驅動模型和平台裝置驅動模型。裝置驅動模型可以理解為匯流排 裝置 驅動。平台裝置驅動模型就是那些 linux 核心管理沒有物理匯流排 即是不需要特殊時序控制的裝置 也是linux核心沒有自動建立相應驅動匯流排的裝置型別 的裝置的一套 linux平台匯...
Linux平台PCIe驅動編寫
以前文章分析了pcie整個系統知識,包括如何掃瞄pcie樹,這篇文章講解一下當拿到乙個pcie裝置時如何編寫驅動程式。編寫驅動程式在應用程式中編寫,同樣可以在核心層編寫驅動。從應用層編寫驅動主要是使用pcilib庫和 dev mem介面,下面開始分析 根據pcie裝置的廠家id和裝置id初始化裝置,...