内核源码
获取源码
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
源码树
目录 | 描述 |
---|---|
arch | 特定体系结构源码 |
block | 块设备I/O层 |
crypto | 加密API |
Documentation | 源码文档 |
drivers | 设备驱动程序 |
firmware | 某些驱动需要的设备固件 |
fs | VFS和各种文件系统 |
include | 头文件 |
init | 内核引导和初始化 |
ipc | 进程间通信 |
kernel | 核心子系统 |
lib | 通用内核函数 |
mm | 内存管理子系统和VM |
net | 网络子系统 |
samples | 实例代码 |
scripts | 编译依赖的脚本 |
security | 安全模块 |
sound | 语音子系统 |
usr | 早期用户空间代码 |
tools | 工具 |
virt | 虚拟化基础结构 |
实践
- 查看COPYING,CREDITS,MAINTAINERS,Makefile
- 查看tools下的工具有哪些
- usr有什么内容
- arch 包含什么
- drivers里面包含哪些
- kernel 包含哪些,进程调度
总结
文件系统、驱动程序、进程间通信、内存管理、网络、安全模块、设备I/O、内核引导和kernel
编译
编译配置
make config 逐一遍历所有配置
make menuconfig或make gconfig 图形工具
make defconfig 使用默认配置
make oldconfig
实践
- 查看.config内容,理解.config
- zcat /proc/config.gz > ./config
- make > /dev/null
安装新内核
make modules_install
内核开发特点
- 不能访问C库和标准C头文件
- 必须使用GNU C
- 没有内存保护机制
- 难以执行浮点运算
- 每个进程只有很小的定长堆栈
- 时刻注意同步和并发