现代操作系统一般由进程管理、内存管理、文件系统、驱动和网络等组成,Linux内核源码的各个目录大致与此相对应
其目录组成如下:
arch
包括了所有和体系结构相关的核心代码。里面的每一个目录都代表一种Linux支持的内核架构,例如arm就是arm架构相关的代码,arm目录向下包括很多处理器平台,也包括了启动代码boot、架构相关配置文件configs、内核相关文件kernel、内存管理mm和库lib等。
block
提供块设备操作的一些基本接口。
certs
认证相关。
crypto
常用加密和散列算法(如AES,SHA等),还有一些压缩和CRC校验算法。
Documentation
目录下基本都是txt文档,对每个目录和模块的详细说明。
drivers 目录都是系统的设备驱动程序。
accessibility --------- 可访问设备,目前里面包括盲人设备
acpi -------------------- 高级配置和电源管理接口
amba ------------------ ARM研发的AMBA片上总线相关
android --------------- Android平台支持的设备
ata --------------------- 硬盘接口技术Advanced Technology Attachment相关驱动
atm -------------------- 异步传输模式设备驱动
auxdisplay ----------- 辅助显示设备驱动
base
bcma ------------------ Broadcom基于amba总线驱动上开发的
block ------------------ 块设备驱动
bluetooth ------------ 蓝牙设备驱动
bus ------------------
cdrom ---------------- CDROM设备驱动
char ------------------ 字符设备驱动
clk --------------------- 时钟驱动框架,与平台相关
clocksource --------- 时钟源设备驱动
connector ----------- 内核空间和用户空间通信的新机制连接器
cpufreq -------------- cpu动态变频
cpuidle --------------
crypto ---------------- 加解密设备驱动
dax ------------------- 直接访问,后面的X只是为了看起来酷,对于新兴的NVDIMM设备,可直接访问此设备上的文件系统
dca ------------------- 直接缓存访问??
devfreq -------------- 设备相关的频率调节
dio -------------------- dio设备驱动
dma ------------------ dma设备驱动
dma-buf ------------- 提供DMA缓存的设备驱动
edac ------------------ 错误检测和纠正设备驱动
eisa -------------------
extcon ---------------- 外部连接器
firewire --------------- IEEE1394 firewire设备驱动
firmware -------------
fmc -------------------- FMC连接器总线驱动
fpga ------------------- FPGA框架驱动
gpio ------------------- GPIO驱动,与处理器相关
gpu -------------------- 包括DRM图形渲染架构,访问图形界面的DMA引擎,IMX的IPU图像处理单元等
hid ---------------------- 人机交互设备驱动
hsi ---------------------- 高速同步串口接口
hv ----------------------- 微软的虚拟化技术驱动
hwmon ----------------- 硬件监控芯片驱动,监控类传感器的芯片驱动
hwspinlock ------------ 硬件自旋锁框架接口
hwtracing -------------- 硬件跟踪调试驱动
i2c ----------------------- i2c子系统总线驱动
ide ----------------------- 管理ATA/IDE和ATAPI单元,主要还是硬盘驱动IDE和CD-ROM驱动ATAPI
idle ---------------------- Intel处理器的idle处理驱动
iio ----------------------- 工业I/O子系统,包括各种使用不同物理接口(i2c, spi, etc)传感器的驱动
infiniband ------------- 支持多并发链接的”转换线缆”技术的硬件设备驱动
input ------------------- input设备子系统,包括各种输入设备的驱动,键盘、混合设备、鼠标、触摸屏、游戏接口、游戏操作杆、触控rmi4、触摸面板、串口IO输入设备
firmware -------------- 硬件厂商提供的内核固件,由内核驱动调用。
fs
存放Linux系统支持的文件系统代码。每个子目录对应一个文件系统,例如ext4文件系统对应就是ext4子目录。
include
目录包括编译核心所需要的大部分头文件,例如与平台相关的头文件在/include/linux子目录下,与模块相关的,例如与acpi相关的存放在/include/acpi。
init
目录包含核心初始化代码(不是系统的引导代码),这里是研究核心如何工作的好起点。
ipc
包含核心进程间的通信代码。
kernel
内核管理的核心代码。实现了大多数Linux系统的内核函数,其中最重要的为sched子目录下的代码。与处理器相关的代码都放在/arch/*/kernel目录下。
lib
包括核心的库代码。与处理器相关的库代码都放在/arch/*/lib目录下。
mm
包含独立于cpu体系结构的内存管理代码,如页式存储管理内存的分配和释放等。与具体硬件体系结构相关的内存管理代码存放在/arch/*/mm目录下。
net
包含网络部分代码,实现了各种常见的网络协议,每个子目录对应于网络的一个方面。
samples
针对各个模块的实例代码。
scripts
用于配置核心的脚本文件。
security
支持安全操作系统相关代码。包括SELinux、Apparmor、Smack和TOMOYO Linux安全模块。
sound
ALSA,OSS音频设备的驱动核心代码和常用设备驱动。
tools
内核使用的相关工具代码。
usr
实现了用于打包和压缩的cpio等。
virt
内核虚拟化相关的代码。
COPYING CREDITS Kbuild Kconfig MAINTAINERS Makefile README