PC Ubuntu下编译 Linux2.6 内核总结(2)

首先从pgp的服务器获取签名公匙, linux内核包的公匙编号是0x517D0F0E. 再利用sign文件来验证.bz2压缩包的签名. 如果输出中有类似gpg: Good signature from "Linux

Kernel Archives Verification Key " 的内容,

说明该包是有效的. 后面给出的警告信息可以忽略.

$ gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E

$ gpg --verify linux-2.6.17.13.tar.bz2.sign linux-2.6.17.13.tar.bz2

GPG签名只是保证镜像网站提供的压缩包和kernel.org所提供的是相同的, 如果你在kernel.org下载, 不需要验证签名.

3, 解压缩

解压缩之前, 有个问题值得思考: 要将压缩包解压到何处? 即要在哪个目录进行Linux内核源代码的编译?

内核源码树的

README

中有这样一段话:

Do NOT use the /usr/src/linux area! This area has a

(usually incomplete) set of kernel headers that are used by the library

header files. They should match the library, and not get messed

up by whatever the kernel-du-jour happens to be.

实际上, 在我的Ubuntu系统中, /usr/src/ 目录中最初是没有linux目录的. 你可以在/usr/src中新建一个目录,用内核版本命名, 比如/usr/src/linux-2.6.17.13. 这样, 即便之前在/usr/src中安装了linux的头文件,也不会对它们造成影响.

我采用的方法是: 在/usr/local/src/kernel目录中进行.

编译内核时候, 若在make 后添加 "O="将会使生成的目标文件(包括.config)被放置到指定的目录. 否则, 生成的目标文件默认地被放到内核源码目录. 我们就采用默认的方法. 这是安全的.

4, 打补丁

对于kernel.org中的内核, 我个人认为没必要下载patch, 再打补丁. 费那事干嘛, 直接下载bz2包不就行了. 特定的补丁只能针对紧随其前的一个版本. 比如你想从2.6.17.1升级到2.6.17.13. 你得打12次补丁, 忒麻烦了.

但是, 有时候需要对"官方内核"添加补丁, 以支持特定的系统. 比如ARMLinux, 它往往不是发布完整的内核,而是发布针对特定版本的补丁包. 这种情况下就要知道如何打补丁了. 方法很简单: 把补丁下载, 解压.

得到patch-. 将它放到解压后的内核目录树的父目录中(也就是补丁和内核目录在同一目录). 然后cd到内核目录树中运行:

$ patch -p1

配置内核

1, 前提: 构建编译环境

显然, 需要make, gcc等工具, 在Ubuntu中, 只需一条简单命令就可安装所有的源代码编译工具:

# apt-get install build-essential

当然, 如果你的内核是要安装到不同体系结构的目标系统中, 还需要构建cross编译环境.

2, 内核配置工具介绍

Linux提供了多种内核配置工具, 最基础的是 make config, 它列出每个编译选项, 而且是基于文本的, 一般不用它.

menuconfig (make menuconfig)

menuconfig是比较主流的配置工具, 它需要curse库的支持, 在Ubuntu中默认是没有的, 先安装它:

# apt-get install libncurses5-dev

xconfig (make xconfig)

xconfig基于X11, 使用qt库, 在Ubuntu中先安装qt库:

# apt-get install libqt3-headers libqt3-mt-dev

3, 内核配置相关

.config配置文件

在内核树的根目录中,有一个.config文件,它记录了内核的配置选项,可直接对它进行修改,再运行(若.config不存在,对内核进行配置后会生成它,这种情况下当然不能开始就运行oldconfig). 实际上, 如果你手头有合适的 .config 文件, 可以运行 make oldconfig 直接按 .config 的内容来配置

$ sudo make oldconfig

对内核的配置都是围绕 .config 来展开的. 即便开始 .config 文件不存在, 进行配置后会创造它.

其实可以直接在menuconfig中加载已有的配置文件, 不要将它改名为.config. 否则完成配置, 退出menuconfig时会提示你运行 make mrproper. 上面提到的方法只是比较适合于oldconfig!

make相关命令

$ make oldconfig : 基于已有的.config进行配置, 若有新的符号, 它将询问用户.

$ make defconfig : 按默认选项对内核进行配置(386的默认配置是Linus做的).$ make allnoconfig : 除必须的选项外, 其它选项一律不选. (常用于嵌入式系统).

$ make clean : 删除生成的目标文件, 往往用它来实现对驱动的重新编译.

$ make mrproper : 删除包括.config在内的生成的目标文件.

可以查看内核源码树中的README和Makefile了解上述配置方法.

4, 开始配置

1, 修改Makefile (可选)

在Makefile中, 有这样的内容:

VERSION = 2PATCHLEVEL = 6SUBLEVEL = 16EXTRAVERSION = .20NAME=Sliding Snow Leopard

我们在编译内核之前, 可以先修改Makefile中的版本信息(一般是修改EXTRAVERSION, 比如EXTRAVERSION =-zp). 这样就能将自己编译的内核同别人编译的相同版本内核区分开来. 修改, 编译之后, 可使用 $ uname -r 查看内核版本信息.

但实际上, 从2.6.8的版本起可在内核版本号后面添加个性化字符串. 所以也就没有必要修改Makefile了: () Local version - append to kernel release

如果你即修改了Makefile中的EXTRAVERSION, 又在配置时定义了local version. 那么local version所定义的字符串将位于末尾, 紧跟在EXTRAVERSION的值之后.

另外, 如果要用到ccache, 也需要修改Makefile. 参考后面的内容!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpyfx.html