Linux代码结构学习
文章目录
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格式的文档代码,该文档用于早期的用户空间。