国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

少走彎路系列!嵌入式linux設(shè)備驅(qū)動(dòng)調(diào)試移植的一些套路

發(fā)布時(shí)間:2017-10-19 10:49    發(fā)布者:技術(shù)小白
關(guān)鍵詞: 嵌入式 , Linux , 操作系統(tǒng)
對(duì)設(shè)備驅(qū)動(dòng)最通俗的解釋就是“驅(qū)使硬件設(shè)備行動(dòng)”。設(shè)備驅(qū)動(dòng)與底層硬件直接打交道,按照硬件設(shè)備的具體工作方式讀寫(xiě)設(shè)備寄存器,完成設(shè)備的輪詢(xún)、中斷處理、DMA 通信,進(jìn)行物理內(nèi)存向虛擬內(nèi)存的映射,最終使通信設(shè)備能夠收發(fā)數(shù)據(jù),使顯示設(shè)備能夠顯示文字和畫(huà)面,使存儲(chǔ)設(shè)備能夠記錄文件和數(shù)據(jù)設(shè)備驅(qū)動(dòng)充當(dāng)了硬件和應(yīng)用軟件之間的紐帶,它使得應(yīng)用軟件只需要調(diào)用系統(tǒng)軟件的應(yīng)用編程接口(API)就可讓硬件去完成要求的工作。在系統(tǒng)中沒(méi)有操作系統(tǒng)的情況下,工程師可以根據(jù)硬件設(shè)備的特點(diǎn)自行定義接口,,如對(duì)串口定義SerialSend()、SerialRecv();對(duì)LED 定義LightOn()、LightOff();以及對(duì)Flash 定義FlashWrite()、FlashRead()等。而在有操作系統(tǒng)的情況下,設(shè)備驅(qū)動(dòng)的架構(gòu)則由相應(yīng)的操作系統(tǒng)定義,驅(qū)動(dòng)工程師必須按照相應(yīng)的架構(gòu)設(shè)計(jì)設(shè)備驅(qū)動(dòng),這樣,設(shè)備驅(qū)動(dòng)才能良好地整合到操作系統(tǒng)的內(nèi)核中。


下面是一位嵌入式驅(qū)動(dòng)工程師關(guān)于驅(qū)動(dòng)設(shè)備的調(diào)試和移植的一些經(jīng)驗(yàn)總結(jié)。

做linux底層軟件工作也有兩年了,算上研究生時(shí)期對(duì)底層軟件的研究,加起來(lái)也快四年了。慢慢地發(fā)現(xiàn)有必要總結(jié)一些一般性的方法了。因?yàn)橐话阈缘姆椒ㄓ泻暧^上的指導(dǎo)意義,以后調(diào)試和移植驅(qū)動(dòng)時(shí),經(jīng)常性地回味這些一般性的方法可以防止自己犯同樣的錯(cuò)誤,進(jìn)而少走彎路,以最高的效率完成工作。

當(dāng)談到底層軟件,我們一般都會(huì)想到bootloader、BSP、device driver、linux kernel等等。這里將會(huì)著重介紹linux device driver調(diào)試的一般性方法。
注意,這里說(shuō)的一般方法不是固定套路,也就是說(shuō)你不用把它當(dāng)做教科書(shū)來(lái)讀。你只需要根據(jù)具體情況靈活的選用其中某些步驟即可。

一般情況下,進(jìn)行設(shè)備驅(qū)動(dòng)的調(diào)試之前,你必須具備以下條件:

設(shè)備驅(qū)動(dòng)的代碼和應(yīng)用層測(cè)試軟件(或者代碼)

因?yàn)槟阕鲵?qū)動(dòng)的最終目的還是要給上層應(yīng)用去操作的。所以,一個(gè)針對(duì)驅(qū)動(dòng)的測(cè)試應(yīng)用程序是必須的。這里的應(yīng)用層測(cè)試軟件一般都是供應(yīng)商提供的,或者系統(tǒng)現(xiàn)有的可以用的應(yīng)用,如果沒(méi)有就必須自己寫(xiě)了。

你要調(diào)試的設(shè)備對(duì)應(yīng)的datasheet、規(guī)格書(shū)和相關(guān)資料

盡可能地去搞到詳盡的芯片相關(guān)資料和相關(guān)說(shuō)明,因?yàn)檫@些都是你隨后調(diào)試驅(qū)動(dòng)的指引。

開(kāi)發(fā)板的原理圖和貼片圖

一般情況下,你可能不需要貼片圖,但是如果你們的硬件工程師對(duì)你的支持力度不夠,那你就需要一個(gè)板子的貼片圖。原因可能有以下幾點(diǎn):

(1)    如果是飛線過(guò)來(lái)的模塊,而且你又不確定硬件工程師的操作是完全正確的,是不是每條線都接的是對(duì)的,這時(shí)候你就必須搞到貼片圖和原理圖,然后和板子上的飛線一條一條線的核對(duì)一遍。如果準(zhǔn)確無(wú)誤,那你就開(kāi)工。
(2)    當(dāng)你們的硬件工程師沒(méi)有給你提供硬件板子的引腳具體在板子上的哪個(gè)位置的說(shuō)明時(shí),你就必須搞到貼片圖。
(3)    此外,經(jīng)常貼片圖有助于提高一個(gè)驅(qū)動(dòng)工程師的硬件素養(yǎng)。

萬(wàn)用表示波器

萬(wàn)用表和示波器是必備的,其次,根據(jù)需要,你可能會(huì)用到頻譜分析儀和邏輯分析儀。

OK!當(dāng)你拿到這些資料后,你就可以大刀闊斧地進(jìn)行設(shè)備驅(qū)動(dòng)調(diào)試了。一般的,設(shè)備驅(qū)動(dòng)的調(diào)試都會(huì)經(jīng)歷如下幾個(gè)步驟:

一、 把設(shè)備驅(qū)動(dòng)的代碼添加進(jìn)kernel

這一點(diǎn)要注意了,不同的方案提供商給出的添加方法是不同的。例如,對(duì)于Mediatek方案提供商,添加設(shè)備驅(qū)動(dòng)的方法就和一般化的不一樣,因?yàn)镸ediatek的體系架構(gòu)不同于像telechips、Qualcomm等這樣的kernel傳統(tǒng)架構(gòu)。所以,對(duì)于像Mediatek這樣的特殊供應(yīng)商,你必須遵循其提供的一套添加驅(qū)動(dòng)的流程(mtk支持比較好,一般會(huì)提供sop)。傳統(tǒng)架構(gòu)的話,就很簡(jiǎn)單了,一般都會(huì)涉及到一下幾步:
新建設(shè)備驅(qū)動(dòng)目錄
添加頭文件
創(chuàng)建當(dāng)前目錄的Makefile
創(chuàng)建上層目錄的Makefile
在上層目錄添加Kconfig選項(xiàng)
在板文件添加對(duì)應(yīng)項(xiàng)。  
如果不想每次都用menuconfig配置,就在
kernel/arch/arm/configs/XXX_defconfig里面添加編譯項(xiàng)

具體的實(shí)例我之類(lèi)就不寫(xiě)了,google一下一大把,這篇文章也不會(huì)涉及到過(guò)多的細(xì)節(jié)問(wèn)題。

二、 使得添加進(jìn)去的設(shè)備驅(qū)動(dòng)可以編譯通過(guò)

設(shè)備驅(qū)動(dòng)添加進(jìn)來(lái)之后,一般的,都需要你添加、刪除、修改一些內(nèi)容,才能保證其編譯通過(guò)。如果是調(diào)試,這里可能改動(dòng)不大,因?yàn)轵?qū)動(dòng)文件一般是由芯片原廠提供的,他們已經(jīng)修改的基本可以編譯通過(guò)了。但如果是移植,在這里花費(fèi)的精力一般是比較大的,這會(huì)在后文中的附加說(shuō)明里面提及到。

三、 檢查設(shè)備驅(qū)動(dòng)是否正常初始化

進(jìn)行到這一步,你需要檢查設(shè)備驅(qū)動(dòng)是否可以順利初始化,這個(gè)很簡(jiǎn)單,你只需要在設(shè)備驅(qū)動(dòng)的probe函數(shù)或者init函數(shù)里面添加一條打印信息即可在串口觀察是否有打印,如果沒(méi)有打印,說(shuō)明驅(qū)動(dòng)根本就沒(méi)有得到初始化。此時(shí),你應(yīng)該:首先,你趕緊跑過(guò)去問(wèn)和你合作的硬件工程師:“hi,我這塊板子,那個(gè)XXX芯片是否貼上了?”,或者問(wèn)他們:“這些飛線是不是都連接的OK了?”。 問(wèn)這些問(wèn)題都是很有必要的,因?yàn)楹苡锌赡苡布蠜](méi)有準(zhǔn)備好,或者硬件連線本來(lái)就有問(wèn)題。所以,為了避免浪費(fèi)時(shí)間,你還是主動(dòng)去問(wèn)下他們。

其次,如果芯片確實(shí)貼上了而且硬件連線都接對(duì)了(后來(lái)你不放心,自己也核對(duì)了一遍),這時(shí)候問(wèn)題就在你嘍。馬上檢查設(shè)備驅(qū)動(dòng)的添加是否有什么問(wèn)題,是否是板文件沒(méi)有修改好,是否驅(qū)動(dòng)本身就沒(méi)有注冊(cè)好等等。

如果驅(qū)動(dòng)得到了正常的初始化,這時(shí)候你開(kāi)始檢查該設(shè)備驅(qū)動(dòng)對(duì)應(yīng)的應(yīng)用程序是否可以正常使用(或者自己寫(xiě)設(shè)備驅(qū)動(dòng)的測(cè)試應(yīng)用程序)。如果可以正常使用,那你太幸運(yùn)了,這說(shuō)明芯片原廠為你考慮的很周到,你可以節(jié)省N多時(shí)間干別的事兒了。

但遺憾的是,往往事情不會(huì)這么順利,當(dāng)你檢查應(yīng)用程序的時(shí)候,你發(fā)現(xiàn)應(yīng)用程序沒(méi)有做出應(yīng)有的反應(yīng)——例如當(dāng)你辛苦把camera的驅(qū)動(dòng)添加到kernel而且順利初始化之后,你興奮地進(jìn)入系統(tǒng)打開(kāi)camera發(fā)現(xiàn):黑屏!你郁悶了,但是郁悶不能解決問(wèn)題,這時(shí)候真正的所謂設(shè)備驅(qū)動(dòng)的“調(diào)”和“試”才來(lái)了。趕緊去找一個(gè)萬(wàn)用表和一個(gè)示波器吧。

四、 設(shè)備驅(qū)動(dòng)的“調(diào)”和“試”

所謂“調(diào)”,就是你依據(jù)設(shè)備芯片datasheet、主控datasheet、相關(guān)的規(guī)格書(shū)等資料,以及觀察與測(cè)量的結(jié)果,不斷地對(duì)設(shè)備驅(qū)動(dòng) code進(jìn)行添加、刪除和修改。

所謂“試”,就是你在添加、刪除和修改的同時(shí)要不斷地:
通過(guò)串口對(duì)反饋信息進(jìn)行觀察;
通過(guò)萬(wàn)用表對(duì)各電源引腳電壓進(jìn)行測(cè)量;
通過(guò)示波器對(duì)芯片的時(shí)鐘(輸入的和輸出的)頻率(包括測(cè)量晶振)、數(shù)據(jù)信號(hào)的波形、某種總線信號(hào)的波形,等各個(gè)引腳進(jìn)行測(cè)量。
觀察設(shè)備的上電時(shí)序,數(shù)據(jù)交互時(shí)序等等是否正常(參考datasheet)。
通過(guò)測(cè)試應(yīng)用程序?qū)︱?qū)動(dòng)進(jìn)行測(cè)試,并反復(fù)觀察設(shè)備驅(qū)動(dòng)的運(yùn)行狀態(tài)。

測(cè)試不光是測(cè)試員的事情,你必須保證自己調(diào)試的驅(qū)動(dòng)可以運(yùn)行穩(wěn)定才可以提交代碼,發(fā)給測(cè)試員進(jìn)行大量測(cè)試。測(cè)試自己調(diào)試的設(shè)備驅(qū)動(dòng)有以下幾種:

(1)    利用系統(tǒng)里面現(xiàn)有的應(yīng)用程序進(jìn)行測(cè)試
這個(gè)是最直接的測(cè)試,也省去了你自己編寫(xiě)測(cè)試程序的時(shí)間。
(2)    自己編寫(xiě)linux應(yīng)用程序來(lái)測(cè)試驅(qū)動(dòng)
如果你對(duì)系統(tǒng)現(xiàn)有的應(yīng)用程序不放心,或者不滿(mǎn)意,就自己編寫(xiě)測(cè)試驅(qū)動(dòng)吧。
(3)    利用proc或者sys文件系統(tǒng)的讀和寫(xiě)函數(shù)
如果你在設(shè)備驅(qū)動(dòng)里面添加了proc或者sys文件系統(tǒng)的讀和寫(xiě)函數(shù),你就可以在命令行通過(guò)cat或者echo命令來(lái)對(duì)設(shè)備驅(qū)動(dòng)的各項(xiàng)參數(shù)進(jìn)行手動(dòng)測(cè)試。

注:以上測(cè)試方法是我習(xí)慣用的,除了這些,還是有其他一些測(cè)試方法我沒(méi)有列舉出來(lái),感興趣的話可以google一下。

此外,應(yīng)該養(yǎng)成一個(gè)好習(xí)慣,那就是在測(cè)量各個(gè)引腳的同時(shí),你最好創(chuàng)建一份excel表格,把各個(gè)引腳的電壓、波形等情況記錄下來(lái),目的是在N多次修改之間作比較,也更有備忘的作用。

這里的“調(diào)”和“試”的過(guò)程是最耗時(shí)的,也是設(shè)備驅(qū)動(dòng)調(diào)試的最關(guān)鍵的步驟,所以你應(yīng)該非常有耐心的走好這一步。還應(yīng)該注意的是,設(shè)備驅(qū)動(dòng)的調(diào)試不光是你一個(gè)人的事情,有時(shí)候你悶頭苦干一個(gè)星期都不一定能搞定。所以,進(jìn)行調(diào)試的同時(shí),必須有一個(gè)硬件工程師配合你,因?yàn)轵?qū)動(dòng)不能正常運(yùn)行也很有可能是硬件的設(shè)計(jì)紕漏導(dǎo)致的。此外,不要閉門(mén)造車(chē),畢竟你在一個(gè)大的開(kāi)發(fā)團(tuán)隊(duì)里面,你需要及時(shí)和同事進(jìn)行有效的交流,避免走彎路。最后,如果還是存在問(wèn)題,你就得邀請(qǐng)芯片原廠的FAE過(guò)來(lái)嘍。

補(bǔ)充說(shuō)明
要進(jìn)行設(shè)備驅(qū)動(dòng)的移植,一般的,你必須具備以下幾個(gè)條件:

和當(dāng)前設(shè)備芯片相近的或者相類(lèi)似的芯片的現(xiàn)有驅(qū)動(dòng)代碼。

這句話有點(diǎn)拗口了,舉個(gè)例子來(lái)講吧。例如,你現(xiàn)在要移植一份驅(qū)動(dòng)到g-sensor(BMA250E)上,你現(xiàn)在就應(yīng)該盡可能

地去找到和芯片BMA250E相近的芯片所對(duì)應(yīng)的驅(qū)動(dòng)代碼。這時(shí)候,你高興的發(fā)現(xiàn),咦?!手頭上還有一份BMA250的代碼,太幸運(yùn)了。此時(shí)你就可以基于BMA250的代碼來(lái)做移植。但有時(shí)候并沒(méi)有這么幸運(yùn),那怎么辦呢?這時(shí)候你完全可以去找其他類(lèi)型的g-sensor啊,假如你手頭上并沒(méi)有BMA250的代碼,但是你有一份ADXL345的代碼,那當(dāng)然也是可以的,你完全可以基于ADXL345的代碼來(lái)做移植。至于為什么要選擇與當(dāng)前設(shè)備芯片相近的芯片所對(duì)應(yīng)的驅(qū)動(dòng)代碼,原因就四個(gè)字“提高效率”。

當(dāng)前芯片的詳細(xì)datasheet,以及芯片的相關(guān)說(shuō)明

開(kāi)發(fā)板的原理圖

如果有pads版本的原理圖和貼片圖,那是最好的了,方便以后測(cè)量引腳的各項(xiàng)參數(shù)。

萬(wàn)用表和示波器

這是調(diào)試、移植、開(kāi)發(fā)設(shè)備驅(qū)動(dòng)必不可少的設(shè)備。

具備了以上幾個(gè)條件之后,接著走上文所講的第一個(gè)和第二個(gè)步驟,尤其在第二個(gè)步驟,你可能得費(fèi)好大力氣來(lái)針對(duì)你當(dāng)前的開(kāi)發(fā)板進(jìn)行驅(qū)動(dòng)文件的修改。修改一般都包括I\O配置、中斷的設(shè)置、總線的配置(例如I2C、SPI、SDIO等)、寄存器的配置、甚至驅(qū)動(dòng)代碼的框架都得修改。等你這一步做好了,接著進(jìn)行上文談到的第三步,然后一步一步往下走完即可。

用一句話概括一下驅(qū)動(dòng)移植吧。驅(qū)動(dòng)的移植實(shí)際上就是:“通過(guò)添加、刪除和修改,使現(xiàn)有的一份芯片相近的驅(qū)動(dòng)代碼可以在目標(biāo)芯片和目標(biāo)板上跑起來(lái)并且跑的很穩(wěn)定!”


以下課程可免費(fèi)試聽(tīng)C語(yǔ)言電子PCBSTM32LinuxFPGA、JAVA、安卓等。
想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽(tīng)課了。
宋工企鵝號(hào):3524-6590-88   Tel/WX:173--1795--1908



本文地址:http://m.qingdxww.cn/thread-517972-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久噜噜噜久久久 | 国产亚洲一区二区三区在线 | 91黄视频在线观看 | 欧美成人h版影片在线观看 欧美成人h版白雪公主 | 日本免费黄网站 | 亚洲国产精品综合久久网络 | 欧美日韩中 | 激情艳女三级2在线观看 | 91久久青青青国产免费 | 在线看免费毛片 | 鲁大师成人精品视频 | 在线日韩欧美一区二区三区 | 亚洲成熟 | 亚洲男人的天堂在线观看 | 全亚洲最大的免费影院 | 99热这里只有精品首页精品 | 97影院在线观看 | 国产色拍 | 国产色视频网站免费观看 | 精品国产97在线观看 | 国产成人精品男人的天堂538 | 999国产视频 | 亚洲综合色婷婷久久 | 国产不卡一区二区视频免费 | 99草视频| 天堂在线最新版在线www | 一品道一本香蕉视频 | 美国做受三级的视频播放 | 国内精品中文字幕 | 日本亚洲欧美国产ay | 欧美日韩一区在线观看 | 久久三级视频 | 香蕉视频啪啪 | 国产亚洲婷婷香蕉久久精品 | 青草五月天 | 向日葵视频在线免费观看 | 国产精品手机视频一区二区 | 四虎网站最新网址 | 悄悄地喜欢你电视剧免费观看 | 9999毛片免费看 | 国产激情久久久久影 |