我正在开发一个嵌入式系统,该系统使用 buildroot 作为构建内核和根文件系统的工具。我想为这个内核源代码树应用一些补丁,有人可以告诉我 buildroot 如何应用补丁吗?
4 回答
扩展@pradeepchhentri 的答案。Quilt 将查找与 *.mk 文件位于同一文件夹中的文件。要构建适当的文件:
将您的源包从原始文件差异到一个名为的文件中
包名-编号-描述.patch
在哪里
包名 - 必须与包名相同
number - 如果您要应用多个补丁,则应应用补丁的顺序(否则将按字母顺序应用)
描述- 可以是任何自由文本
将此文件放入包中,与 [packagename].mk 文件和 package/Config.in 文件处于同一级别。
如果您这样做,请不要忘记删除您的构建文件或执行 [package]-rebuild。如果正确完成,您应该会看到“正在修补...”消息。
关于buildroot项目中的补丁文件的一些细节:
你必须
diff -u "old_file" "new_file" > file.patch
同时站在您的包tar.gz中定义的提取位置的正上方
PACKAGE_NAME_SOURCE
这意味着,您的文件路径必须包含提取的包文件夹名称。
如果您想知道“old_file”路径是否与原始路径不同 - 别担心,重要的是“new_file”路径和名称 - 它应该与您提取的包匹配。
已在 buildroot 中使用/定义的补丁的命名约定(所有部分用“-”号分隔):
- 4 位补丁优先级(从 0001 开始)
- 目标文件名
- 打补丁的原因
- .patch 扩展
例子:
0001-configure.ac-convert-AC_TRY_COMPILE-AC_COMPILE_IFELS.patch
- 将补丁文件存放在buildroot/package/"your package name"/文件夹中。
无需修改配置文件,所有补丁都会自动尝试应用。
- 如果失败,reject-patch 文件(名称与您尝试修补的文件类似,但扩展名为.rej)将存放在包提取文件夹中。
在研究了 buildroot 架构之后,我了解到 buildroot 使用 quilt 工具来应用补丁。quilt 跟踪“patches”目录中名为“series”的文件中的所有补丁。您必须将补丁保存在此目录中。并按照您希望应用补丁的顺序在系列文件中添加补丁条目,将首先应用的补丁保持在顶部。
这样,当您运行 buildroot makefile 时,它将自动应用系列文件中列出的补丁。
使用*_OVERRIDE_SRCDIR
和跟踪子模块中的所有内容
我强烈建议您不要使用补丁,而是这样做:
myproject/
.git/
submodules/buildroot/
submodules/source_of_my_package/
并且只需在一个子模块中跟踪您的源代码,该子模块指向您的项目分支,顶部有您的补丁。
这将使一切变得更加理智和易于跟踪。
更多信息:如何修改 Buildroot 包的源代码以进行包开发?
BR2_GLOBAL_PATCH_DIR
树外补丁
目录结构:
.git/
buildroot/
Buildroot 子模块,如下所述:https ://stackoverflow.com/a/23635403/895245global_patch_dir/packagename/0001-my-test.patch
添加到配置:
BR2_GLOBAL_PATCH_DIR=../global_patch_dir
然后构建:
cd buildroot
make
该补丁应output/build/packagename-1.0.0/
在构建之前应用。