一、单个文件打patch的情况
-
1.使用diff命令,生成补丁文件
在build_dir/target…/目录下,复制创建一个新的源码目录(如:mosquitto-2.0.13_after),并将文件mosquitto-2.0.13_after/lib/mosquitto_internal.h进行想要的修改;
然后使用diff命令和未修改的目录下的文件(mosquitto-2.0.13_before/lib/mosquitto_internal.h)进行比较,生成补丁文件(001-mosquitto_internal.patch)。
diff -urN mosquitto-2.0.13_before/lib/mosquitto_internal.h mosquitto-2.0.13_after/lib/mosquitto_internal.h > 0010-mosquitto_internal.patch
注意:
(1)参数使用-urN;
(2)未修改的文件在前,修改过的文件在后;(diff命令也可以比较目录)
(3)生成.patch文件 -
2.新建patches文件夹,放入补丁文件
在mosquitto源码编译目录下,创建patches目录,将生成的.patch文件放入,可放入多个补丁文件,按照前缀数字顺序执行
补丁命名规范
所有的补丁文件应该以“NNN-lowercase_shortname.patch”的形式命名,并分成以下几类:
0xx - 上游补丁
1xx - 代码等待上游合并
2xx - 内核构建、配置、头补丁
3xx - 特定架构的补丁
4xx - mtd相关的补丁(子系统和驱动)
5xx - 文件系统相关的补丁
6xx - 通用网络补丁
7xx - 网络层/物理层驱动补丁
8xx - 其他驱动
9xx - 未分类的其他补丁
编译时,解压mosquitto压缩包之后会自动 先将patch内容写入源码文件,然后再编译生成相关文件。
- 3.删除build_dir下的源码目录,整体编译验证
将build_dir/target…/下的mosquitto目录删除,整体编译,编译通过后查看新生成的
mosquitto-2.0.13/lib/mosquitto_internal.h是否是修改过的。
二、打patch需要修改同一目录下多个文件的情况
-
1.去dl目录下找到需要的压缩包,使用linux命令解压一份,copy到build_dir/target…/目录下。
从dl目录的压缩包解压是为了防止编译过程中产生的新文件(如.so文件等)对patch产生影响,所以需要从dl下的压缩包解压出最原始的代码。注意:解压/压缩都使用linux tar命令方式 -
2.修改后使用diff命令对目录进行比较
diff -urN libmodbus-3.1.7/src/ libmodbus-3.1.7_after/src/ > 0010-modbus.patch
修改了多个文件可以直接对修改的文件所在的父目录打patch,父目录下所有的不同点都会在同一个patch中体现