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添加以下内容

  1. 将第2个printf中的字符串"Not patching yet!“修改为"finsh patching”
  2. 添加一个打印代码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!
我大意了 没有闪

# 总结

  1. 使用quilt new创建补丁环境
  2. 使用quilt add 添加需要改动的文件到补丁环境中
  3. 改动文件
  4. 使用quilt refresh自动生成补丁文件
  5. 使用patch命令将补丁重新打回原来的文件代码中,进行验证

此外,若使用git管理工具的diff命令查看改动文件时,就可以输出的改动差异也是patch格式。

<Linux>使用quilt工具制作补丁(patch)文件相关推荐

  1. linux用dd工具制作img镜像文件

    制作软盘镜像文件diska.img 命令: dd if=/dev/zero of=diska.img bs=512 count=2 复制boot.bin到boot.img中 命令: dd if=boo ...

  2. 详解linux下auto工具制作Makefile源码包(制作篇)

    2019独角兽企业重金招聘Python工程师标准>>> 详解linux下auto工具制作Makefile源码包(制作篇) 水木杨 一.     概述 为了更好的制作configure ...

  3. 如何制作LINUX的patch文件及如何打patch

    如何制作LINUX的patch文件及如何打patch 对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件. patch文件也叫补丁,就是一个文本 ...

  4. yocto模块使用quilt工具增加patch方法

    如果源码模块是git仓库的型式(远程的或者本地的mirror型式),直接使用git diff来生成patch就可以了. 模块源码为压缩包的型式,可以使用quilt工具来生成patch文件.拿imax6 ...

  5. linux生成目录间补丁,Linux文件比对工具,Linux diff的用法,Linux补丁制作,patch用法...

    diff通常在于比对同个文件不同版本之间的差异,不同文件没意义,因为差异都会出来 用法 diff [-bBi] from-file to-file -b忽略一行当中多个空白符号的差异 例如about ...

  6. ubuntu系统使用quilt制作补丁包

    简介 本文采用quilt命令制作deb包的补丁具体操作如下 解压源码包 首先应从相关源地址下载所需打补丁的源码包 [root@localhost /]# ls initramfs-tools_0.13 ...

  7. ubuntu系统使用quilt命令自定义配置制作补丁包解析

    简介 patch的制作需要借quilt工具完成补丁,quilt 命令提供了记录修改的一个基本方式.对 Debian 打包来说,该工具需要进行自定义,从而在 debian/patches/ 目录内记录修 ...

  8. linux下patch文件的使用.md

    linux下patch文件的使用 通过diff工具生成补丁, patch工具打上补丁.在使用diff之前,需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成p ...

  9. linux制作光盘镜像文件

    随着光盘刻录机在linux计算机上的普及,以iso为主的光盘映像文件制作.转换.编辑等成了大家非常关心的东西.iso等格式的文件是一种数据在数据光盘上的组织形式,即光盘上的文件系统格式. 那么,哪些软 ...

最新文章

  1. Kali国内源更新sources.list
  2. ExternalDocumentationLinkImpl(url=https://developer.android.com/reference/, packageListUrl=https://d
  3. 预训练再次跨界!百度提出ERNIE-GeoL,地理位置-语言联合预训练!
  4. 立竿见影地把你的 Python 代码提速7倍
  5. Netty工作笔记0067---Netty编解码机制简述
  6. 基于mysql的全文索引
  7. python 动态执行代码块
  8. GMSK调制解调(一)
  9. 关于html的实训日志,满足你的甜蜜幻想, 《我与她的实习日志》登陆NS
  10. 看完这篇 Linux 的基本操作你就会了!
  11. 电视与电脑连接html线,电视机与电脑连接的方法
  12. 支付回答——如何理解借记和贷记
  13. docekr unable to delete d38d835588d5 (must be forced) - image is referenced in multiple repositories
  14. 微型计算机的内存乘储器,微型计算机及接口技术名词解释题及解答题
  15. SIMULINK rlc电路仿真
  16. c4d工作平面模式关闭不了
  17. 大数据与云计算学习计划 (一) 云计算系统管理 3 Linux系统命令行基础 (概念与实操)
  18. 【244】Python 说出下面list1,list2,list3的输出值(新的默认列表仅仅只在函数被定义时创建一次)...
  19. Jmeter+Ant+Jenkins自动化接口测试框架
  20. kanzi学习之路(序)

热门文章

  1. 如何下载永定门外街道卫星地图高清版大图
  2. 任务诱发的瞳孔反应(The Task-evoked Pupillary Response)
  3. VPN服务器配置、路由服务器配置、视频服务器配置、DNS服务器配置、DHCP服务器配置、E-mail服务器配置、FTP服务器配置、Web服务器配置、证书服务器配置及管理
  4. 如何降低直通车推广的费用花销?影响因素有哪些?
  5. 暴风影音去除暂停时的广告
  6. C# -写个可可图片播放器
  7. 2021年12月中国汽车企业出口量排行榜:特斯拉上海12月出口量仅245辆,占比其全年出口总量的0.15%(附月榜TOP39详单)
  8. UTC时间,GMT时间与夏令时冬令时详解
  9. 数字信号处理——Python实现快速傅里叶变换FFT
  10. 课程设计-多种排序方式