Как-то давно я писал о том как сделать ПО под autotools. Штука весьма интересная и широко применяемая.
Так вот дело пришло к сборке при помощи buildroot окружения для моего Raspberry Pi B+.
Я не выдумывал велосипеды и слил уже приспособленный для малины buildroot с github: https://github.com/gamaral/rpi-buildroot
В buildroot куча пакетов, но не всегда там есть нужный да и все таки мы можем собрать собственный.
Как оказалось добавить пакет в Buildroot проще простого. Нужно создать папку и три файла.
Итак. Будем считать, что пакет с ПО создан при помощи autotools, а архив лежит по адресу https://blablacode.ru/blablacode_auto_helloworld-0.01.tar.gz
В слитом дистрибутиве buildroot заходим в каталог package и создаем каталог для файлов конфигурации для нашего ПО.
Поскольку у меня helloworld я обозвал его blablacode_helloworld.
В этом каталоге создаем файл Config.in и добавляем описание.
config BR2_PACKAGE_BLABLACODE_HELLOWORLD bool "blablacode_helloworld" help This is a comment that explains what blablacode_helloworld is. https://blablacode.ru/blablacode_auto_helloworld-0.01.tar.gz
Тут все очень похоже на систему конфигурации ядра. Собвственно это она и есть. Если есть вопросы гуглим Kconfig.
При конфигурации в меню Target packages появится наша пошина.
Отлично. Теперь создадим инструкции о сборке пакета.
Для этого создаем в том же каталоге файл blablacode_auto_helloworld.mk
BLABLACODE_HELLOWORLD_VERSION = 0.01 BLABLACODE_HELLOWORLD_SOURCE = blablacode_auto_helloworld-$(BLABLACODE_HELLOWORLD_VERSION).tar.gz BLABLACODE_HELLOWORLD_SITE = https://blablacode.ru/ BLABLACODE_HELLOWORLD_INSTALL_STAGING = YES BLABLACODE_HELLOWORLD_INSTALL_TARGET = YES BLABLACODE_HELLOWORLD_DEPENDENCIES = host-pkgconf $(eval $(autotools-package))
Тут мы указываем версию, имя архива с исходником, имя хоста где он расположен и систему сборки (autotools). Buildroot поддерживает еще сырые make файлы и cmake.
Для первой проверки осталось только поправить файл package/Config.in
Я добавил наш пакет в самое начало файла, в меню Target packeges
menu "Target packages" source "package/busybox/Config.in" source "package/blablacode_helloworld/Config.in"
Тут все точно также как и в ядре linux.
Можно пробовать собирать. Выполняем из корневого каталога buildroot.
make menuconfig make
В меню конфигурации не забываем включить наш пакет.
После компиляции заливаем полученный архив файловой системы в наш raspberry pi.
Зарабооотало 😉