我正在开发一个嵌入式系统,它使用buildroot作为构建内核和根文件系统的工具。我想对这个内核源代码树应用一些补丁,有人可以告诉我buildroot如何应用补丁吗?
答案 0 :(得分:6)
扩展@ pradeepchhentri的答案。 Quilt将查找与* .mk文件位于同一文件夹中的文件。要构建适当的文件:
将您的源包从原始文件扩散到名为
的文件中<强>包名强> - 的号强> - 的描述强> .patch
,其中的
packagename - 必须与包名称相同
数字 - 如果要应用多个补丁,则应该应用补丁的顺序(否则将按字母顺序应用)
说明 - 可以是任何免费文字
将此文件放入与[packagename] .mk文件和包/ Config.in文件相同级别的包中。
如果您这样做,请不要忘记吹走您的构建文件或执行[package] -rebuild。如果正确完成,您应该看到“修补...”消息。
答案 1 :(得分:3)
在研究了buildroot架构后,我发现buildroot使用quilt工具来应用补丁。 quilt跟踪“patches”目录中名为“series”的文件中的所有补丁。您必须将补丁保留在此目录中。然后按照您希望应用补丁的顺序在系列文件中添加补丁条目,使补丁首先应用于顶部。
这样当你运行buildroot makefile时,它会自动应用系列文件中列出的补丁。
答案 2 :(得分:2)
BR2_GLOBAL_PATCH_DIR
树外补丁
目录结构:
.git/
buildroot/
Buildroot子模块,如:https://stackoverflow.com/a/23635403/895245 global_patch_dir/packagename/0001-my-test.patch
添加到配置:
BR2_GLOBAL_PATCH_DIR=../global_patch_dir
然后用:
构建cd buildroot
make
补丁应该在构建之前应用于output/build/packagename-1.0.0/
。
使用*_OVERRIDE_SRCDIR
如果你只是直接在output/build/
下破解包裹,你就不会有任何差异。
而是使用*_OVERRIDE_SRCDIR
机制,它允许您指向您选择的git仓库:How to modify the source of Buildroot packages for package development?,然后您应该将其作为git子模块进行跟踪。
答案 3 :(得分:1)
buildroot 项目中补丁文件的一些细节:
你必须
diff -u "old_file" "new_file" > file.patch
同时站在
中定义的包 tar.gz 的提取位置之上PACKAGE_NAME_SOURCE
这意味着,您的文件路径必须包含解压缩的包文件夹名称。
如果你想知道&#34; old_file&#34; 路径是否会与原路径不同 - 不用担心,重要的是 >&#34; new_file&#34; 路径和名称 - 它应与您提取的包匹配。
在buildroot中已经使用/定义的补丁的命名约定(所有部分都用&#39; - &#39; 符号分隔):
示例:
0001-configure.ac-convert-AC_TRY_COMPILE-AC_COMPILE_IFELS.patch
不需要修改配置文件,所有补丁都将自动尝试应用。