已經寫了一篇文章介紹Linux系統目錄的:https://blog.csdn.net/weixin_38715577/article/details/101033419
現在介紹一下Linux內核(kernel)的目錄結構。
內核在系統目錄下的路徑,一般爲:/usr/src/(我的ubuntu下測試的)
你也可以自己在/home目錄下創建一個文件夾命名爲work,作爲自己開發內核的工作目錄,然後去https://www.kernel.org/pub/linux/kernel/下載一個內核到/home/work/下,在這上面做相應開發比較好。
內核源碼的目錄結構和系統目錄結構類似,也是一個樹狀結構。
下圖是我的ubuntu16的內核源碼路徑和內核源碼目錄的樣子。
第一級目錄:
序號 | 第一級目錄 | 第二級目錄和文件 |
---|---|---|
1 | arch |
這個文件夾包含了一個Kconfig文件,它用於設置這個目錄裏的源代碼編譯所需的一系列設定。 每個支持的處理器架構都在它相應的文件夾中,如 |
2 | block |
此文件夾包含塊設備驅動程序的代碼,該目錄用於實現塊設備的基本框架和塊設備的I/O調度算法。塊設備是以數據塊方式接收和發送的數據的設備。數據塊都是一塊一塊的數據而不是持續的數據流。 |
3 | crypto |
這個文件夾包含許多加密算法的源代碼。例如,“sha1_generic.c”這個文件包含了SHA1加密算法的代碼。存放加密 、壓縮 、CRC校驗 等算法相關代碼 |
4 | Documentation |
存放相關說明文檔 ,很多實用文檔,包括驅動編寫等 |
5 | drivers |
存放 Linux 內核設備驅動程序 源碼。驅動源碼在 Linux 內核源碼中站了很大比例,常見外設幾乎都有可參考源碼,對驅動開發而言,該目錄非常重要。該目錄包含衆多驅動 ,目錄按照設備類別進行分類,如char 、block 、input 、i2c 、spi 、pci 、usb 等 |
6 | firmware |
保存用於驅動第三方設備的固件。 |
7 | fs |
這是文件系統的文件夾。理解和使用的文件系統所需要的所有的代碼就在這裏。在這個文件夾裏,每種文件系統都有自己的文件夾。例如,ext4文件系統的代碼在ext4文件夾內。 在fs文件夾內,開發者會看到一些不在文件夾中的文件。這些文件用來控制整個文件系統。例如,mount.h中會包含掛載文件系統的代碼。文件系統是以結構化的方式來存儲和管理的存儲設備上的文件和目錄。每個文件系統都有自己的優點和缺點。這是由文件系統的設計決定的。 |
8 | include |
存放內核所需、與平臺無關的頭文件,與平臺相關的頭文件已經被移動到 arch 平臺的include 目錄,如 ARM 的頭文件目錄<arch/arm/include/asm/> |
9 | init |
包含內核初始化 代碼,init文件夾包含了內核啓動的處理代碼(INITiation)。main.c是內核的核心文件,這是用來銜接所有的其他文件的源代碼主文件。 |
10 | ipc |
存放進程間通信 代碼, 此文件夾中的代碼是作爲內核與進程之間的通信層。內核控制着硬件,因此程序只能請求內核來執行任務。假設用戶有一個打開DVD托盤的程序。程序不直接打開托盤,該程序通知內核,然後,內核給硬件發送一個信號去打開托盤。 |
11 | kernel |
這個文件夾中的代碼控制內核本身,在該文件夾下有個"power"文件夾,這裏的代碼可以使計算機重新啓動、關機和掛起。 |
12 | lib |
這個文件夾包含了內核需要引用的一系列內核庫文件代碼。 |
13 | mm |
mm文件夾中包含了內存管理代碼。內存並不是任意存儲在RAM芯片上的。相反,內核小心地將數據放在RAM芯片上。內核不會覆蓋任何正在使用或保存重要數據的內存區域。 |
14 | net |
net文件夾中包含了網絡協議代碼。這包括IPv6、AppleTalk、以太網、WiFi、藍牙等的代碼,此外處理網橋和DNS解析的代碼也在net目錄。 |
15 | samples |
存放提供的一些內核編程 此文件夾包含了程序示例和正在編寫中的模塊代碼。假設一個新的模塊引入了一個想要的有用功能,但沒有程序員說它已經可以正常運行在內核上。那麼,這些模塊就會移到這裏。這給了新內核程序員一個機會通過這個文件夾來獲得幫助,或者選擇一個他們想要協助開發的模塊。 |
16 | srcipts |
這個文件夾有內核編譯所需的腳本。最好不要改變這個文件夾內的任何東西。否則,您可能無法配置或編譯內核。 |
17 | security |
這個文件夾是有關內核安全的代碼。它對計算機免於受到病毒和黑客的侵害很重要。否則,Linux系統可能會遭到損壞。 |
18 | sound |
這個文件夾中包含了聲卡驅動,存放聲音系統架構相關代碼和具體聲卡的設備驅動程序 |
19 | tools |
編譯過程中一些主機必要工具, 這個文件夾中包含了和內核交互的工具。 |
20 | usr |
早期用戶空間代碼(所謂的initramfs) |
21 | virt |
內核虛擬機KVM |
以上是Linux內核源碼目錄的結構,大致瞭解每個目錄的左右,需要的時候知道在哪去找就行。
對於Linux內核驅動開發工程師來說,最常接觸的就是driver目錄,接下來就driver目錄做一些說明!
先看張圖:這是我虛擬機裏面 內核源碼下drivers的樣子
好了忘記它。沒什麼卵用,只是看一看加深印象。
下面是driver目錄下比較常用的驅動,本人才疏學淺,剛開始學習,怕有什麼錯漏,所以下圖是借鑑了:https://blog.csdn.net/hongwei_1990/article/details/89716970
序號 | 目錄 | 說明 |
---|---|---|
1 | drivers/gpio |
系統GPIO 子系統和驅動目錄,包括處理器內部GPIO 以及外擴GPIO 驅動。遵循GPIO 子系統的驅動,可通過/sys/class/gpio 進行訪問 |
2 | drivers/hwmon |
硬件監測 相關驅動,如溫度傳感器 、風扇監測 等 |
3 | drivers/i2c |
I2C子系統 驅動。各I2C控制器 的驅動在i2c/busses 目錄下 |
4 | drivers/input |
輸入子系統 驅動目錄 |
5 | drivers/input/keyboard |
非HID鍵盤 驅動,如GPIO鍵盤 、矩陣鍵盤 等 |
6 | drivers/input/touchscreen |
觸摸屏驅動 ,如處理器的觸摸屏控制器 驅動、外擴串行觸摸屏控制器 驅動、串口觸摸屏控制器 驅動等 |
7 | drivers/leds |
LED 子系統和驅動,如GPIO驅動 的LED 。遵循 LED子系統的驅動 ,可通過/sys/class/leds 進行訪問 |
8 | drivers/mfd |
多功能器件 (Multi-Function Device )驅動。如果一個器件能做多種用途,通常需要藉助MFD 來完成。 |
9 | drivers/misc |
雜項 (Miscellaneous )驅動。特別需要關注<drivers/misc/eeprom/> 目錄,提供了i2c 和spi 接口的EEPROM驅動 範例,所驅動的設備可通過/sys 系統訪問 |
10 | drivers/mmc |
SD (Secure Digital )/MMC (Mutimedia Card )卡驅動目錄 |
11 | drivers/mtd |
MTD (Memory Technology Device )子系統和驅動,包括NAND 、oneNAND 等。注意,UBI的實現 也在MTD 中 |
12 | drivers/mtd/nand |
NAND FALSH 的MTD 驅動目錄,包括NAND 的基礎驅動 和控制器接口驅動 |
13 | drivers/net |
網絡設備 驅動,包括MAC 、PHY 、CAN 、USB 網卡 、無線 、PPP協議 等 |
14 | drivers/net/can |
CAN設備 驅動。Linux已經將CAN 歸類到網絡中 ,採用socket_CAN 接口 |
15 | drivers/net/ethernet |
所支持的MAC驅動 。常見廠家的MAC驅動 都能找到,如broadcom 、davicom 、marvell 、micrel 、smsc 等廠家的MAC,處理器自帶MAC 的驅動 也在該目錄下 |
16 | drivers/net/phy |
PHY 驅動,像marvell 、micrel 和smsc 的一些PHY驅動 |
17 | drivers/rtc |
RTC子系統 和RTC芯片驅動 |
18 | drivers/spi |
SPI子系統 和SPI控制器 驅動,含GPIO 模擬SPI 的驅動 |
19 | drivers/tty |
tty驅動用於管理物理終端連接。 |
20 | drivers/tty/serial |
串口驅動 ,包括8250串口 以及各處理器內部串口 驅動實現 |
21 | drivers/uio |
用戶空間IO驅動 |
22 | drivers/usb |
USB驅動 ,包括USB HOST 、Gadget 、USB轉串口 以及OTG 等支持 |
23 | drivers/video |
Video驅動 ,包括Framebuffer驅動 、顯示控制器驅動 和背光驅動 等。 |
24 | drivers/video/backlight |
背光控制 驅動 |
25 | drivers/video/logo |
Linux內核啓動LOGO圖片 目錄 |
26 | drivers/watchdog |
看門狗驅動 ,包括軟件看門狗 和各種硬件看門狗 驅動實現 |
還有其他一些內核目錄沒介紹,需要的時候可以網上找資料。
希望與諸君共同學習進步!加油!