Как применить патчи к пакету в Buildroot?
Я работаю над встроенной системой, которая использует buildroot как инструмент для сборки ядра и корневой файловой системы. Я хочу применить некоторые исправления к этому дереву исходного кода ядра. Может кто-нибудь сказать мне, как buildroot применяет исправления?
4 ответа
Изучив архитектуру buildroot, я узнал, что builduot использует инструмент quilt для применения патчей. quilt отслеживает все патчи в файле с именем "series", который присутствует в каталоге "patches". Вы должны хранить свои патчи в этом каталоге. И добавьте вашу запись патчей в файл серии в том порядке, в котором вы хотите, чтобы патчи были применены, оставляя патч первым в верхней части.
Таким образом, когда вы запустите make-файл buildroot, он автоматически применит патчи, перечисленные в файле серии.
Расширить ответ @pradeepchhentri. Quilt будет искать файл, расположенный в той же папке, что и файл *.mk. Чтобы создать соответствующий файл:
отличить исходный пакет от оригинала в файл с именем
packagename-номер-описание.patch
где
имя_пакета - должно совпадать с названием пакета
число - это порядок, в котором патчи должны применяться, если у вас есть более одного патча для применения (в противном случае он будет применен в алфавитном порядке)
описание - может быть любым свободным текстом
Поместите этот файл в пакет на том же уровне, что и файл [packagename].mk, и файл package/Config.in.
Не забудьте удалить ваши файлы сборки или выполнить [package]-rebuild, если вы делаете это. Вы должны увидеть сообщение "Patching...", если это сделано правильно.
Некоторые подробности о файлах патчей в проекте buildroot:
ты должен
diff -u "old_file" "new_file" > file.patch
стоя точно над извлеченным местоположением вашего пакета tar.gz, определенного в
PACKAGE_NAME_SOURCE
это означает, что ваш путь к файлу должен включать в себя имя извлеченной папки пакета.
в случае, если вам интересно, будет ли путь "old_file" отличаться от исходного - не волнуйтесь, важным является путь и имя "new_file" - он должен совпадать с вашим извлеченным пакетом.
Соглашение об именах для исправлений, уже используемых / определенных в buildroot (все части разделены знаком "-"):
- 4-значный приоритет патча (начиная с 0001)
- целевое имя файла
- причина исправления
- расширение
пример:
0001-configure.ac-convert-AC_TRY_COMPILE-AC_COMPILE_IFELS.patch
- поместите файл патча в папку buildroot/package/"имя вашего пакета" /.
нет необходимости изменять конфигурационные файлы, все патчи будут автоматически проверены для применения.
- в случае сбоя файл reject-patch (названный аналогично файлу, который вы пытаетесь исправить, но с расширением .rej) будет помещен в папку, извлеченную из пакета.
BR2_GLOBAL_PATCH_DIR
патчи вне дерева
Структура каталогов:
.git/
buildroot/
Подмодуль Buildroot, как упомянуто по адресу: /questions/36606640/kak-poluchit-proekt-buildroot-pod-upravleniem-ishodnogo-koda/36606652#36606652global_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-репо по вашему выбору: Как изменить исходный код пакетов Buildroot для разработки пакетов?, который вы должны отслеживать как подмодуль git.