arm linux驱动 知乎_学习linux驱动开发的方法?
大二搞完51單片機,大三搞了msp430,飛思卡爾,大四前開始arm9+linux,讀研三年就是折騰了linux和一些小項目,現在工作兩年多了,相對來說自我感覺成長比較快。C語言是最基礎最基礎的開始,但是所有人都是從第一行hello world開始的。虛擬機里安裝一個Linux發行版,桌上一款開發板,配上合適的教學視頻,多逛論壇,孜孜不倦的敲代碼做實驗,一定可以成長起來。以下是我在另一個問題的回答,一個字沒改,應該對您有所幫助:
我調試過Linux,vxworks和另外一個國產嵌入式實時操作系統下的驅動,涉及的平臺從arm到zynq到ppc到龍芯到dsp都有,當然不是每一個平臺都那么熟悉,今年就一直在調zynq。
第一,驅動的作用
基本就是你說的這樣子了,驅動硬件工作以及為上層屏蔽硬件細節,提供操作接口。
第二,調試驅動要注意什么?
這個太多太多啦,胡亂說一些我的看法吧,總之不是滿足上面說的驅動的作用那么簡單。
驅動的調試一般都是很早起就進行的,大多時候都要配合做硬件的工程師,他們很可能不懂軟件,這時候就需要你把板子跑起來,來驗證這個板子的硬件通路是OK的,功能是OK的,甚至性能是滿足需求的,硬件驗證完了,硬件工程師才會松一口氣。接著,看需求文檔,技術協議,需要你和上層去對接,上層需要什么接口,比如zynq,他可能只告訴你,我只要兩個接口一個writeddr一個readddr,readddr要是阻塞的。他根本不管底層是不是有pl和ps的通信協議,不會關心你如何絞盡腦汁去實現這個阻塞(ps:不是應用中信號量那種阻塞同步)。說的好聽,承上啟下,說的不好聽,誰都要伺候好。
1.接線要注意,防靜電不可少
硬件在給你板卡的時候,很可能就是第一版,板子上還有飛線,電源也是正負線引出來,開關也沒焊上去,問清楚電壓電流的限制,正負極看好,接穩壓電源的時候線接反了,一塊板子燒了事小,耽誤工期,等著狂加班吧。。。摸板子的時候,最好碰一下旁邊的金屬物體,即使在防靜電工作臺也最好這樣,把靜電放掉,不要小看靜電,敏感器件被靜電打壞的概率不低。測試的時例如ttl轉換芯片和gpio口的輸入輸出,一定要看原理圖做了隔離沒,沒有的話,不要輕易接地接線,燒壞bank可能芯片就廢了。
2.關注下bootloader
vxworks有vxboot,zynq在uboot之前還有fsbl,dsp(c6678)有ibl這些都是bootloader,大多數人接觸的都是u-boot,現在也越來越像Linux了。關注Bootloader是因為我經常調試驅動的時候,比如網卡和flash,在uboot下是好的,但是我的操作系統起來之后,就不對了,那我就會把uboot下有關的寄存器信息打印出來,然后把操作系統起來之后的也打印出來,對比一下,就知道哪里出問題了。這個方法可以解決掉不少硬件配置問題。一般現在成熟的板卡供應商,都會提供相應的Bootloader和對應的源碼,vx除外。要會利用這部分資源,了解bootloader都干了什么,如何啟動和加載系統的,整個框架是怎樣的,能編譯,能修改,這個一定會幫助調試驅動的。
3.操作硬件的能力
好的驅動工程師,不是以你會一個牛逼的cpu或者架構來判斷的,而是你能操作多少設備,cpu也是設備啊,低速總線rs232,spi,i2c.存儲設備,nand flash norflash,emmc,eeprom,高速總線pcie,srio,hyperlink。其他網卡以及和fpga通信等等。舉個例子,操作nand flash,都知道先寫命令,再讀寫數據,但是DSP通過EMIF接口操作,zynq通過pl35x操作,arm有自己的nand 控制器,ppc走Loacal bus,讀寫數據各個平臺也是不一樣的,如何破,歸根結底,flash讀寫通過ba,pa和ca三個地址來實現,分為5個周期,地址如何轉換的搞清楚。。上面說的那些接口和控制器,無非圍繞這個來開展,摸清他實現的方式,就可以了,這個需要經驗和時間去積累,但是調驅動的時候,一定要注意去積累。
你以為操作硬件就是這些東西?萬用表示波器電烙鐵也是硬件。。。
4.驅動和系統是如何關聯的
linux的驅動層比較龐大,也比較強大,很多設備基本都有現成的驅動,你只需要probe一下,就會發現你要的設備或者相似的設備,改一改,修一修,估計就能用了。這樣的代價就是linux一層又一層的封裝以及設備驅動里較多的子系統。vxworks有vxbus,簡單粗暴,明晰好用,幾乎所有的設備都可以走vxbus,不管你是網絡設備還是塊設備。不管怎么樣,你需要知道,如何將我的驅動程序“注冊”到操縱系統,如何讓應用層在調用open,read,write的時候看到你的設備,不管是file_operations也好,pResource也好,都需要你了解整個系統的架構。所以你發現沒,現在都是解析xxxlinux驅動,為什么要解析,不是寫xxxlinux驅動,在linux下做驅動,了解各個子系統和設備驅動的框架,比自己寫,要重要的多。甚至你可以不了解硬件的細節,知道在哪里改基地址,在哪里改寄存器偏移地址,在哪里添加和刪除對應的功能,你也可以把驅動調通,為什么, 因為linux真的很優秀。
5.要有上下兼通的能力
下說過了,硬件。上就是,最起碼,你自己做的驅動,要能自己寫個應用程序測試demo吧,必要的時候,還要給上層寫一個使用演示的例子,再完善一個驅動接口說明文檔,并不是所有的設備都可以open read write的。你的驅動函數的功能,參數,返回值的說明。再進階一下,要把上層當做傻子,給他把底層通信協議都屏蔽了,只做上層的應用協議,這個也需要一定的功底。
6.耐得住寂寞
驅動沒有花里胡哨的界面,沒有紛繁的數據處理,沒有那么高深的算法,需要的是穩和毫無存在感。。。要讓硬件和軟件行云流水的時候都感受不到你的存在,那你就OK了。
工作時間純手打,良心不。。。
總結
以上是生活随笔為你收集整理的arm linux驱动 知乎_学习linux驱动开发的方法?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中科大和西工大 计算机考研真题,中科大给
- 下一篇: FlexRay测试开发实践之诊断刷写