Linux用來支持各種體系結構的源代碼包含大約4500個C語言程序,存放在270個左右的子目錄下,總共大約包含200萬行代碼,大概占用58MB磁盤空間。
源代碼所有在目錄:/usr/src/linux (大部分linux發行版本中)
init 內核初始化代碼
kernel 內核核心部分:進程、定時、程序執行、信號、模塊。。。
mm 內存處理
arch 平台相關代碼
i386 IBM的PC體系結構
kernel 內核核心部分
mm 內存管理
math-emu 浮點單元軟件仿真
lib 硬件相關工具函數
boot 引導程序
compressed 壓縮內核處理
tools 生成壓縮內核映像的程序
alpha 康柏的Alpha體系結構
s390 IBM的System/390體系結構
sparc Sun的SPARC體系結構
sparc64 Sun的Ultra-SPARC體系結構
mips SGI的MIPS體系結構
ppc Motorola-IBM的基於PowerPC的體系結構
m68k Motorola的基於MC680x0的體系結構
arm 基於ARM處理器的體系結構
fs 文件系統
proc /proc虛擬文件系統
devpts /dev/pts虛擬文件系統
ext2 Linux本地的Ext2文件系統
isofs ISO9660文件系統(CD-ROM)
nfs 網絡文件系統(NFS)
nfsd 集成的網絡文件系統服務器
fat 基於FAT的文件系統的通用代碼
msdos 微軟的MS-DOS文件系統
vfat 微軟的Windows文件系統(VFAT)
nls 本地語言支持
ntfs 微軟的Windows
NT文件系統
smbfs 微軟的Windows服務器消息塊(SMB)文件系統
umsdos UMSDOS文件系統
minix MINIX文件系統
hpfs IBM的OS/2文件系統
sysv SystemV、SCO、Xenix、Coherent和Version7文件系統
ncpfs Novell的Netware核心協議(NCP0
ufs UnixBSD、SunOs、FreeBSD、NetBSD、OpenBSD和NeXTStep文件系統
affs Amiga的快速文件系統(FFS)
coda Coda網絡文件系統
hfs 蘋果的Macintosh文件系統
adfs Acorn磁盤填充文件系統
efs SGI IRIX的EFS文件系統
qnx4 QNX4 OS使用不的文件系統
romfs 只讀小文件系統
autofs 目錄自動裝載程序的支持
lockd 遠程文件鎖定的支持
Net 網絡代碼
Ipc System V的進程間通信
Drivers 設備驅動程序
block 塊設備驅動程序
paride 從並口訪問IDE設備的支持
scsi SCSI設備驅動程序
char 字符設備驅動程序
joystick 游戲桿
ftape 磁帶流設備
hfmodem 無線電設備
ip2 IntelliPort的多端口串行控制器
net 網卡設備
sound 音頻卡設備
video 視頻卡設備
cdrom 專用CD-ROM設備(除ATAPI和SCSI之外)
isd0n ISDN設備
apl000 富士的AP1000設備
macintosh 蘋果的Macintosh設備
sgi SGI的設備
fc4 光纖設備
acorn Acorn的設備
misc 雜項設備
pnp 即插即用的支持
usb 通用串行總線(USB)的支持
pci PCI總線的支持
sbus Sun的SPARC
SBus的支持
nubus 蘋果的Macintosh
Nubus的支持
zorro Amiga的Zorro總線的支持
dio 惠普的HP300
DIO總線的支持
tc Sun的TurboChannel支持(尚未完成)
Lib 通用內核函數
Include 頭文件(.h)
linux 內核核心部分
lockd 遠程文件加鎖
nfsd 集成的網絡文件服務器
sunrpc Sun的遠程過程調用
byteorder 字節交換函數
modules 模塊支持
asm-generic 平台無關低級頭文件
asm-i386 IBM的PC體系結構
asm-alpha 康柏的Alpha體系結構
asm-mips SGI的MIPS體系結構
asm-m68k Motorola-IBM的基於PowerPC的體系結構
asm-ppc Motorola-IBM的PowerPC體系結構
asm-s390 IBM的System/390體系結構
asm-sparc Sun的SPARC體系結構
asm-sparc64 Sun的Ultra-SPARC體系結構
asm-arm 基於ARM處理器的體系結構
net 網絡
scsi SCSI支持
video 視頻卡支持
config 定義內核配置的宏所在的頭文件
scripts 生成內核映像的外部程序
Documentation有關內核各個部分的通用解釋和注釋的文本文件
by huihoo.com Allen)
:《UNDERSTANDING THE LINUX KERNEL》 DANIEL P.BOVET & MARCO CESATI 著
-------------------------------------------------
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()函數初始化內核。我個人認為可以按照這個順序進行閱讀(最好首先看完主要的數據結構定義等),對於各模塊代碼粗略看看就可以了,重點應該放在你所要研究的那個方向。要知道,一個人掌握全部Linux內核源代碼是很困難的!