linux内核打补丁及卸载操作 下载本文

内容发布更新时间 : 2024/6/26 10:09:47星期一 下面是文章的全部内容请认真阅读。

Linux内核制作补丁及卸载操作

Linux内核补丁简介

对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件。patch文件也叫补丁,就是一个文本文档,这个文档包含了在两个不同版本的源代码树之间的变化。补丁是通过diff应用程序来创建的。为了正确地打上一个补丁,你需要知道这个补丁是从哪个基础版本产生出来的,以及这个补丁将要把目前的源代码树变化到什么新的版本。这些信息或者会出现在补丁文件的原数据中,或者可能从文件名中推断出来。

Linux内核补丁的制作

比如基于Linux内核做了如下的修改:将Linux内核kernel文件下的time/kconfig文件的config TICK_ONESHOT bool两行删除,将新修改的kernel文件夹命名为kernel_new,制作patch文件,本质上就是比较两个修改前和修改后文件的不同。利用diff命令,就可以制作两个文件的补丁:

diff -Naur kernel/ kernel_new/ > qg.patch

注意,当前操作目录是home/qg/ linux-2.6.35.4,kernel及kernel_new文件夹都在该目录下由此得到补丁qg.patch,该补丁文件路径是同kernel、kernel_new文件夹相同的。这个patch文件是描述文件的路径信息和将第几行内容删除,在第几行添加内容,删除用减号,添加用加号。

补丁如下图所示:

如何打Linux内核补丁

打Linux内核补丁,同样使用patch程序,patch程序读取一个diff(或者patch)文件,然后把文件中描述的变化内容应用到代码树上。

可以使用如下命令给Linux内核打补丁: patch –pN < qg.patch

这里N表示一个自然数,这个数字表示去掉补丁路径的第几部分,假定源码目录位于/home/qg/linux-2.6.35.4/kernel,则在当前目录为/home/qg/linux-2.6.35.4使用如下命令可以操作(注:此时qg.patch文件在/home/qg/linux-2.6.35.4文件夹下):

patch –p0 < qg.patch

如当前目录为home/qg/linux-2.6.35.4/kernel时,使用如下命令(注:此时qg.patch文件在/home/qg/linux-2.6.35.4/kernel文件夹下):

patch –p1 < qg.patch

这里p1相当于将补丁第一个路径kernel去掉,在当前目录下寻找time/Kconfig目录,相应地打上补丁。

如何卸载Linux内核补丁

卸载补丁一定要根据打补丁的顺序依次倒序卸载,比如说,Linux内核添加了a补丁,之后又打了b补丁,卸载补丁的顺序是,先卸载b补丁,然后再卸载a补丁。

卸载补丁的命令是: patch –R –pN < qg.patch