Linux內核目錄結構(2.6版本以上的kernel)

1documentation:linux

沒有內核代碼,提供文檔幫助。程序員

2arch:算法

archarchitecture的縮寫。全部與體系結構相關的代碼都在這個目錄以編程

include/asm-*/目錄中。Linux支持的每種體系結構在arch目錄下都有對應的目錄,又進一安全

步分解爲bootmmkernel等子目錄:網絡

         | kernel:           存放支持體系結構特有的諸如信號量處理和SMP之類特徵的實現。編程語言

         | lib:                   存放體系結構特有的對諸如strlenmemcpy之類的通用函數的實現。ide

         | mm:                存放體系結構特有的內存管理程序的實現。函數

除了這3個子目錄之外,大多數體系結構在必要的狀況下還有一個boot子目錄,包括了在這種硬件平臺上啓動內核所使用的內存管理程序的實現。工具

3drivers:

驅動代碼,驅動是一個控制硬件的軟件。這個目錄是內核中最龐大的一個目錄,顯卡、網卡、SCSI適配器、PCI總線、USB總線和其餘任何Linux支持的外圍設備或總線的驅動程序均可以在這兒找到。

4fs:

虛擬文件系統(VFS)的代碼,和各個不一樣文件系統的代碼都在這個目錄中。Linux支持的全部文件系統在fs目錄下面都有一個對應的子目錄。好比ext2文件系統對應的是fs/ext2目錄。

一個文件系統是存儲設備和須要訪問存儲設備的進程之間的媒介。存儲設備多是本地的物理上能夠訪問的,好比硬盤或者CD-ROM驅動器,他們分別使用而系統ext2/ext3isofs文件系統。

還有一些虛擬文件系統(proc,它是一個標準文件系統出現。然而,他其中的文件只存在於內存中,並不佔磁盤空間。

5include:

這個目錄包含了內核中大部分的頭文件,它按照下面的子目錄進行分組。要修改處理器結構則只需編輯核心的makefile並從新運行Linux核心配置程序。

       | include/asm-*/            每個對應着一個arch的子目錄,好比include/asm-alpha

Include/asm-arm等。每一個子目錄中的文件都定義了支持給定體系結構所必要的預處理函數和內聯函數,這些內聯函數多數都是所有或者部分的彙編語言實現。

| include/linux             與平臺無關的頭文件都在這個目錄下,它一般會被連接到目錄                                              /usr/include/linux(或者它裏面的全部文件都會被複制到

                                          /usrinclude/linux目錄下邊)      

6init    

     內核的初始化代碼。包括main.c、建立早起用戶空間的代碼及其餘初始化代碼。

7ipc:

IPC(進程間通訊)。它包含了共享內存、信號量及其餘形式的IPC代碼。

8kernel:

內核中最核心的部分,包括進程的調度(sched.c,以及進程的建立和撤銷(fork.cexit.c)和平臺相關的另一部分核心代碼在arch/*/kernel目錄下。

9mm

此目錄包含了與體系無關的部份內存管理代碼。與體系結構相關的內存管理代碼位於arch/*/mm下。
10net
   
核心的網絡部分代碼,實現了各類常見的網絡協議,入TCP/IPIPX等。
11lib
    此目錄包含了核心的庫代碼。實現了一個標準C庫的通用子集,包括字符串和內存操做的函數(strlenmmcpy等)以及有關sprintfatoi系列函數。與arch/lib下的代碼不一樣,這裏的庫代碼都是C編寫的,在內核新的移植版本中能夠直接使用。與處理器結構相關庫代碼被放在arch/mm中。
12block
   
塊設備驅動包括IDE(在ide.c中)驅動。塊設備是以數據塊方式接收和發送的數據的設備。最初block層代碼一部分位於drivers目錄,一部分位於fs目錄。從2.6.15開始,block層的核心代碼就被提取出來放在頂層的block目錄中。若是你想尋找這些可包含文件系統的設備的初始化過程則應該在drivers/block/genhd.c中的device_setup()。當安裝一個nfs文件系統時不但要初始化硬盤還需初始化網絡。塊設備包括IDESCSI設備。

13firmware

fireware中包含了讓計算機讀取和理解從設備發來的信號的代碼。舉例來講,一個攝像頭管理它本身的硬件,但計算機必須瞭解攝像頭給計算機發送的信號。Linux系統會使用vicam固件(firmware)來理解攝像頭的通信。不然,沒有了固件,Linux系統將不知道如何處理攝像頭髮來的信息。另外,固件一樣有助於將Linux系統發送消息給該設備。這樣Linux系統能夠告訴攝像頭從新調整或關閉攝像頭。

13usr:

實現用於打包和壓縮的cpio等。這個文件夾中的代碼在內核編譯完成後建立這些文件。

14securtity:

這個目錄下包含了不一樣的Linux安全模型的代碼。它對計算機免於受到病毒和黑客的侵害很重要。不然,Linux系統可能會遭到損壞。

15crypto

內核自己所用的加密API,實現了經常使用的加密和散列算法,還有一些壓縮和CRC校驗算法。例:「sha1_generic.c」這個文件包含了SHA1加密算法的代碼。

16scripts:

該目錄下沒有內核代碼,只是包含了用來配置內核的腳本文件。當運行make menuconfig或者make xconfig之類的命令配置內核時,用戶就是和位於這個目錄下的腳本進行交互的。
17sound:

聲卡驅動以及其餘聲音相關的源碼。

18samples
一些內核編程的範例

19virt

此文件夾包含了虛擬化代碼,它容許用戶一次運行多個操做系統。經過虛擬化,客戶機操做系統就像任何其餘運行在Linux主機的應用程序同樣運行。

20tools

這個文件夾中包含了和內核交互的工具。

 

COPYING:許可和受權信息。Linux內核在GPLv2許可證下受權。該許可證授予任何人有權免費去使用、修改、分發和共享源代碼和編譯代碼。然而,沒有人能夠出售源代碼。

CREDITS : 貢獻者列表

Kbuild : 這是一個設置一些內核設定的腳本。打個比方,這個腳本設定一個ARCH變量,這是開發者想要生成的內核支持的處理器類型。

Kconfig: 這個腳本會在開發人員配置內核的時候用到

MAINTAINERS : 這是一個目前維護者列表,他們的電子郵件地址,主頁,和他們負責開發和維護的內核的特定部分或文件。當一個開發者在內核中發現一個問題,並但願可以報告給可以處理這個問題的維護者時,這是是頗有用的。

Makefile :這個腳本是編譯內核的主要文件。這個文件將編譯參數和編譯所需的文件和必要的信息傳給編譯器。

README : 這個文檔提供給開發者想要知道的如何編譯內核的信息。

REPORTING-BUGS : 這個文檔提供如何報告問題的信息。

內核的代碼是以「.c」或「.h」爲擴展名的文件。 「.c」的擴展名代表內核是用衆多的編程語言之一的C語言寫的, 「h」的文件是頭文件,而他們也是用C寫成。頭文件包含了許多「.c」文件須要使用的代碼,由於他們能夠引入已有的代碼而不是從新編寫代碼,這節省了程序員的時間。不然,一組執行相同的動做的代碼,將存在許多或所有都是「c」文件。這也會消耗和浪費硬盤空間。(譯註:頭文件不只僅可節省重複編碼,並且代碼複用也會下降代碼錯誤的概率)

相關文章
相關標籤/搜索