色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于驅(qū)動設備調(diào)試和移植一些經(jīng)驗總結(jié)

5RJg_mcuworld ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-10-23 09:05 ? 次閱讀

對設備驅(qū)動最通俗的解釋就是“驅(qū)使硬件設備行動”。設備驅(qū)動與底層硬件直接打交道,按照硬件設備的具體工作方式讀寫設備寄存器,完成設備的輪詢、中斷處理、DMA 通信,進行物理內(nèi)存向虛擬內(nèi)存的映射,最終使通信設備能夠收發(fā)數(shù)據(jù),使顯示設備能夠顯示文字和畫面,使存儲設備能夠記錄文件和數(shù)據(jù)。設備驅(qū)動充當了硬件和應用軟件之間的紐帶,它使得應用軟件只需要調(diào)用系統(tǒng)軟件的應用編程接口(API)就可讓硬件去完成要求的工作。

在系統(tǒng)中沒有操作系統(tǒng)的情況下,工程師可以根據(jù)硬件設備的特點自行定義接口,如對串口定義SerialSend()、SerialRecv();對LED 定義LightOn()、LightOff();以及對Flash 定義FlashWrite()、FlashRead()等。而在有操作系統(tǒng)的情況下,設備驅(qū)動的架構(gòu)則由相應的操作系統(tǒng)定義,驅(qū)動工程師必須按照相應的架構(gòu)設計設備驅(qū)動,這樣,設備驅(qū)動才能良好地整合到操作系統(tǒng)的內(nèi)核中。

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

linux底層軟件工作也有兩年了,算上研究生時期對底層軟件的研究,加起來也快四年了。慢慢地發(fā)現(xiàn)有必要總結(jié)一些一般性的方法了。因為一般性的方法有宏觀上的指導意義,以后調(diào)試和移植驅(qū)動時,經(jīng)常性地回味這些一般性的方法可以防止自己犯同樣的錯誤,進而少走彎路,以最高的效率完成工作。

當談到底層軟件,我們一般都會想到bootloader、BSP、device driver、linux kernel等等。這里將會著重介紹linux device driver調(diào)試的一般性方法。

注意,這里說的一般方法不是固定套路,也就是說你不用把它當做教科書來讀。你只需要根據(jù)具體情況靈活的選用其中某些步驟即可。

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

1.設備驅(qū)動的代碼和應用層測試軟件(或者代碼)。因為你做驅(qū)動的最終目的還是要給上層應用去操作的。所以,一個針對驅(qū)動的測試應用程序是必須的。這里的應用層測試軟件一般都是供應商提供的,或者系統(tǒng)現(xiàn)有的可以用的應用,如果沒有就必須自己寫了。

2.你要調(diào)試的設備對應的datasheet、規(guī)格書和相關(guān)資料。盡可能地去搞到詳盡的芯片相關(guān)資料和相關(guān)說明,因為這些都是你隨后調(diào)試驅(qū)動的指引。

3.開發(fā)板的原理圖和貼片圖。

(1)如果是飛線過來的模塊,而且你又不確定硬件工程師的操作是完全正確的,是不是每條線都接的是對的,這時候你就必須搞到貼片圖和原理圖,然后和板子上的飛線一條一條線的核對一遍。如果準確無誤,那你就開工。

(2)當你們的硬件工程師沒有給你提供硬件板子的引腳具體在板子上的哪個位置的說明時,你就必須搞到貼片圖。

(3)此外,經(jīng)常貼片圖有助于提高一個驅(qū)動工程師的硬件素養(yǎng)。

萬用表示波器是必備的,其次,根據(jù)需要,你可能會用到頻譜分析儀和邏輯分析儀。OK!當你拿到這些資料后,你就可以大刀闊斧地進行設備驅(qū)動調(diào)試了。一般的,設備驅(qū)動的調(diào)試都會經(jīng)歷如下幾個步驟。

一、把設備驅(qū)動的代碼添加進kernel

這一點要注意了,不同的方案提供商給出的添加方法是不同的。例如,對于Mediatek方案提供商,添加設備驅(qū)動的方法就和一般化的不一樣,因為Mediatek的體系架構(gòu)不同于像telechips、Qualcomm等這樣的kernel傳統(tǒng)架構(gòu)。所以,對于像Mediatek這樣的特殊供應商,你必須遵循其提供的一套添加驅(qū)動的流程(mtk支持比較好,一般會提供sop)。傳統(tǒng)架構(gòu)的話,就很簡單了,一般都會涉及到一下幾步:

  • 新建設備驅(qū)動目錄

  • 添加頭文件

  • 創(chuàng)建當前目錄的Makefile

  • 創(chuàng)建上層目錄的Makefile

  • 在上層目錄添加Kconfig選項

  • 在板文件添加對應項

  • 如果不想每次都用menuconfig配置,就在kernel/arch/arm/configs/XXX_defconfig里面添加編譯項

具體的實例我之類就不寫了,google一下一大把,這篇文章也不會涉及到過多的細節(jié)問題。

二、使得添加進去的設備驅(qū)動可以編譯通過

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

三、 檢查設備驅(qū)動是否正常初始化

進行到這一步,你需要檢查設備驅(qū)動是否可以順利初始化,這個很簡單,你只需要在設備驅(qū)動的probe函數(shù)或者init函數(shù)里面添加一條打印信息即可在串口觀察是否有打印,如果沒有打印,說明驅(qū)動根本就沒有得到初始化。此時,你應該趕緊跑過去問和你合作的硬件工程師:“hi,我這塊板子,那個XXX芯片是否貼上了?”,或者問他們:“這些飛線是不是都連接的OK了?”。 問這些問題都是很有必要的,因為很有可能硬件上沒有準備好,或者硬件連線本來就有問題。所以,為了避免浪費時間,你還是主動去問下他們。

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

如果驅(qū)動得到了正常的初始化,這時候你開始檢查該設備驅(qū)動對應的應用程序是否可以正常使用(或者自己寫設備驅(qū)動的測試應用程序)。如果可以正常使用,那你太幸運了,這說明芯片原廠為你考慮的很周到,你可以節(jié)省N多時間干別的事兒了。

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

四、 設備驅(qū)動的“調(diào)”和“試”

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

所謂“試”,就是你在添加、刪除和修改的同時要不斷地:

  • 通過串口對反饋信息進行觀察。

  • 通過萬用表對各電源引腳電壓進行測量。

  • 通過示波器對芯片的時鐘(輸入的和輸出的)頻率(包括測量晶振)、數(shù)據(jù)信號的波形、某種總線信號的波形,等各個引腳進行測量。

  • 觀察設備的上電時序,數(shù)據(jù)交互時序等等是否正常(參考datasheet)。

  • 通過測試應用程序?qū)︱?qū)動進行測試,并反復觀察設備驅(qū)動的運行狀態(tài)。

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

(1)利用系統(tǒng)里面現(xiàn)有的應用程序進行測試

這個是最直接的測試,也省去了你自己編寫測試程序的時間。

(2)自己編寫linux應用程序來測試驅(qū)動

如果你對系統(tǒng)現(xiàn)有的應用程序不放心,或者不滿意,就自己編寫測試驅(qū)動吧。

(3) 利用proc或者sys文件系統(tǒng)的讀和寫函數(shù)

如果你在設備驅(qū)動里面添加了proc或者sys文件系統(tǒng)的讀和寫函數(shù),你就可以在命令行通過cat或者echo命令來對設備驅(qū)動的各項參數(shù)進行手動測試。

注:以上測試方法是我習慣用的,除了這些,還是有其他一些測試方法我沒有列舉出來,感興趣的話可以google一下。

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

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

補充說明

要進行設備驅(qū)動的移植,一般的,你必須具備以下條件:

1.和當前設備芯片相近的或者相類似的芯片的現(xiàn)有驅(qū)動代碼

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

2.當前芯片的詳細datasheet,以及芯片的相關(guān)說明

3.開發(fā)板的原理圖

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

4.萬用表和示波器

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 測試測量
    +關(guān)注

    關(guān)注

    25

    文章

    898

    瀏覽量

    90680
  • 嵌入式
    +關(guān)注

    關(guān)注

    5089

    文章

    19170

    瀏覽量

    306812
  • 智能硬件
    +關(guān)注

    關(guān)注

    205

    文章

    2350

    瀏覽量

    107814

原文標題:少走彎路!嵌入式Linux設備驅(qū)動調(diào)試移植的一些套路

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    老司機帶你學嵌入式Linux設備驅(qū)動調(diào)試移植

    驅(qū)動,這樣,設備驅(qū)動才能良好地整合到操作系統(tǒng)的內(nèi)核中。下面是位嵌入式驅(qū)動工程師關(guān)于
    發(fā)表于 10-22 10:44

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

    地整合到操作系統(tǒng)的內(nèi)核中。 下面是位嵌入式驅(qū)動工程師關(guān)于驅(qū)動設備調(diào)試
    發(fā)表于 11-10 16:20

    伺服調(diào)試一些經(jīng)驗總結(jié)

    安川伺服調(diào)試一些經(jīng)驗在查找慣量比的過程中看到的,這是伺服電機的驅(qū)動過程中發(fā)生的問題,首先應當匹配慣量,伺服電機應當考慮剛性,還有速度,速度高,慣量還會大。再生電阻還是不知道怎么配置。
    發(fā)表于 09-07 08:05

    C嵌入式程序項目經(jīng)驗總結(jié)相關(guān)資料分享

    C嵌入式程序項目經(jīng)驗總結(jié)這里總結(jié)一些項目經(jīng)驗,比如程序調(diào)試經(jīng)驗,代碼設計模式
    發(fā)表于 12-21 06:04

    SOPC Builder/Nios 學習經(jīng)驗總結(jié)

    SOPC Builder/Nios 學習經(jīng)驗總結(jié)
    發(fā)表于 07-22 15:32 ?0次下載
    SOPC Builder/Nios 學習<b class='flag-5'>經(jīng)驗總結(jié)</b>

    單端甲類小膽機的制作經(jīng)驗總結(jié)

    單端甲類小膽機的制作經(jīng)驗總結(jié) 1、現(xiàn)在很多自己動手制作膽機的朋友很多都是按照一些參考電路來仿制,其對參考電路中的很多技術(shù)
    發(fā)表于 07-31 21:56 ?1.2w次閱讀
    單端甲類小膽機的制作<b class='flag-5'>經(jīng)驗總結(jié)</b>

    線圈天線設計經(jīng)驗總結(jié)

    線圈天線設計經(jīng)驗總結(jié)
    發(fā)表于 09-12 17:21 ?224次下載

    開關(guān)電源測量的經(jīng)驗總結(jié)

    開關(guān)電源測量的經(jīng)驗總結(jié),感興趣的小伙伴們可以瞧瞧。
    發(fā)表于 09-18 17:34 ?0次下載

    模擬電路設計經(jīng)驗總結(jié)

    模擬電子的相關(guān)知識學習教材資料——模擬電路設計經(jīng)驗總結(jié)
    發(fā)表于 09-27 15:19 ?0次下載

    指針經(jīng)驗總結(jié)

    指針經(jīng)驗總結(jié)
    發(fā)表于 10-27 15:44 ?19次下載
    指針<b class='flag-5'>經(jīng)驗總結(jié)</b>

    名開發(fā)工程師的七年工作經(jīng)驗總結(jié)

    這是在網(wǎng)上看到的篇文章,寫的是個從事軟件工程開發(fā)的大牛對從業(yè)七年的一些經(jīng)驗總結(jié)。感覺挺不錯,轉(zhuǎn)來與大家分享了,下面是正文。
    的頭像 發(fā)表于 08-16 11:55 ?4405次閱讀

    電路設計的一些經(jīng)驗總結(jié)

    電路設計的一些經(jīng)驗總結(jié)
    發(fā)表于 12-02 13:57 ?45次下載

    EMI整改經(jīng)驗總結(jié)

    EMI整改經(jīng)驗總結(jié)
    發(fā)表于 12-20 15:55 ?45次下載

    硬件調(diào)試經(jīng)驗總結(jié)

    這是我個人的第篇博客,在此記錄下做北斗杯比賽的一些小經(jīng)驗總結(jié)方面留作自己的備份,另方面希望可以幫到和我遇到類似問題的人。MS561
    發(fā)表于 01-12 19:54 ?2次下載
    硬件<b class='flag-5'>調(diào)試</b><b class='flag-5'>經(jīng)驗總結(jié)</b>

    選擇燒結(jié)銀的經(jīng)驗總結(jié)

    選擇燒結(jié)銀的經(jīng)驗總結(jié)
    的頭像 發(fā)表于 12-17 15:46 ?1447次閱讀
    選擇燒結(jié)銀的<b class='flag-5'>經(jīng)驗總結(jié)</b>
    主站蜘蛛池模板: gogogo在线观看| 午夜理论片日本中文在线| 俄罗斯粗大猛烈18P| 亚洲欧洲一级| 强奷乱码中文字幕熟女免费| 好爽别插了无码视频| 被室友C哭调教双性| 亚洲人人为我我为人人| 全文都是肉高h文| 久久综合狠狠综合狠狠| 国产第81页| 99热这里只有的精品| 亚洲人女同志video| 三级黄视频| 男女啪啪久久精品亚洲A| 九九99热久久精品在线6| 高清无码色大片中文| 99re6在线视频国产精品欧美| 亚洲国产精品一区二区三区在线观看 | 亚洲国产中文在线视频| 全彩acg无翼乌火影忍者| 狂躁美女BBBBBB视频| 果冻传媒妈妈要儿子| 国产传媒18精品免费1区| 被吊起玩弄的女性奴| 97伦理97伦理2018最新| 曰本少妇高潮久久久久久| 亚洲欧美日本国产在线观18| 无码人妻少妇色欲AV一区二区| 日本理论片午午伦夜理片2021| 久久中文字幕人妻熟AV女蜜柚M | 国产精彩视频在线| 成激人情在线影院920| 91免费永久在线地址| 中文字幕无码乱人伦蜜桃| 曰本少妇高潮久久久久久| 一区二区三区无码高清视频| 一区二区视频在线观看高清视频在线| 亚洲蜜芽在线观看精品一区| 亚洲免费va在线观看| 亚洲日韩中文字幕日本有码|