<Linux>使用quilt工具制作补丁(patch)文件
Linux使用quilt工具制作补丁文件前言一、安装quilt工具二、一个需要被打补丁的文件三、quilt new命令创建初始补丁文件四、quilt add命令添加目标文件五、修改目标文件代码内容六、quilt refresh命令生成补丁文件七、测试结果总结前言patch是Linux项目编程下常用的工具。例如: 一份有Makefile管理的
Linux使用quilt工具制作补丁文件
前言
patch是Linux项目编程下常用的工具。
例如:
一份有Makefile管理的驱动代码文件,每次编译时会有Makefile规则从指定目录下解压到固件目录下,此时在驱动代码中添加了一些功能或者改变了一些功能代码,为了不改变原驱动代码,便可以将新修改的代码做成patch文件,使用Makefile在每次编译固件时候将patch安装到代码中。
提示:以下步骤均在ubuntu下进行示范操作
一、安装quilt工具
ubuntu下打开终端界面输入以下命令安装quilt:
sudo apt-get install quilt
安装完成quilt工具后,可以使用以下命令查看quilt支持的操作:
quilt --help
输入命令后可以看到以下输出:
Usage: quilt [--trace[=verbose]] [--quiltrc=XX] command [-h] ...
quilt --version
Commands are:
add fold mail refresh snapshot
annotate fork new remove top
applied graph next rename unapplied
delete grep patches revert upgrade
diff header pop series
edit import previous setup
files init push shell
Global options:
--trace
Runs the command in bash trace mode (-x). For internal debugging.
--quiltrc file
Use the specified configuration file instead of ~/.quiltrc (or
/etc/quilt.quiltrc if ~/.quiltrc does not exist). See the pdf
documentation for details about its possible contents. The
special value "-" causes quilt not to read any configuration
file.
--version
Print the version number and exit immediately.
quilt工具支持的操作如下:
quilt new 创建一个新的补丁环境
quilt top 查看最近的一个patch
quilt add {files} 关联文件
quilt remove files 取消关联文件,是add相反的操作
quilt diff 查看对比修改的内容
quilt files 查看当前patch关联的文件
quilt series 查看左右的patch
quilt pop 回退刚才文件的改动
这里只做quilt的入门使用,只使用new、add、refresh三个命令。
new:创建新的patch文件环境
add:添加需要打补丁的文件到patch环境中
refresh:修改完成后,将修该记录更新至补丁中
二、一个需要被打补丁的文件
以简单的print helloworld做示例:
准备一个main.c,目标代码为以下内容,需要将第2个printf中的字符串"Not patching yet!“修改为"finsh patching”,同时添加一个打印代码”printf(“我大意了 没有闪\n”);“
#include <stdio.h>
int main(int argv,char **argc)
{
printf("Hello world\n");
printf("Not patching yet!\n");
return 0;
}
三、quilt new命令创建初始补丁文件
此时需要用到quilt工具来初始化一个补丁文件
这里以与main.c的同目录下进行创建,使用以下命令:
quilt new xxxx.patch
示例:
quilt new 0000.patch
其中xxxx为补丁的名称,可以先随意创建一个名称,完成补丁后再修改至需要名称。
创建patch成功后,可以在目录下看到一个名称为patches的文件夹,文件夹里面只有一个"series"文件。
四、quilt add命令添加目标文件
创建补丁后,需要将要修改的文件添加至补丁环境中。使用以下命令:
quilt add xxxx.c
示例:
quilt add main.c
添加成功后会有以下提示:
File main.c added to patch patches/0000.patch
五、修改目标文件代码内容
示例中会往main.c添加以下内容
- 将第2个printf中的字符串"Not patching yet!“修改为"finsh patching”
- 添加一个打印代码printf(“我大意了 没有闪\n”);
原代码为:
#include <stdio.h>
int main(int argv,char **argc)
{
printf("Hello world\n");
printf("Not patching yet!\n");
return 0;
}
修改后的代码为
#include <stdio.h>
int main(int argv,char **argc)
{
printf("Hello world\n");
printf("Finsh patching!\n");
printf("我大意了 没有闪\n");
return 0;
}
六、quilt refresh命令生成补丁文件
修改代码完成后,在创建patch的目录下使用以下命令生成补丁文件:
quilt refresh -pab
生成补丁正确,可以看到以下信息:
Refreshed patch patches/0000.patch
此时可以在同目录下,查看patches文件夹中的补丁文件
生成补丁文件如下(注释为手动添加,用于解释补丁文件构成):
Index: b/main.c
===================================================================
--- a/main.c # "---"表示旧文件
+++ b/main.c # "+++"表示新文件
@@ -3,7 +3,8 @@ # @@ @@,表示补丁影响行数内容-3,7表示从旧文件的3行开始7行结束,+3,8表示新文件的3行开始8行结束
int main(int argv,char **argc)
{
printf("Hello world\n");
- printf("Not patching yet!\n"); #- 表示删除该信息
+ printf("Finsh patching!\n"); #+ 表示添加该信息
+ printf("我大意了 没有闪\n");
return 0;
}
七、测试结果
首先执行未打补丁前的文件,输出如下:
Hello world
Not patching yet!
使用打补丁命令将patches/0000.patch补丁打到main.c中:
patch main.c < patches/0000.patch
执行成功后输出如下:
patching file main.c
此时main.c的内容为打补丁后的内容:
#include <stdio.h>
int main(int argv,char **argc)
{
printf("Hello world\n");
printf("Finsh patching!\n");
printf("我大意了 没有闪\n");
return 0;
}
再次编译执行main.c,输出如下:
Hello world
Finsh patching!
我大意了 没有闪
# 总结
- 使用quilt new创建补丁环境
- 使用quilt add 添加需要改动的文件到补丁环境中
- 改动文件
- 使用quilt refresh自动生成补丁文件
- 使用patch命令将补丁重新打回原来的文件代码中,进行验证
此外,若使用git管理工具的diff命令查看改动文件时,就可以输出的改动差异也是patch格式。
更多推荐
所有评论(0)