你為什麼看不懂Linux核心驅動原始碼?

2021-08-19 13:13:00 字數 1365 閱讀 3993

學習嵌入式linux驅動開發,最核心的技能就是能夠編寫linux核心驅動、深入理解linux核心。而做到這一步的基礎,就是你要看得懂linux核心原始碼,了解其基本的框架和具體實現,了解其核心api的使用方法,然後才能根據自己的需求寫出高質量的核心驅動程式。

但是,要想編寫高質量的程式,對linux核心、模組的理解肯定要深入的,否則,你就永遠停留在外圍,縫縫補補。根據我的各種學習經歷和經驗總結,linux核心並不是堅不可摧、攻不可破,掌握了正確的學習方法和知識基礎,我們也可以在核心的**裡遨遊,領略linux核心中c語言的各種奇妙應用和強大技巧,對linux核心各種複雜的框架、子系統也可以指點江山,胸有成竹。

那學習linux驅動、分析linux核心原始碼之前,到底需要哪些知識儲備和技能呢?

1)c語言基礎+資料結構

除此之外,資料結構也是要掌握的,鍊錶、佇列在linux核心中大量使用,所以必須要掌握。像其它的一些非線性資料結構:比如樹、二叉樹、紅黑樹等,對於做底層驅動的開發者來說,接觸得很少,可以先不學,用到的時候再補也不遲。

2)c語言的語法擴充套件

在閱讀linux核心**的過程中,你有沒有感覺到,有些**,看起來「怪怪的」,跟一般的c語言不太一樣?看起來是c語言,仔細一分析,發現又看不懂了。

這些你看起來「怪怪的c語言**」,其實都是gcc編譯器對標準c語言的擴充套件語法:比如語句表示式、區域性標籤、__attribute__屬性宣告、可變引數巨集等。這些gcc擴充套件的語法,在linux核心、驅動原始碼中,廣泛使用,尤其是涉及到底層啟動、編譯鏈結的一些設定。如果你不掌握這些擴充套件的c語言語法的使用,在閱讀linux核心原始碼、或驅動的過程中,可能就會遇到很多障礙,對我們理解**造成各種干擾。

學完了這個,掃除了閱讀linux原始碼的語法障礙,接下來可以選擇乙個自己感興趣的小模組:先把這個模組留給使用者的api玩熟,學會程式設計,再慢慢研究其核心內部的實現。從底層到上層,打通任督二脈,再去分析核心中,其它複雜的系統,也就觸類旁通,比較容易上手了。

3)linux核心中的物件導向思想

有了上面的基礎,我們分析乙個小的linux核心模組,是沒有問題的。當遇到乙個大的複雜子系統,比如說usb子系統、記憶體管理、mtd、檔案系統等,結構體裡面巢狀多層結構體,各種device、bus、driver、各種層,是不是有點繞暈了?有種盲人摸象、在森林裡迷路的感覺,把握不了「全域性」。這時候,我們就不能使用c語言的面向過程思維了,linux核心的設計其實大量使用了物件導向思想。因此,我們要學會用物件導向的思維去分析linux核心,分析各個模組的復用,這樣就很方便的在腦海中搭建出系統的框架和層次了。然後再使用面向過程思維去分析具體的功能實現、具體細節,多花點時間和精力,相信你會有不一樣的收穫的。關於linux核心常用的資料結構和物件導向思想,可以關注教程:c語言嵌入式linux高階程式設計第7期:linux核心中的資料結構與資料封裝

嵌入式交流qq群:475504428

為什麼看不懂廖雪峰的Python學習教程?

廖雪峰的python教程已經很友好了,接近於把飯喂到嘴邊了。這不是廖雪峰教程的問題,而是乙個基礎 技能和實際應用需求的 技能差距太遠導致的。如果是新手,只學會了廖雪峰python教程,那約等於什麼都寫不出來。除了課後習題,什麼都寫不出來。就以知乎上氾濫的python爬蟲教程來看。在你掌握了pytho...

linux 安裝nodejs,看不懂算我的

1 進入根目錄 cd 語法 wget url wget 3 解壓包 語法 tar xvf 檔名 tar xvf node v10.15.0 linux x64.tar.xz 4 重新命名資料夾 語法 mv 檔名 目標檔名 node mv node v10.15.0 linux x64.tar.xz ...

linux 安裝nodejs,看不懂算我的

1 進入根目錄 語法 wget url wget 3 解壓包 語法 tar xvf 檔名 tar xvf node v10.15.0 linux x64.tar.xz 4 重新命名資料夾 語法 mv 檔名 目標檔名 node mv node v10.15.0 linux x64.tar.xz nod...