Linux內核結構
?
1、內核的子系統(tǒng)
(1) 系統(tǒng)調用接口SCI(System Call Interface):SCI層為用戶空間提供了一套標準的系統(tǒng)調用函數(shù)來訪問Linux內核,搭起了用戶空間到內核空間的橋梁。
(2) 進程管理PM(Process Management):進程作為資源分配的基本單位而存在;進程調度。
(3) 虛擬文件系統(tǒng)VFS(Virtual File System):它是一種用于網絡環(huán)境的分布式文件系統(tǒng),是允許和操作系統(tǒng)使用不同的文件系統(tǒng)實現(xiàn)的接口。
(4) 內存管理MM(Memory Management):段轉換過程是由邏輯地址(或稱為虛擬地址)轉換為線性地址;頁轉換過程則是將線性地址轉換為物理地址。
(5) 網絡協(xié)議棧(Network Stack)
(6) Arch:CPU。
(7) 設備驅動DD(Device Drivers):是連接硬件和內核之間的橋梁。
?
2、內核目錄
arch
特定體系結構相關代碼,內核所支持的每種架構的 CPU 的相 關目錄集合,在 arch 目錄下,有支持 arm 的目錄、支持 x86 的目錄和支持 mips 的目錄等,如: arch/arm、 arch/x86 和 arch/mips 等。
block
塊設備通用函數(shù)
crypto
常用加密和散列算法(如 AES、 SHA 等),還有一些壓縮和 CRC 校驗算法
Documentation
內核源碼說明文檔目錄
drivers
設備驅動程序目錄集合, drivers 里的某一子目錄對應著內核中 的某一種驅動程序,如: drivers/char 為字符設備驅動程序、 drivers/block 為塊設備驅動程序、 drivers/net 為網絡設備驅動 程序、 drivers/usb 為 usb 總線設備驅動程序、 drivers/i2c 為 i2c 總線設備驅動程序等。
fs
Linux 支持的文件系統(tǒng)的代碼(包括虛擬文件系統(tǒng) VFS),每個 子目錄對應一種文件系統(tǒng),比如 fs/jffs2/、 fs/cramfs、 fs/ext2/。
include
內核的頭文件目錄,如:基本的頭文件(存放在 include/linux 目錄下)、各種驅動或功能部件的頭文件(比如 include/media、 include/video/、 include/net)。
init
初始化代碼而不是內核的引導代碼。
ipc
包含了進程間的通信
kernel
核心代碼,此目錄下的文件實現(xiàn)了大多數(shù)linux系統(tǒng)的內核函數(shù),其中最重要的文件當屬sched.c;和處理器的相關代碼放在 arch/*/kernel 目錄下
lib
內核會用的庫函數(shù),比cstring.c等
mm
內核的內存管理相關的代碼,如頁式存儲管理內存的分配和釋放等
net
核心的網絡所支持得部分代碼,其中每個子目錄對應于網絡的一個方面
scripts
用于配置核心的腳本文件
security
安全、密匙方面的代碼
sound
音頻設備
?
3、管理腳本
(1)頂層Makefile:所有源代碼子目錄Makefile文件的核心,從總體上控制著內核的編譯、連接。
(2)子目錄Makefile:被上一層目錄里的Makefile調用來編譯當前目錄的文件。
(3).config:配置文件,在配置內核時生成。所有Makefile文件(包括頂層和各級子目錄)都是根據.config來決定使用哪些文件。
(4)Kconfig:一個文本形式的文件,其中主要作用是在內核配置(用makemenuconfig配置內核)時,作為配置選項。
?