Как применить патчи к пакету в Buildroot?

Я работаю над встроенной системой, которая использует buildroot как инструмент для сборки ядра и корневой файловой системы. Я хочу применить некоторые исправления к этому дереву исходного кода ядра. Может кто-нибудь сказать мне, как buildroot применяет исправления?

4 ответа

Решение

Изучив архитектуру buildroot, я узнал, что builduot использует инструмент quilt для применения патчей. quilt отслеживает все патчи в файле с именем "series", который присутствует в каталоге "patches". Вы должны хранить свои патчи в этом каталоге. И добавьте вашу запись патчей в файл серии в том порядке, в котором вы хотите, чтобы патчи были применены, оставляя патч первым в верхней части.

Таким образом, когда вы запустите make-файл buildroot, он автоматически применит патчи, перечисленные в файле серии.

Расширить ответ @pradeepchhentri. Quilt будет искать файл, расположенный в той же папке, что и файл *.mk. Чтобы создать соответствующий файл:

  1. отличить исходный пакет от оригинала в файл с именем

    packagename-номер-описание.patch

    где

    имя_пакета - должно совпадать с названием пакета

    число - это порядок, в котором патчи должны применяться, если у вас есть более одного патча для применения (в противном случае он будет применен в алфавитном порядке)

    описание - может быть любым свободным текстом

  2. Поместите этот файл в пакет на том же уровне, что и файл [packagename].mk, и файл package/Config.in.

Не забудьте удалить ваши файлы сборки или выполнить [package]-rebuild, если вы делаете это. Вы должны увидеть сообщение "Patching...", если это сделано правильно.

Некоторые подробности о файлах патчей в проекте buildroot:

  1. ты должен

    diff -u "old_file" "new_file" > file.patch
    

стоя точно над извлеченным местоположением вашего пакета tar.gz, определенного в

PACKAGE_NAME_SOURCE

это означает, что ваш путь к файлу должен включать в себя имя извлеченной папки пакета.

  1. в случае, если вам интересно, будет ли путь "old_file" отличаться от исходного - не волнуйтесь, важным является путь и имя "new_file" - он должен совпадать с вашим извлеченным пакетом.

  2. Соглашение об именах для исправлений, уже используемых / определенных в buildroot (все части разделены знаком "-"):

    • 4-значный приоритет патча (начиная с 0001)
    • целевое имя файла
    • причина исправления
    • расширение

пример:

0001-configure.ac-convert-AC_TRY_COMPILE-AC_COMPILE_IFELS.patch
  1. поместите файл патча в папку buildroot/package/"имя вашего пакета" /.

нет необходимости изменять конфигурационные файлы, все патчи будут автоматически проверены для применения.

  1. в случае сбоя файл reject-patch (названный аналогично файлу, который вы пытаетесь исправить, но с расширением .rej) будет помещен в папку, извлеченную из пакета.

BR2_GLOBAL_PATCH_DIRпатчи вне дерева

Структура каталогов:

Добавить в конфиг:

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.

Другие вопросы по тегам