将保存在br2-external中的补丁应用到buildroot软件包

问题描述

我想对buildroot软件包应用补丁。我正在使用br2-external树将自定义项保留在buildroot树之外。 buildroot可以找到我的补丁,但是在尝试应用它时失败。

我已设置BR2_GLOBAL_PATCH_DIR="${BR2_EXTERNAL_PATH}/board/myboard/patches"并将补丁放入${BR2_EXTERNAL_PATH}/board/myboard/patches/packagename/0001-name-of-patch.patch。我通过转到buildroot回购,将更改应用于软件包,使用git提交更改并从上一次提交创建补丁来生成补丁: git format-patch HEAD~1 所以补丁看起来像这样:

diff --git a/package/rpi-firmware/cmdline.txt b/package/rpi-firmware/cmdline.txt
index 155a54693b..630cfa9e00 100644
--- a/package/rpi-firmware/cmdline.txt
+++ b/package/rpi-firmware/cmdline.txt
@@ -1 +1 @@
-old code line
+new code line

但是,当我运行make时,在修补过程中找不到要修补的文件(路径错误

Applying 0001-name-of-patch.patch using patch:
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/package/rpi-firmware/cmdline.txt b/package/rpi-firmware/cmdline.txt
|index 155a54693b..630cfa9e00 100644
|--- a/package/rpi-firmware/cmdline.txt
|+++ b/package/rpi-firmware/cmdline.txt
--------------------------
No file to patch.  Skipping patch.

我还尝试了rpi-firmware/cmdline.txtcmdline.txt路径。

我应该在补丁文件中使用什么路径?它应该相对于软件包,相对于buildroot存储库根目录还是相对于全局补丁目录指向软件包?我关注了https://buildroot.org/downloads/manual/manual.html#customize-patches,但找不到该问题的答案。

解决方法

如@sawdust所述,无法修补buildroot软件包目录buildroot/package/<package_name>中的文件。您只能修补软件包的来源,即,将源文件下载到output/build/<package_name>/

我最终使用复制后的文件使用构建后脚本来修改文件,如https://buildroot.org/downloads/manual/manual.html#rootfs-custom(选项BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_PATH}/board/myboard/scripts/post-build.sh")所述