在kernel源码的README中有说明,如果你下载的PATCH是形如patch-2.4.X.gz的话使用gzip -cd patch-2.4.x.gz|patch -p0 如果是BZ格式的压缩包则使用bzip2 -dc patch-2.4.x.bz|patch -p0
但这样使用的话简直就是恶梦,你需要一个个的去替换文件,一般使用脚本来PATCH。这里假设你的源码目录为/src/linux,补丁下载到/src目录下,PATCH的步骤如下:
cd /src
linux/scripts/patch-kernel linux
脚本会自动找到补丁并应用,这里我解释一下:
linux/scripts/patch-kernel是个脚本文件,linux则是你的源码目录,如果要使这个命令完整的话后面还应该写上补丁所在的目录,这里因为补丁在当前目录下所以就省了。在补丁目录后面还可写上所要使用的补丁的最高版本号,比如你的源代码为2.4.10,而你下载了从2.4.10到2.4.20的所有软件包,并都放在同一目录下。在patch时你只想升级到2.4.19,不想使用2.4.20。命令格式就该象下面这个样子:
源码目录/scripts/patch-kernel 源码目录 补丁所在目录 2.4.19
这样的话版本号到2.4.19为止的所有补丁都会被使用,而2.4.20则被忽略不会被patch上。
如果不写上最高的版本号则目录下的所有补丁都会被使用。哇!写的手软,不过还没完,为了让大家不会再象我一样为打补丁而死大量的脑细胞,我接着写!!
上面的格式只能patch标准的补丁,而有时kernel会发布些pre或ac补丁,一般格式如下:
patch-2.4.x-pre*.gz
patch-2.4.x-ac*.gz
patch-2.4.x-pre*-ac*.gz
patch-2.4.x-pre*-acl*.gz
这时就要加参数才能patch了,对于ac补丁要这样使用
linux/scripts/patch-kernel linux -ac*
*为0到9的数字,比如patch-2.4.5-ac3.gz 这时的参数就为-ac3,也就是说参数同版本号的最后一个域相同。但有个例外象patch-2.4.x-pre*.gz这样的补丁就不能这样使用,我就是被这样的补丁搞的头大。最后分析脚本才发现,它居然没为pre设置参数,不知这是不是疏乎。这样的话你可以自己改脚本,不过我偷了点懒没改脚本,而是改了补丁的文件名:
mv patch-2.4.x-pre1.gz patch-2.4.x.gz
这样的话就可以使用了,而且并没有出现问题,可以正常编译。对于-pre*-ac*这样的补丁也是一样操作把其中的pre*删除再使用-ac*参数patch就可以了。
当然你也可以直接使用patch命令来安装,为了不回答那么多的问题,就不能使用patch -p0而要把命令改为如下形式:
gzip -cd patch-2.4.x-pre2-ac1.gz|patch -p1 -s -N -E -d 源码目录
阅读(527) | 评论(0) | 转发(0) |