分类: 嵌入式
2015-10-08 17:25:10
目的
本文是个简单的指导文件。教你如何为自己的内核打补丁。这是内核开发中最基本的工作。
patch(补丁)就是存放着不同版本之间差异的文件。通过打补丁的方法升级源代码,可以不用下载整个源代码
详细的打补丁的方法可以查看内核/Document/applying-patchs。txt
要求
你应该已经有了一个可以编译的内核。如果没有。可以到 下载。本文不是教你如何编译内核
内核应该是从kernelorg 下载的。第三方的内核(比如redhat)可能打补丁的时候会出问题。请参考特别发行版自己的打补丁文章。
原文地址:http://blog.csdn.net/hide1713/archive/2007/12/16/1941614.aspx
场景1
现在我的/usr/src/liunx-2.6.22.9 中存放了内核的源代码。我到了上,看到最新的stable版本是
2.6.23.11。 那么我如何升级呢?
首先,2.6.x.x这类版本号叫stable版。是经过测试证明稳定的。一般用户只都是用这个版本。其他还有rc,mm版本。这里先不讨论。2.6.x这个种3个数的叫base stable版。4位数的版本都是在base stable上面打补丁得来的。
所以总得步骤是 2.6.22.9先要降级到2.6.22 然后升级到2.6.23.再升级到2.6.23.9
具体做法如下。
1.下载patch-2.6.22.9.bz2。把它放到/usr/src/目录里面
接下来
cd liunx-2.6.22.9
bzcat ../patch-2.6.22.9.bz2|patch -p1 -R #使用R命令意思是取消补丁。这样我们就把22.9 降到 22
2.下载patch-2.6.23.gz。把它放到/usr/src/目录里面
cd liunx-2.6.22.9
zcat ../patch-2.6.23.gz|patch -p1 #这样就升级到了2.6.23
3.下载patch-2.6.23.11.bz2。把它放到/usr/src/目录里面
接下来
cd liunx-2.6.22.9
bzcat ../patch-2.6.23.11.bz2|patch -p1 # 这样就升级到了2.6.23.11 这是现在stable的最新版。
最后
cd..
mv linux-2.6.22.9 linux-2.6.23.11#改为正确目录名
ln -s linux-2.6.23.11 linux #重新建立链接
场景2
如果我现在要使2.6.23.11升级到2.6.23.12. 我应该先把2.6.23.11 回退成2.6.23 然后再打 2.6.23.12的补丁
假设我已经在内核的目录中。补丁放在上层目录。
bzcat ../patch-2.6.23.11.bz2|patch -p1 -R #回退到2.6.23
bzcat ../patch-2.6.23.12.bz2|patch -p1 #打到2.6.23.12
总的来说就是这样。正确的输出应该全都像下面这样
patching file include/net/sock.h
patching file include/net/tcp.h
patching file include/scsi/scsi_device.h
patching file include/xen/interface/vcpu.h
patching file ipc/mqueue.c
patching file kernel/exit.c
patching file kernel/fork.c
patching file kernel/futex.c
patching file kernel/futex_compat.c
patching file kernel/hrtimer.c
patching file kernel/irq/manage.c
patching file kernel/lockdep.c
patching file kernel/params.c
。
。
。
如果出现rej文件。说明有的文件打补丁失败。请查看那个rej文件。看看是为什么导致失败。一般来说。可能是你的目录树有问题。如果还有问题。参考内核/Docmuent目录下面的补丁教程。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hide1713/archive/2007/12/16/1941614.aspx