全部博文(534)
分类: LINUX
2007-09-28 17:21:54
给内核打补丁
给内核打补丁和给普通文件打补丁没有什么不同,关键是要弄清楚那个补丁才是你需要的。
linux 内核有两种补丁 :
1、增量型补丁 :表示这个补丁是在前一补丁版上生成的,例如 patch-
2、差分型补丁:表示这个补丁是对上一个 base version 的基础上生成的,例如 2.6.20.6 是在 2.6.20 的基础上生成的,而不是在 2.6.20.5 基础杀功能生成的。
2、如何区分补丁的类型
这主要通过查看补丁文件的 Makefile 就知道了。
还是以 patch-2.4.9 为例
QUOTE:
diff -u --recursive --new-file v
--- v2.4.8/linux/Makefile Sun Aug 12 13:27:58 2001
+++ linux/Makefile Thu Aug 16 11:12:49 2001
@@ -1,6 +1,6 @@
VERSION = 2
PATCHLEVEL = 4
-SUBLEVEL = 8
+SUBLEVEL = 9
EXTRAVERSION =
可以看到 EXTRAVERSION 从 8 修改为 9 ,也就是说它要求当前内核的 EXTRAVERSION 必须是 8 ,完整版本是
下面是一个”差分型“的补丁的例子
QUOTE:
diff --git a/Makefile b/Makefile
index e44ff6b..50d6d02 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 35
-EXTRAVERSION =
+EXTRAVERSION = .3
可以看到它要求当前内核的 EXTRAVERSION 必须是空,也就是
所以如果你当前的内核版本是 2.4.35.1 ,则必须先用 patch -R < patch-2.4.35.1 退回到 2.4.35 版本,然后再 patch < 2.4.
3、常用的 patch 模式
a)从 2.x.y → 2.x.y+1 : 直接升级
b)从 2.x.y.z → 2.x.y+1 :先用 patch -R 退回到 2.x.y 再升级到 2.x.y+1
c)从 2.x.y → 2.x.y+1.z :先升级到 2.x.y+1 ,再直接升级到 2.x.y+1.z
d)从 2.x.y.z → 2.x.y.z+1 :先用 patch -R 退回到 2.x.y 再升级到 2.x.y.z+1
4、内核打补丁实例
下面以从 2.
需要下载的有
1、linux-2.6.10
2、patch-2.6.11
3、patch-2.6.12
4、patch-2.6.12.6
CODE:
[root@mail linux-
/usr/src/kernels/linux-2.6.10
[root@mail linux-2.6.10]#
[root@mail linux-2.6.10]# ll -h patch*
-rw-r--r-- 1 root root
-rw-r--r-- 1 root root
-rw-r--r-- 1 root root 50K Sep 27 22:31 patch-2.6.12.6
[root@mail linux-2.6.10]#
[root@mail linux-2.6.10]# head -n5 Makefile
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 10
EXTRAVERSION =
NAME=Woozy Numbat
[root@mail linux-2.6.10]#
CODE:
[root@mail linux-
diff -Nru a/CREDITS b/CREDITS
--- a/CREDITS 2005-03-01 23:39:08 -08:00
+++ b/CREDITS 2005-03-01 23:39:08 -08:00
[root@mail linux-2.6.10]# patch -s -p1 --dry-run < patch-2.6.11
[root@mail linux-2.6.10]#
[root@mail linux-2.6.10]# patch -s -p1 < patch-2.6.11
[root@mail linux-2.6.10]#
[root@mail linux-2.6.10]# head -n5 Makefile
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 11
EXTRAVERSION =
NAME=Woozy Numbat
[root@mail linux-2.6.10]#
CODE:
[root@mail linux-
[root@mail linux-2.6.10]#
[root@mail linux-2.6.10]# patch -s -p1 < patch-2.6.12
[root@mail linux-2.6.10]#
[root@mail linux-2.6.10]# head -5 Makefile
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 12
EXTRAVERSION =
NAME=Woozy Numbat
[root@mail linux-2.6.10]#
CODE:
[root@mail linux-
[root@mail linux-2.6.10]#
[root@mail linux-2.6.10]# patch -s -p1 < patch-2.6.12.6
[root@mail linux-2.6.10]#
[root@mail linux-2.6.10]# head -n5 Makefile
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 12
EXTRAVERSION = .6
NAME=Woozy Numbat
[root@mail linux-2.6.10]#
CODE:
[root@mail kernels]# mv linux-
[root@mail kernels]# ll -d linux-2.6.12.6
drwxrwxr-x 18 bob bob 4096 Sep 27 22:31 linux-2.6.12.6
[root@mail kernels]#
打好补丁不意味着就 ok 了,你还需要重新编译内核,也就是前面讲的一堆东西