f. quilt工具使用说明

背景

在编译打包tigervncserver时,发现对源码文件进行修改后,编译打包始终会报错。研究发现需要使用quilt工具生成patch才能将我们的修改应用到新编的deb包中。

原理

掌握quilt的关键是了解使用quilt的流程。使用quilt时,我们会在一个完整的源代码树里工作。只要我们在源代码树里使用了quilt命令,quilt就会在源代码树的根目录建立两个特殊目录:patches和.pc。

quilt在patches目录保存它管理的所有补丁。quilt用.pc目录保存自己的内部工作状态。patches/series文件记录了quilt当前管理的补丁。补丁按照加入的顺序排列,早加入的补丁在前。quilt用堆栈的概念管理补丁的应用。

image-20240220-012916.png

我们在应用补丁A前,必须先应用所有早于补丁A的补丁。所以,patches/series中的补丁总是从上向下应用。

我们在源代码树中作任何修改前,必须用"quilt add"命令将要修改的文件与一个补丁联系起来。在完成修改后,用"quilt refresh"命令将修改保存到已联系的补丁。

常用命令

#查询已应用/未应用的patch quilt applied/unapplied #生成一个新的patch quilt new patch_name #添加patch关联的文件(如果没有指定patch,文件就和栈顶的patch关联起来) quilt add  [ -P patch_name ] file_name # 刷新补丁 quilt refresh [patch_name] #即将指定补丁的文件变化保存到补丁。省略文件名表示刷新栈顶补丁,修改完成后生成最终patch,在关联文件后可以直接修改文件,也可以使用quilt edit修改文件,只能对栈顶patch进行操作,不能制定patch quilt refresh #查看已修改的文件,可以使用 quilt files [patch_name] 查看与指定patch相关联的文件, quilt files -val 查看所有补丁联系的所有文件,"-v"参数表示更友好的显示,"-a"参数表示显示所有补丁,"-l"参数显示补丁名 quilt files #显示修改了指定文件的所有补丁 quilt patches file_name quilt annotate file_name #会指出哪个补丁修改了哪一行 #对比修改的文件,使用 quilt diff -z 命令不会显示已经保存的差异。 quilt diff 显示所有的差异,不管是否保存过 quilt diff quilt diff -z [-P patch_name] [file_name] #可以查看指定补丁指定文件的当前改动。省略-P参数表示查看当前补丁的改动,省略文件名表示查看所有改动。 #查看所有的patch quilt series #查看最上层的patch quilt top quilt next #显示下一个可以应用的补丁 quilt previous #显示上一条应用过的补丁 #导入patch quilt import patch_name #回退到上一个patch quilt pop  quilt pop -a #撤销所有应用的patch #重新添加刚刚回退的patch quilt push #删除已有的patch quilt delete filename.patch

 

实践

添加环境变量 export QUILT_PATCHES=debian/patches 生成一个新的patch quilt new fde_patch_001.diff  添加patch关联的文件 quilt add unix/xserver/hw/vnc/Input.c 然后修改Input.c文件 vim unix/xserver/hw/vnc/Input.c 刷新补丁 quilt refresh  生成及更新的文件/目录位置如下图:
image-20240220-020451.png
image-20240220-020457.png
image-20240220-020502.png

开始编译打包

DEB_BUILD_OPTIONS="parallel=8" dpkg-buildpackage -b -uc -us