Linux內核源碼目錄結構

和uboot一樣,Linux源碼可以有3種獲取途徑:Linux官網下載、SoC廠商官方的、具體開發板的官方
(1)Linux官網kernel.org下載的。這個是源頭的源代碼,這種代碼對我們來說移植相比較來說比較困難。
(2)SoC廠商在推出一款SoC後,爲了推廣自己的SoC芯片,廠商的工程師會根據自己的SoC進行第一步的移植(移植的uboot和Linux是根據他們自己的開發板移植的),最終推出的自己的開發板,這個開發板很大功能特別齊全。
(3)具體的開發板供應商首先購買SoC廠商開發板,然後根據自己的功能需要對其進行裁剪,配置移植得到自己的開發板的一個Linux移植。
我們買開發板時,廠商光盤中帶的BSP中的Linux源碼就是具體開發板廠商移植過的。所以市面上不同版本的Linux或者同一版本不同人移植的Linux,可能目錄結構和文件內容都有所不同。以我前年在淘寶買的一個開發板所附帶的光盤爲例來看一下Linux源碼的目錄結構(該內核版本爲2.6.35.7,可以自己去Ubuntu下將其解壓然後make distclean清理然後再次打包傳輸到windows下去解壓分析)。

解壓後最終在windows下得到了一個kernel的源碼目錄樹,這個源碼目錄就是開發板廠商以SoC廠商移植過的內核爲原材料針對自己的開發板移植後的內核版本。
在這裏插入圖片描述
先看下單個文件目錄
(1)Kbuild:kernel build,是linux內核特有的內核編譯體系需要用到的文件。
(2)Makefile:整個內核工程是用這個Makefile來管理的。
(3)mk,是開發板廠商自己添加的來管理kernel目錄的配置和編譯,不是linux內核本身的東西。

再看下linux內核源碼文件夾目錄
(1)arch:architecture,意思是架構。arch目錄下是好多個不同架構的CPU的子目錄,譬如arm,X86等
(2)block:放的是一些linux存儲體系中關於塊設備管理的代碼。以塊(多個字節組成的整體,類似於扇區)爲單位來整體訪問,譬如說SD卡、iNand、Nand、硬盤等都是塊設備。
(3)crypto:放了一些各種常見的加密算法的C語言代碼實現,譬如crc32、md5、sha1等。
(4)Documentation:文檔。
(5)drivers:列出了linux內核支持的所有硬件設備的驅動源代碼。
(6)firmware:固件,固件其實是軟件,不過這個軟件是固話到IC裏面運行的叫固件,就像一些soc裏的iROM代碼。
(7)fs: 列出了linux支持的各種文件系統的實現。
(8)include: 頭文件目錄,每種CPU架構共用的頭文件都在這裏(每種CPU架構特有的一些頭文件在arch/arm/include目錄及其子目錄下)。
(9)init:linux內核啓動時初始化內核的代碼。
(10)ipc:inter process commuication,進程間通信,裏面都是linux支持的IPC的代碼實現。
(11)kernel:內核本身需要的一些核心代碼文件。
(12)lib:一些公用的有用的庫函數,注意這裏的庫函數和C語言的庫函數不一樣的。在內核編程中是不能用C語言標準庫函數,譬如內核編程中只能用lib目錄下的atoi函數,不能用標準C語言庫中的atoi;譬如在內核中要打印信息時不能用printf,而要用lib目錄下printk。
(13)mm:memory management,內存管理,linux的內存管理代碼都在這裏。
(14)net:網絡相關的代碼,譬如TCP/IP協議棧等。
(15)scripts:腳本文件,這些腳本文件不是linux內核工作時使用的,而是用來輔助對linux內核進行配置編譯生產的。
(16)security:安全相關。
(17)sound:音頻處理相關。
(18)tools:linux中用到的一些有用工具
(19)usr:目錄下是initramfs相關的,和linux內核的啓動有關。
(20)virt:內核虛擬機相關的。

總結:
和我們關係很緊密的就是arch和drivers目錄,然後其他有點相關的還有include、block、mm、net、lib等,另外Kbuild、Kconfig,makefile都是和內核的工作配置體系密切有關的,需要深入研究。
由於linux內核很龐大,裏面模塊很多,所以必須要有一套很複雜的機制來保證linux內核可以被正確的配置,所以內核發明了一種體系用來幫助人進行簡單化的配置。而這種體系就是我們本課程中重點要研究的東西。(對比一下uboot,uboot的配置體系很簡單,配置項都是在xxx.h中,用宏定義來表示的。uboot的這種方式很依賴於工程師的個人的水平)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章