Найти в Дзене
Forlinx Embedded

Решение для быстрой интеграции локальных приложений в Buildroot на платформе Allwinner A40i

В разработке встраиваемых систем быстрая и бесшовная интеграция фирменных приложений в образ Buildroot имеет решающее значение для ускорения итерации продукта. На примере платформы Allwinner A40i эта статья проведет вас через весь процесс создания каталога пакетов, написания скриптов сборки Config.in и .mk и включения локального приложения через defconfig на уровне платы. Buildroot по сути является автоматизированным фреймворком сборки. Хотя скрипты сборки для известных пакетов с открытым исходным кодом, таких как U-Boot и ядро ​​Linux, поддерживаются сообществом, вам часто придется добавлять собственные пакеты app_pkg для сборки и интеграции ваших фирменных приложений. Buildroot предлагает фреймворк функций и переменных команд. Скрипты сборки, такие как app_pkg.mk, написанные с использованием этого фреймворка, анализируются основным скриптом package/pkg-generic.mk, который интегрирует их в основной Makefile Buildroot. В конце концов, выполнение make all запускает Makefile верхнего уро

В разработке встраиваемых систем быстрая и бесшовная интеграция фирменных приложений в образ Buildroot имеет решающее значение для ускорения итерации продукта. На примере платформы Allwinner A40i эта статья проведет вас через весь процесс создания каталога пакетов, написания скриптов сборки Config.in и .mk и включения локального приложения через defconfig на уровне платы.

Buildroot по сути является автоматизированным фреймворком сборки. Хотя скрипты сборки для известных пакетов с открытым исходным кодом, таких как U-Boot и ядро ​​Linux, поддерживаются сообществом, вам часто придется добавлять собственные пакеты app_pkg для сборки и интеграции ваших фирменных приложений.

Buildroot предлагает фреймворк функций и переменных команд. Скрипты сборки, такие как app_pkg.mk, написанные с использованием этого фреймворка, анализируются основным скриптом package/pkg-generic.mk, который интегрирует их в основной Makefile Buildroot. В конце концов, выполнение make all запускает Makefile верхнего уровня Buildroot и создает целевой образ.

package/pkg-generic.mk автоматически обрабатывает рутинные задачи, такие как загрузка, извлечение и сборка зависимостей, вызывая pkg-download.mk и pkg-utils.mk, расположенные в том же каталоге. Просто следуйте указанному формату, чтобы написать app_pkg.mk в стиле Makefile, заполнив такие данные, как URL-адрес загрузки, имена зависимых библиотек и другие параметры сборки, специфичные для пакета.

1. Запустите mkdir helloworld в каталоге buildroot-201611/package/, чтобы создать папку для helloworld.

2. В каталоге demo_app создайте файлы Config.in и touch helloworld.mk. Обратите внимание, что имена файлов имеют решающее значение — helloworld.mk должен быть в нижнем регистре и не может быть переименован, так как фреймворк Buildroot следует определенным соглашениям об именовании для обработки пакетов приложений. Поэтому при сборке проектов в Buildroot важно придерживаться правил именования, изложенных в этой статье, иначе вы можете столкнуться с различными ошибками.

3. Измените файлы Config.in и helloworld.mk.

-2
-3

Примечание:

Переменные, заканчивающиеся на _VERSION, представляют версию исходного кода.

Переменные, заканчивающиеся на _SITE, указывают адрес загрузки исходного кода.

Переменные, заканчивающиеся на _SITE_METHOD, указывают метод загрузки исходного кода.

Переменные, заканчивающиеся на _BUILD_CMDS, выполняются в процессе компиляции фреймворка Buildroot. Они используются для передачи параметров компиляции и связывания в Makefile исходного кода и для вызова Makefile.

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

Самая важная часть — $(eval $(generic-package)), которую нельзя опускать, иначе исходный код не будет скомпилирован. Эта функция расширяет весь скрипт сборки .mk в Makefile в каталоге buildroot/, следуя фреймворку Buildroot, для генерации целей сборки.

-4

Обратите внимание, что demo_app.mk не заменяет фактический Makefile исходного кода demo_app. Это просто Makefile верхнего уровня, который сообщает Buildroot, где получить исходный код, как извлечь исходный код, какие параметры компиляции передать переменным в Makefile исходного кода и где скомпилированные библиотеки и двоичные файлы должны быть установлены в корневой файловой системе (rootfs). Конкретная пошаговая компиляция исходного кода demo_app опирается на Makefile внутри самого исходного кода demo_app.

На официальном сайте также имеется английская версия документации.

https://buildroot.org/downloads/manual/manual.html#adding-packages . Для подробного объяснения принципов вы можете обратиться к этому документу.

4. Создайте и измените /home/forlinx/helloworld/helloworld.c

-5

5. Создайте и измените buildroot/package/app/helloworld/Makefile

-6

6. Добавьте опцию helloworld в buildroot-201611/package/Config.in.

-7

7. Добавьте BR2_PACKAGE_HELLOWORLD=y в lichee/buildroot-201611/configs/sun8iw11p1_hf_defconfig.

Файл конфигурации для Buildroot-201611 находится в buildroot-201611/configs/sun8iw11p1_hf_defconfig. Вы можете изменить этот файл конфигурации, чтобы настроить исходный код. После настройки скопируйте файл в out/sun8iw11p1/linux/common/buildroot/.config, и компиляция будет следовать настройкам в .config.

Ошибка: После запуска make menuconfig будет сгенерирован файл .config. Замена .config в каталоге out на него приведет к ошибке

-8

8. ./build.sh для выполнения полной компиляции

из out/sun8iw11p1/linux/common/buildroot/build/helloworld-1.0.0/ в out/sun8iw11p1/linux/common/buildroot/target/bin.

-9

9. ./build.sh pack для создания пакета.

Первоначально опубликовано на www.forlinx.net.

Quickly Integrate Local Apps into Buildroot on Allwinner A40i - Blog - Forlinx Embedded Technology Co., Ltd.