<Linux>使用quilt工具制作补丁(patch)文件
Linux使用quilt工具制作补丁文件
- 前言
- 一、安装quilt工具
- 二、一个需要被打补丁的文件
- 三、quilt new命令创建初始补丁文件
- 四、quilt add命令添加目标文件
- 五、修改目标文件代码内容
- 六、quilt refresh命令生成补丁文件
- 七、测试结果
前言
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 snapshotannotate fork new remove topapplied graph next rename unapplieddelete grep patches revert upgradediff header pop seriesedit import previous setupfiles init push shellGlobal options:--traceRuns the command in bash trace mode (-x). For internal debugging.--quiltrc fileUse the specified configuration file instead of ~/.quiltrc (or/etc/quilt.quiltrc if ~/.quiltrc does not exist). See the pdfdocumentation for details about its possible contents. Thespecial value "-" causes quilt not to read any configurationfile.--versionPrint the version number and exit immediately.
quilt工具支持的操作如下:
quilt new 创建一个新的补丁环境quilt top 查看最近的一个patchquilt add {files} 关联文件quilt remove files 取消关联文件,是add相反的操作quilt diff 查看对比修改的内容quilt files 查看当前patch关联的文件quilt series 查看左右的patchquilt 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格式。
<Linux>使用quilt工具制作补丁(patch)文件相关推荐
- linux用dd工具制作img镜像文件
制作软盘镜像文件diska.img 命令: dd if=/dev/zero of=diska.img bs=512 count=2 复制boot.bin到boot.img中 命令: dd if=boo ...
- 详解linux下auto工具制作Makefile源码包(制作篇)
2019独角兽企业重金招聘Python工程师标准>>> 详解linux下auto工具制作Makefile源码包(制作篇) 水木杨 一. 概述 为了更好的制作configure ...
- 如何制作LINUX的patch文件及如何打patch
如何制作LINUX的patch文件及如何打patch 对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件. patch文件也叫补丁,就是一个文本 ...
- yocto模块使用quilt工具增加patch方法
如果源码模块是git仓库的型式(远程的或者本地的mirror型式),直接使用git diff来生成patch就可以了. 模块源码为压缩包的型式,可以使用quilt工具来生成patch文件.拿imax6 ...
- linux生成目录间补丁,Linux文件比对工具,Linux diff的用法,Linux补丁制作,patch用法...
diff通常在于比对同个文件不同版本之间的差异,不同文件没意义,因为差异都会出来 用法 diff [-bBi] from-file to-file -b忽略一行当中多个空白符号的差异 例如about ...
- ubuntu系统使用quilt制作补丁包
简介 本文采用quilt命令制作deb包的补丁具体操作如下 解压源码包 首先应从相关源地址下载所需打补丁的源码包 [root@localhost /]# ls initramfs-tools_0.13 ...
- ubuntu系统使用quilt命令自定义配置制作补丁包解析
简介 patch的制作需要借quilt工具完成补丁,quilt 命令提供了记录修改的一个基本方式.对 Debian 打包来说,该工具需要进行自定义,从而在 debian/patches/ 目录内记录修 ...
- linux下patch文件的使用.md
linux下patch文件的使用 通过diff工具生成补丁, patch工具打上补丁.在使用diff之前,需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成p ...
- linux制作光盘镜像文件
随着光盘刻录机在linux计算机上的普及,以iso为主的光盘映像文件制作.转换.编辑等成了大家非常关心的东西.iso等格式的文件是一种数据在数据光盘上的组织形式,即光盘上的文件系统格式. 那么,哪些软 ...
最新文章
- Kali国内源更新sources.list
- ExternalDocumentationLinkImpl(url=https://developer.android.com/reference/, packageListUrl=https://d
- 预训练再次跨界!百度提出ERNIE-GeoL,地理位置-语言联合预训练!
- 立竿见影地把你的 Python 代码提速7倍
- Netty工作笔记0067---Netty编解码机制简述
- 基于mysql的全文索引
- python 动态执行代码块
- GMSK调制解调(一)
- 关于html的实训日志,满足你的甜蜜幻想, 《我与她的实习日志》登陆NS
- 看完这篇 Linux 的基本操作你就会了!
- 电视与电脑连接html线,电视机与电脑连接的方法
- 支付回答——如何理解借记和贷记
- docekr unable to delete d38d835588d5 (must be forced) - image is referenced in multiple repositories
- 微型计算机的内存乘储器,微型计算机及接口技术名词解释题及解答题
- SIMULINK rlc电路仿真
- c4d工作平面模式关闭不了
- 大数据与云计算学习计划 (一) 云计算系统管理 3 Linux系统命令行基础 (概念与实操)
- 【244】Python 说出下面list1,list2,list3的输出值(新的默认列表仅仅只在函数被定义时创建一次)...
- Jmeter+Ant+Jenkins自动化接口测试框架
- kanzi学习之路(序)
热门文章
- 如何下载永定门外街道卫星地图高清版大图
- 任务诱发的瞳孔反应(The Task-evoked Pupillary Response)
- VPN服务器配置、路由服务器配置、视频服务器配置、DNS服务器配置、DHCP服务器配置、E-mail服务器配置、FTP服务器配置、Web服务器配置、证书服务器配置及管理
- 如何降低直通车推广的费用花销?影响因素有哪些?
- 暴风影音去除暂停时的广告
- C# -写个可可图片播放器
- 2021年12月中国汽车企业出口量排行榜:特斯拉上海12月出口量仅245辆,占比其全年出口总量的0.15%(附月榜TOP39详单)
- UTC时间,GMT时间与夏令时冬令时详解
- 数字信号处理——Python实现快速傅里叶变换FFT
- 课程设计-多种排序方式