在X86, Ubuntu 上编译Linux2.6内核,总结如下:
基础知识
在介绍如何编译内核之前, 需要对内核相关概念有一定的了解. 关于Linux kernel的介绍浩如烟海, 这里只介绍系统中相关的目录, 文件及命令.
/boot
/boot/vmlinuz- : 用于启动的压缩内核镜像, 它也就是/arch//boot中的压缩镜像.
/boot/system.map- : 存储内核符号地址.
/boot/initrd.img- : 初始化RAM硬盘时, 用来存储挂载根文件系统所需的模块.
/boot/grub/menu.lst : grub的配置文件. (不同的发行版中它可能位于不同位置.
/lib/modules
该目录包含了内核模块及其他文件. 注意, modules中一般会有多个目录: 系统自带的内核模块在这里, 你编译自己的内核模块后, 它们也会被安装到这里. 不同的目录由内核版本号来区分. 即modules里目录的名称是内核版本号. (使用$ uname -r 可知当前系统内核所用的模块位于哪个目录).
/lib/modules//build
储存为该版本的内核编译新模块所需的文件. 包括Makefile, .config, module.symVers(模块符号信息), 内核头文件(位于include/, include/asm/中)
/lib/modules//kernel
储存内核目标文件(以.ko为后缀). 它的目录组织和内核源代码中kernel的目录组织相同.
/lib/modules//中:
modules.alias : 模块别名定义. 模块加载工具使用它来加载相应的模块.
modules.dep : 定义了模块间的依赖关系.
modules.symbols : 指定符号属于哪个模块.
这些文件都是文本文件, 可以查看它们.
$ uname -r
uname(1)被用来查看系统信息, 这里对我们有用的是它的"-r"选项, 它显示内核版本信息.
下载内核, 验证签名, 解压缩
到
下载最新版本的2.6内核. 速度还比较快. 这里以linux-2.6.17.13为例:
1, 下载内核压缩包
bzip2格式比gzip压缩效率更高, 一般就下载bz2的压缩包. 下载了内核压缩包之后, 还可下载对应的sign文件. 它被用来验证内核压缩文档的openPGP签名. 详细信息可参考
这里
.