做linux底層軟體工作也有兩年了,算上研究生時期對底層軟體的研究,加起來也快四年了。慢慢地發現有必要總結一些一般性的方法了。因為一般性的方法有巨集觀上的指導意義,以後除錯和移植驅動時,經常性地回味這些一般性的方法可以防止自己犯同樣的錯誤,進而少走彎路,以最高的效率完成工作。
當談到底層軟體,我們一般都會想到bootloader、bsp、device driver、linux kernel等等。這篇文章將會著重介紹linux device driver除錯的一般性方法。
另外,關於裝置驅動移植的方法會在文章最後以補充說明的形式給出。
注意,這裡說的一般方法不是固定套路,也就是說你不用把它當做教科書來讀。你只需要根據具體情況靈活的選用其中某些步驟即可。
一般情況下,進行裝置驅動的除錯之前,你必須具備以下條件:
l 裝置驅動的**和應用層測試軟體(或者**)
因為你做驅動的最終目的還是要給上層應用去操作的。所以,乙個針對驅動的測試應用程式是必須的。這裡的應用層測試軟體一般都是**商提供的,或者系統現有的可以用的應用,如果沒有就必須自己寫了。
l 你要除錯的裝置對應的datasheet、規格書和相關資料
盡可能地去搞到詳盡的晶元相關資料和相關說明,因為這些都是你隨後除錯驅動的指引。
l 開發板的原理圖和貼片圖
一般情況下,你可能不需要貼片圖,但是如果你們的硬體工程師對你的支援力度不夠,那你就需要乙個板子的貼片圖。原因可能有以下幾點:
(1) 如果是飛線過來的模組,而且你又不確定硬體工程師的操作是完全正確的,是不是每條線都接的是對的,這時候你就必須搞到貼片圖和原理圖,然後和板子上的飛線一條一條線的核對一遍。如果準確無誤,那你就開工。
(2) 當你們的硬體工程師沒有給你提供硬體板子的引腳具體在板子上的哪個位置的說明時,你就必須搞到貼片圖。
(3) 此外,經常貼片圖有助於提高乙個驅動工程師的硬體素養。
l 萬用表、示波器
萬用表和示波器是必備的,其次,根據需要,你可能會用到頻譜分析儀和邏輯分析儀。
ok!當你拿到這些資料後,你就可以大刀闊斧地進行裝置驅動除錯了。一般的,裝置驅動的除錯都會經歷如下幾個步驟:
一、 把裝置驅動的**新增進kernel
這一點要注意了,不同的方案提供商給出的新增方法是不同的。例如,對於mediatek方案提供商,新增裝置驅動的方法就和一般化的不一樣,
因為mediatek的體系架構不同於像telechips、qualcomm等這樣的kernel傳統架構。所以,對於像mediatek這樣的特殊**商,你必須遵循其提供的一套新增驅動的流程(mtk支援比較好,一般會提供sop)。傳統架構的話,就很簡單了,一般都會涉及到一下幾步:
l 新建裝置驅動目錄
l 新增標頭檔案
l 建立當前目錄的makefile
l 建立上層目錄的makefile
l 在上層目錄新增kconfig選項
l 在板檔案新增對應項。
l 如果不想每次都用menuconfig配置,就在kernel/arch/arm/configs/***_defconfig裡面新增編譯項
二、 使得新增進去的裝置驅動可以編譯通過
裝置驅動新增進來之後,一般的,都需要你新增、刪除、修改一些內容,才能保證其編譯通過。如果是除錯,這裡可能改動不大,因為驅動文
件一般是由晶元原廠提供的,他們已經修改的基本可以編譯通過了。但如果是移植,在這裡花費的精力一般是比較大的,這會在後文中的附加說明裡面提及到。
三、 檢查裝置驅動是否正常初始化
進行到這一步,你需要檢查裝置驅動是否可以順利初始化,這個很簡單,你只需要在裝置驅動的probe函式或者init函式裡面新增一條列印
資訊即可在串列埠觀察是否有列印,如果沒有列印,說明驅動根本就沒有得到初始化。此時,你應該:
l 首先,你趕緊跑過去問和你合作的硬體工程師:「hi,我這塊板子,那個***晶元是否貼上了?」,或者問他們:「這些飛線是不是都連線的ok了?」。 問這些問題都是很有必要的,因為很有可能硬體上沒有準備好,或者硬體連線本來就有問題。所以,為了避免浪費時間,你還是主動去問下他們。
l 其次,如果晶元確實貼上了而且硬體連線都接對了(後來你不放心,自己也核對了一遍),這時候問題就在你嘍。馬上檢查裝置驅動的新增是否有什麼問題,是否是板檔案沒有修改好,是否驅動本身就沒有註冊好等等。
設計和編寫裝置驅動的一般方法
這時候你是不是有點不知所措呢?其實你不用著急,根據可知論,世界是可以被認知的,linux裝置驅動的一般性的設計和編寫方法也是存在的,所以,你大可不必驚慌。linux裝置驅動的設計一般可以遵循以下幾個步驟。一 深刻理解datasheet和原理圖 這裡講的datasheet包括主控的datasheet和...
設計和編寫裝置驅動的一般方法
這時候你是不是有點不知所措呢?其實你不用著急,根據可知論,世界是可以被認知的,linux裝置驅動的一般性的設計和編寫方法也是存在的,所以,你大可不必驚慌。linux裝置驅動的設計一般可以遵循以下幾個步驟。一 深刻理解datasheet和原理圖 這裡講的datasheet包括主控的datasheet和...
晶元啟動除錯一般方法
在晶元樣片流片回來之後,所有的人最關心的就是新的功能是否正常 舊版本發現的問題是否解決,這就需要把樣片替代驗證系統裡老晶元,重新把系統跑起來進行驗證。在樣片階段,可能由於封裝比較簡陋 成品率很低等方面原因導致出現各種奇怪的問題。由於晶元的驗證系統涵蓋了晶元驗證板卡 新晶元 啟動韌體 bios 作業系...