Как получить проект buildroot под управлением исходного кода

Компания, в которой я работаю, разрабатывает продукт, для которого требуется встроенный Linux, для которого мы используем, как и многие другие, Buildroot.

В любом случае, я хотел бы получить контроль над проектом с помощью Git, так как это наш инструмент для управления исходным кодом для всех других проектов, которые есть у компании. Проблема в том, что я не знаю, какие файлы я должен хранить в системе контроля версий (как сохранение целого buildroot каталог кажется излишним).

3 ответа

Я решил эту проблему, работая с git submodules а также buildroot br-external особенность.

В этом смысле вам нужно всего лишь запустить пустой репозиторий и импортировать релиз buildroot как его подмодуль.

mkdir myrepo; cd myrepo
git init
touch README; git add README; git commit -m "Initial commit"
git submodule add -b <preferred release/tag/branch> git://git.buildroot.net/buildroot
git submodule update --init

Тогда вы можете создать br-external каталог и заполнить его аналогично собственным каталогам build / root package / configs / board, как описано в BR2_EXTERNAL документация 1.

mkdir br-external
# below command assumes you have all structures ready somewhere else
cp -fva .../configs .../package .../board br-external
touch br-external/{Config.in,external.mk}
(edit Config.in and external.mk)
git add br-external

После этого вам нужно всего лишь запустить buildroot defconfig step, передавая абсолютный путь к вашему каталогу br-external, например так.

make BR2_EXTERNAL=$PWD/br-external -C buildroot <boardname>_defconfig

Ваши BR2_EXTERNAL местоположения кэшируются для дальнейших вызовов.

Самая приятная часть этого заключается в том, что вам нужно только контролировать версии внутри br-external, а buildroot создает меню конфигурации таким образом, чтобы все ваши пользовательские элементы были должным образом разделены (пункт меню "Пользовательские параметры").

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

cd buildroot
git pull origin latest-release
cd ..
git add buildroot
git commit -m 'buildroot latest-release upgrade'

Недавно я решил ту же проблему в нашей организации, и я считаю эту тему интересной. Я опишу наше частичное решение здесь:

Определите, какую версию buildroot вы используете

РЕДАКТИРОВАТЬ: Недавний опыт подчеркнул этот момент для меня.

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

  1. Вы можете включить Buildroot в качестве подмодуля git в своем репо. Хорошо, если у вашей компании есть только один проект Buildroot.
  2. Укажите в файле README, какую версию использовать, или напишите для нее специальную проверку.

Строительство вне дерева

Я настоятельно рекомендую построить из дерева: http://buildroot.org/downloads/manual/manual.html

$ cd ~/platform/proj-arm; make O=$PWD -C path/to/buildroot

Добавить файлы конфигурации и целевой оверлей в git

Добавьте файл.config и файлы субконфигурации в репозиторий git. Мой репо содержит следующее:

.config
README.md
linux.config
build/busybox-1.22.1/.config
libdc1394.patch
opencv_2.3.1a.patch
target-overlay/README~
target-overlay/etc/dropbear/dropbear_ecdsa_host_key
target-overlay/etc/dropbear/dropbear_rsa_host_key
target-overlay/etc/fstab
target-overlay/etc/httpd.conf
target-overlay/etc/init.d/S51mount_html
target-overlay/etc/init.d/S52new_ip_address
target-overlay/etc/init.d/S53httpd
target-overlay/etc/network/interfaces
target-overlay/etc/shadow
target-overlay/etc/sshd_config
target-overlay/lib/firmware/rtl_nic/rtl8168g-2.fw
target-overlay/root/.ssh/authorized_keys

Сохраните ваши изменения в buildroot как патчи

Всякий раз, когда вы меняете материал в репозитории buildroot, переходите на эту функцию и создайте для нее патч. Сохраните исправление в своем хранилище и используйте файл README.md, чтобы объяснить другим, как применить его к дереву buildroot.

У вас есть два основных варианта.

  1. Самый простой - клонировать репозиторий buildroot (он не очень большой) и создать собственную ветку на основе тега релиза. Это позволяет вам легко вносить изменения в buildroot, но сложно создавать глобальные теги и ветки (т. Е. Назначать один и тот же тег для buildroot и вашему собственному коду). Однако, если вы хотите объединить его с хранилищем своего собственного кода (чтобы все можно было пометить вместе), вы должны использовать подмодули git или объединение поддеревьев (ни один из которых не очень удобен), либо вы должны сохранить его как Отдельный репозиторий и использовать второе решение для интеграции.
  2. Вы можете основывать свой продукт на tar-архиве buildroot и написать скрипт сборки, который загружает tar-архив, извлекает его, настраивает его (вызывая *make xxx_defconfig*) и собирает его. Недавно добавленный механизм BR2_EXTERNAL (будет выпущен в 2014.02) позволяет легко хранить ваши собственные добавления вне дерева buildroot. Однако, если вам нужно что-то изменить в базовой инфраструктуре, вы должны применить исправления к загруженному архиву, что неудобно.

Конечно, не стоит извлекать tar-архив buildroot из своего репозитория и импортировать его таким образом, потому что это затрудняет обновление дерева buildroot или даже применение вышестоящих исправлений. Если вы хотите, чтобы это было в вашем собственном репозитории, используйте git subtree merge, чтобы, по крайней мере, вы сохранили предшествующую историю.

Третий вариант - использовать инструмент репо Android для объединения репозиториев git buildroot, linux, вашего собственного кода и других пакетов, которые вы изменяете. Это сочетает в себе лучшее из двух вариантов, которые я дал (легко изменить и поддерживает глобальные теги / ветви). Но я никогда не пробовал это сам, поэтому не могу обещать, что это будет хорошо работать.

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