内核打补丁

内核打补丁

如果需要的某些特性并没有被现有内核支持,则需要去获取相关的补丁。比如,为了使内核支持图形化的启动界面,我们可能要用到bootsplash工具。!bootsplash项目 http://www.bootsplash.org/ 上提供了针对很多内核版本的补丁供下载。

  • 通过打补丁升级内核

通过打补丁的方法升级内核,可以不用下载整个内核源码。针对每个内核版本的补丁文件可以在 ftp.kernel.org 上面获得,问题是我们应该选择哪个补丁文件,一个补丁文件到底应该打在哪个版本的内核上。下面小节介绍了如何应用和卸载补丁,详细的内容请查看内核文档Document/applying-patchs.txt
   
   1. 什么是补丁
    一个补丁文件就是一个文本文档,由diff工具创建,它存放了两个不同版本的源码之间的差异
   2. 如何打补丁与卸载补丁
    patch工具可以用于打补丁和卸载补丁。内核的补丁是相对于保存内核源码的父目录生成的,这就意味着,补丁文件中的文件路径包含了内核源码存放目录的名字(比如,linux-2.6.29,或者像是"/a"和"/b"之类的其它名字)。但是很可能我们本地系统上的内核源码存放目录和补丁中不匹配,为了解决这个问题,我们需要切换到自己的源码目录,并且在执行patch命令的时候加上"-p1"参数,这样就会去掉补丁文件中路径的第一个分量,比如:

# cd /usr/src/linux
# patch -p1 < ../patch.x.y.z

为了卸载一个以前打上的补丁,需要使用"-R"参数。

# patch -R -p1 < ../patch.x.y.z

3. 如何利用补丁升级内核
   考虑这样的几个场景:将内核从2.6.23升级到2.6.24;将内核从2.6.23.8升级到2.6.24.6;将内核从2.6.23.6升级到2.6.23.8。不管处于哪种场景,打补丁时要谨记的一点是:内核的补丁文件都是以2.6.x(基础稳定版basic stable, 2.6.x.y是稳定版 stable)为基础发布的。下面对这3种场景分别进行介绍

(1)将内核从2.6.23升级到2.6.24。这种情况,可直接使用补丁文件patch-2.6.24

# patch -p1 < ../patch-2.6.24

因为下载得到的补丁文件通常是使用gzip或者bzip2压缩的格式,所以使用前还要将其解压生成patch-x.y文件。不过,我们也可以不解压,使用下面的命令形式:

# bzcat ../patch-2.6.24.bz2 | patch -p1(bz2格式)
or # zcat ../patch-2.6.24.gz | patch -p1(gz格式)

(2)将内核从2.6.23.8升级到2.6.24.6。这种情况下,我们需要将升级的过程分解为几个步骤,首先将2.6.23.8退回到2.6.23,然后再升级到2.6.24,最后升级到2.6.24.6。

# bzcat ../patch-2.6.23.8.bz2 | patch -p1 -R
# bzcat ../patch-2.6.24.bz2 | patch -p1
# bzcat ../patch-2.6.24.6.bz2 | patch -p1

(3)将内核从2.6.23.6升级到2.6.23.8。在这种情况下,我们同样需要将升级过程分解,首先将2.6.23.6退回到2.6.23,然后再升级到2.6.23.8。

# bzcat ../patch-2.6.23.6.bz2 | patch -p1 -R
# bzcat ../patch-2.6.23.8.bz2 | patch -p1

除了patch之外,也有其它的用来打补丁的工具,比如interdiff、ketchup等。

你可能感兴趣的:(Linux,C/CPP)