OpenWRT(8):使用quilt对OpenWRT的patch进行管理
quilt是一个用于管理源代码补丁的工具,广泛用于 Linux 内核和许多其他开源项目中。它提供了一种方便的方式来创建、修改、应用和撤销补丁。
1 quilt使用
关键特性:
- 补丁系列管理:quilt允许你将多个补丁组织成一系列,这样可以轻松地对它们进行排序和应用。
- 自动补丁应用:可以自动应用补丁系列,无需手动干预。
- 补丁依赖管理:可以指定补丁之间的依赖关系,确保它们按正确的顺序应用。
- 撤销补丁:可以轻松撤销已应用的补丁,方便回滚更改。
- 补丁跟踪:跟踪哪些补丁已应用,哪些未应用。
- 用户界面:提供了一个基于文本的用户界面,可以通过命令行与之交互。
常用命令:
初始化:quilt init。创建一个新 quilt 项目。
创建补丁文件:quilt new <patchname>.patch。创建一个新的空补丁文件。
添加文件到补丁:quilt add <filename>。将更改的文件添加到当前补丁中。
编辑文件:quilt edit <filename>。将文件标记为已编辑,通常与 quilt add 一起使用。
查看补丁差异:quilt diff。显示当前补丁系列中的更改。
应用补丁:quilt push -a。
应用所有补丁到源代码中。
撤销补丁:quilt pop。
撤销最后一个应用的补丁。
查看补丁状态:quilt series。列出所有补丁的系列和它们的状态(已应用、未应用)。
刷新补丁:quilt refresh。更新补丁文件以反映当前的更改。
导入补丁:quilt import <patchfile>。导入现有的补丁文件到 quilt 系列中。
移除补丁:quilt remove <patchname>.patch。从补丁系列中移除一个补丁。
折叠补丁:quilt fold。将补丁系列转换为一个单独的补丁文件。
2 quilt在OpenWRT中应用
更多参考《[OpenWrt Wiki] Working with patches》。
已创建util-linux下的补丁为例。
使用 OpenWrt 的 make 系统准备软件包的源代码,并初始化 quilt:
make package/utils/util-linux/{clean,prepare} V=s QUILT=1
切换到解压缩的源代码目录:
cd build_dir/target-xxx/util-linux-2.36.1
使用 quilt 应用所有现有补丁:
quilt push -a
创建一个新补丁或导入一个上游补丁:
quilt new 101-riscv_code_fix.patch # 创建新补丁 # 或 quilt import /path/to/010-main_code_fix.patch # 导入现有补丁
使用 quilt 关联编辑文件到补丁,并使用喜欢的编辑器修改它们:
quilt add modified_file.c
# 然后使用编辑器修改 modified_file.c
使用以下命令查看更改并更新补丁文件:
quilt diff
quilt refresh
进入根目录,将新补丁移动到构建系统目录:
make package/utils/util-linux/update V=s
此时patch内容被更新到package/utils/util-linux/patches/101-riscv_code_fix.patch。
最后,重新编译软件包以测试更改:
make package/utils/util-linux/{clean,compile} V=s