内核基本知识:
- 内核结构
- 补丁
- 内核编译
内核代码树介绍:
linux-2.6.29
|-arch : 包含和硬件体系结构相关的代码
|-block : 硬盘调度算法,不是驱动
|-firmware : 固件,如BOIS
|-Documentation: 标准官方文档
|-dirver : linux设备驱动
|-fs : 内核所支持的文件体系
|-include :头文件。linux/module.h linux/init.h 常用库。
|-init :库文件代码,C库函数在内核中的实现。
init/main.c ->start_kernel->内核执行第一条代码
|-ipc : 进程件通信
|-mm :内存管理
|-kernel : 内核核心部分,包括进程调度等
|-net :网络协议
|-sound : 所有音频相关
内核补丁:
补丁基于某个版本内核生成的,用于升级旧版本内核。
- 对应版本的补丁只能用于对应版本的内核
- 如果在已打补丁的内核中再打补丁,需要先卸载原先补丁。
制作补丁:
1
diff -Nur linux-2.6.30/ linux-2.6.30.1/ > linux-2.6.30.1.patch
打补丁:
1
2
3
4
5cd linux-2.6.30 //!!注意在原文件夹的目录中打补丁
patch -p1 < ../linux-2.6.30.1.patch //-p1是忽略一级目录
##单文件
patch vimrc < vim.1.patch // 即可撤销补丁
1
2cd linux-2.6.30 //!!注意在原文件夹的目录中打补丁
patch -R < ../linux-2.6.30.1.patch //撤销补丁
内核与模块编译
1 | make = make bzImage + make modules |
- 如果只编译内核, 即只编译配置文件中的 -y 选项, 可以直接用命令
make bzImage
- 如果只编译模块, 即只编译配置文件中的 -m 选项, 可以直接使用
make modules
只是想单独编译一个模块, 则可以使用:
1 | make -C /root/linux-2.6.29/xxx/ M=`pwd` module |
//-C
指定内核makefile的路径,可以使用相对路径。
//-M
指定要编译的文件的路径,同样使用相对路径。
编译生成的模块可以指定存放目录
1 | make -C /root/linux-2.6.29/xxx M=`pwd` modules_install INSTALL_MOD_PATH=/modules/ |