Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3402383
  • 博文数量: 534
  • 博客积分: 11595
  • 博客等级: 上将
  • 技术积分: 5785
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(534)

文章存档

2015年(4)

2014年(27)

2013年(15)

2012年(38)

2011年(36)

2010年(85)

2009年(63)

2008年(142)

2007年(124)

分类: LINUX

2007-09-28 17:21:54

给内核打补丁

给内核打补丁和给普通文件打补丁没有什么不同,关键是要弄清楚那个补丁才是你需要的。

linux
内核有两种补丁

        1
增量型补丁 :表示这个补丁是在前一补丁版上生成的,例如 patch-2.4.9 是在 2.4.8 内核的基础上生成的。
        
        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 v2.4.8/linux/Makefile linux/Makefile
--- 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 ,完整版本是 2.4.8 ,该补丁将升级到 2.4.9

下面是一个差分型的补丁的例子

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 ,补丁将升级到 2.4.35.3

所以如果你当前的内核版本是 2.4.35.1 ,则必须先用 patch -R < patch-2.4.35.1 退回到 2.4.35 版本,然后再 patch < 2.4.35.3

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.6.10 级到 2.6.12.6 为例说明

需要下载的有



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-2.6.10]# pwd
/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 22M Sep 27 22:31 patch-2.6.11
-rw-r--r--  1 root root 24M Sep 27 22:31 patch-2.6.12
-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-2.6.10]# head -3 patch-2.6.11
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-2.6.10]# patch -s -p1 --dry-run < patch-2.6.12
[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-2.6.10]# patch -s -p1 --dry-run < patch-2.6.12.6
[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-2.6.10 linux-2.6.12.6
[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 了,你还需要重新编译内核,也就是前面讲的一堆东西

 

阅读(2106) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~