1.3. 复制源码树和生成一个补丁
这一步是为了对内核源码使用一个补丁。如果不需要这个补丁,直接跳到“配置内核选项”。
高级用户
有些工具,例如“quilt”,允许您避免复制源码树。对应高级用户,这样的工具可以使您在下面的步骤中节省很多时间。
复制源码树是为了保留修改前的原始代码。
export arch=x86_64 # replace x86_64 with your arch
export ver=3.1 # replace 3.1 with your kernel version
export fedver=fc16 # replace fc16 with your Fedora version
cp -r ~/rpmbuild/BUILD/kernel-$ver.$fedver/linux-$ver.$arch ~/rpmbuild/BUILD/kernel-$ver.$fedver.orig
cp -al ~/rpmbuild/BUILD/kernel-$ver.$fedver.orig ~/rpmbuild/BUILD/kernel-$ver.$fedver.new
第二个cp命令在.orig和.new树之间建立了硬连接,这样可以使diff运行的更快。大部分文本编辑者都知道怎样正确的破坏硬连接来避免问题。
在FC14上使用vim时,它会把上面的硬连接当做硬连接来处理,从而导致上面的技术失败。有必要将原始代码完全复制到.new目录。但是这样将使用双倍的空间。
直接更改.new源码树中的代码,或者复制到一个副本文件。这个文件可以来自于一个要求测试的开发者,上游内核源码,或者另一个发行版本。
修改.new源码树之后,生成一个补丁。要生成一个补丁,用下面命令对整个.new和.orig源码树运行diff。
cd ~/rpmbuild/BUILD
diff -uNrp kernel-$ver.$fedver.orig kernel-$ver.$fedver.new > ../SOURCES/linux-$ver.$fedver-mynewpatch.patch
用新补丁的名字替换'linux-$ver.$fedver-mynewpatch.patch' 。在FC14上必须把前面的补丁名字复制到~/rpmbuild/SOURCES中的linux-$ver.$fedver-mynewpatch.patch,以便rpmbuild找到它。
更多关于补丁的信息请看diff(1)和patch(1)的man手册
1.4. 配置内核选项
这一步是为了修改内核的选项。这一步是可选的。如果没有需要修改的配置,可以跳到“准备建立文件”。
小变化
如果您只是想要做一点小的修改,可以在config-local文件中根据需要直接设置选项。这样会找到并覆盖其余的config-*文件,避免很多不必要的工作。如果您使用config-local就可以跳过下面的步骤。
1. 改变内核源码树目录:
cd ~/rpmbuild/BUILD/kernel-$ver.$fedver/linux-$ver.$arch/
如果您只是对默认的fedora内核做小的修改,跳到第四步,从两个配置工作中选择一个,将这些修改编辑到默认的配置文件。
2. 从~/rpmbuild/BUILD/kernel-$ver.$fedver/linux-$ver.$arch/configs选择所需的配置文件。复制所需的config文件到~/rpmbuild/BUILD/kernel-$ver.$fedver/linux-$ver.$arch/.config:
cp configs/<desired-config-file> .config
3. 运行下面命令:
make oldconfig
4. 运行下面命令,在文本界面上选择并保持所需的内核选项
make menuconfig
n 运行图形界面的话用这个命令:
make xconfig
5. 在顶层config文件中添加一行,该文件包含了内核支持的硬件架构(uname -i的输出)。这一行以#开头。例如,x86_64设备应该在顶层config文件中添加下面这行:
# x86_64
6. 复制config文件到~/rpmbuild/SOURCES/:
cp .config ~/rpmbuild/SOURCES/config-`uname -m`-generic
32-bit x86 内核
32-bit PAE内核使用config-i686-PAE配置文件。如果您正在建立一个PAE内核,需要复制您的config文件到~/rpmbuild/SOURCES/:
cp .config ~/rpmbuild/SOURCES/config-i686-PAE
如果您正在建立一个非PAE内核,需要复制您的config文件到:
cp .config ~/rpmbuild/SOURCES/config-x86-32-generic
再次鼓励使用config-local,除非您正在修改大量的配置。