linux內核源碼樹掃盲分析
sudo apt-get install tree
//下載tree
tree
//輸入指令(該指令可以檢查第三方工具包里的內容是否完整)
可以看到如圖的樹狀結構:
linux內核源碼:
為什么內核大約1.3w個c文件,1100w行代碼?
linux是一個開源的,支持多架構多平臺代碼,可移植性非常高。但是linux內核編譯出來一般就若干M,因為支持多平臺,多架構,所以編譯之前要配置,配置成適合目標平臺來用。代碼編譯出來是給一個平臺一個架構來用的,很多代碼是不參與編譯的。
例如支持:
ARM架構:
比如以下平臺:
?????? ?海思 ,友善之臂 ,RK ,樹莓派, nanopi
X86架構
PowerPc架構
Mips架構
后兩個架構現在占得市場份額較小。
Linux內核源代碼目錄樹結構
arch(和架構相關):包含和硬件體系結構相關的代碼,每種平臺占一個相應的目錄。和32位PC相關的代碼存放在i386目錄下,其中比較重要的包括kernel(內核核心部分)、mm(內存管理)、math-emu(浮點單元仿真)、lib(硬件相關工具函數)、boot(引導程序)、pci(PCI總線)和power(CPU相關狀態)。
block:部分塊設備驅動程序。
crypto:常用加密和散列算法(如AES、SHA等),還有一些壓縮和CRC校驗算法。
Documentation:關于內核各部分的通用解釋和注釋。
drivers:設備驅動程序,每個不同的驅動占用一個子目錄。
fs:各種支持的文件系統,如ext、fat、ntfs等。
include:頭文件。其中,和系統相關的頭文件被放置在linux子目錄下。
init:內核初始化代碼(注意不是系統引導代碼)。
ipc:進程間通信的代碼。
kernel:內核的最核心部分,包括進程調度、定時器等,和平臺相關的一部分代碼放在arch/*/kernel目錄下。
lib:庫文件代碼。
mm:內存管理代碼,和平臺相關的一部分代碼放在arch/*/mm目錄下。
net:網絡相關代碼,實現了各種常見的網絡協議。
scripts:用于配置內核文件的腳本文件。
security:主要是一個SELinux的模塊。
sound:常用音頻設備的驅動程序等。
usr:實現了一個cpio。
在i386體系下,系統引導將從arch/i386/kernel/head.s開始執行,并進而轉移到init/main.c中的main()函數初始化內核。
參考博客:
https://www.cnblogs.com/senior-engineer/p/4929703.html