Linux代码结构

准备学习Linux,看源码是少不了的,先对Linux源码有个大体认识(基于linux4.13)

代码主要文件解析

Makefile

这是整个源码的Makefile,里面定义了一系列的变量和规则,比如默认的gcc编译flag。

Documentation/

项目文档,里面包含了很多关于配置内核、与ramdisk运行等有用的信息。这里面没有不同配置项的帮助信息,这些信息可以在相关子目录的 Kconfig 文件中查看。

arch/

体系结构相关代码都在这里,还有一部分在include/arch-generic中。每个体系结构在这个目录下都有一个子目录。比如基于x86体系的代码都在 arch/x86 下。另外,这个目录下还包含低级别的内存管理,中断处理,早期初始化,汇编例程等信息。

crypto/

内核使用的加密API代码。

drivers/

所有设备相关的信息都在这个目录下。包括视频设备,网卡设备,低级别的SCSI设备。比如网络设备一般是在 drivers/net 目录下。

fs/

通用的文件系统与其它类型的文件系统代码都在这里。现在的操作系统的根文件系统一般为ext4格式,它的代码在 fs/ext4

include/

所有.c文件中包含的头文件都定义在这个目录下。

init/

这个目录包含了内核启动的入口文件 main.c ,版本信息文件 version.c 和早期用户空间相关的代码,早期空间代码提供内核出现时的功能,它不需要在内核中进行运行。

ipc/

进程间通信相关代码,包含共享内存,信号量等信息。

kernel/

内核级别代码,上层的系统调用代码在这里,还有关于 printk() 代码,调度,信号量处理的代码。

lib/

内核所有使用的库都在这里。常见的字符串运算,调试库,命令行解析代码等。

mm/

高级别的内存管理代码。虚拟内存是通过这些库与低级别的体系结构代码(在 arch//mm )一同实现的。这里完成了早期引导内存管理,涉及文件的内存映射,页缓存的管理,内存分配和RAM中页面的交换。

net/

高级别的网络代码。与低级别的网络进行发包与收包交互。*net/core* 中包含其它网络协议使用的核心代码。net子目录就是特定的网络协议实现。

scripts/

这里面包含构建内核的脚本文件。

security/

不同Linux的安全模型代码。

sound/

声卡及相关代码在这里。

usr/

该目录包含构建根文件系统映射的cpio格式的文档代码,该文档用于早期的用户空间。