Применение исправления, хранящегося в 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, применив изменения к package, зафиксировав их с помощью 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.txt и cmdline.txt.

Какой путь я должен использовать в файле патча? Должен ли он указываться относительно пакета, относительно корня репозитория buildroot или указывать на пакет относительно глобального каталога исправлений? Я следил за https://buildroot.org/downloads/manual/manual.html#customize-patches, но не смог найти ответ на этот вопрос.


person Filip Kubicz    schedule 06.10.2020    source источник
comment
Насколько я знаю, вы не можете исправить файлы в каталоге package/ с помощью make. В каждый подкаталог package/‹package_name›/ не записывается специальный файл .stamp_patched, чтобы гарантировать, что исправления применяются только один раз и не должны применяться повторно. Исправления обычно применяются к файлам в папке output/build/‹package_name›/.   -  person sawdust    schedule 07.10.2020
comment
Спасибо за комментарий ;) Я могу исправить это в output/build/‹package_name›. Все, что я хочу, это чтобы исправленный пакет попал в мой образ. Я думаю, проблема здесь в том, что исходный код находится в buildroot/package/‹package_name›, а патч — в ${BR2_GLOBAL_PATCH_DIR}.   -  person Filip Kubicz    schedule 07.10.2020
comment
Я думаю, проблема здесь в том, что исходный код находится в buildroot/package/‹package_name›... -- Да, и его копии нет в output/build/‹package_name› /. Возможно, вы сможете исправить установленную версию файла $(BINARIES_DIR)/rpi-firmware/cmdline.txt, используя сценарий после сборки?   -  person sawdust    schedule 07.10.2020
comment
Спасибо, это альтернатива, о которой я думал, и я выбрал это решение.   -  person Filip Kubicz    schedule 07.10.2020


Ответы (1)


Как уже упоминалось @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")

person Filip Kubicz    schedule 07.10.2020
comment
Вы всегда можете разветвить весь репозиторий BR и применить любые патчи, которые вы хотите. Например, я делаю так в github.com/andy-shev/buildroot. - person 0andriy; 09.10.2020