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