Buildroot: свой образ Linux для Raspberry Pi

Недавно я откопал у себя в столе Raspberry Pi Model B (Broadcom BCM2835 SoC). В качестве эксперимента я решил свой образ операционной системы Linux со своим набором тестового программного обеспечения. Сборку я производил при помощи Yocto Project (YP) (побробности можно почитать здесь).

Однако я столкнулся с тем что "из коробки" я не могу получить требуемый мне набор програмного обеспечения.

Неоходимые мне пакеты:

  • Python 3
    • RPi.GPIO (нужен дотуп к GPIO)
    • rpi-ws281x (хочу управлять LED панелькой)
  • Node.js (попробую создать систему управления)
    • npm (необходимо устанавливать модули)

Поскольку я собираю образ Linux для встраиваемой системы (англ. embedded system), то тут есть один существенный момент, набор и версии програмного обеспечения фиксирован. В большей степени данное замечание касается Python, дополнительные модули командой pip install доустановить не получится (те которые требуют компиляции). К сожалению, в используемых мной слоях Yocto не оказалось рецепта для сборки модуля rpi-ws281x, это вполне поправимая ситуация, существует множество хороших инструкций по добавлению модудей Python в проекты Yocto.

Но самая большая проблема это нежелание Node.js собираться под платформу raspberrypi, причем как в релизной ветке dunfell так и в ветке master. Я попытался исправить рецепт сборки, но пара попыток оказались неудачными. Так у меня возникло желание попробовать собрать все "из коробки" в Buildroot.

Подготовка к сборке

Создаю рабочий каталог и перехожу в него

mkdir buildroot && cd buildroot

Загружаю и распаковываю стабильный релиз

wget https://buildroot.org/downloads/buildroot-2020.08.1.tar.bz2
tar -xf buildroot-2020.08.1.tar.bz2

Создаю каталог для сборки (мне так удобнее) и перехожу в него

mkdir rpi && cd rpi

Сборка системы для запуска Raspberry Pi

Инициализирую сборку применяя стандартный конфигурационный файл для Raspberry Pi

make -C ../buildroot-2020.08.1/ O=$PWD raspberrypi_defconfig

Для того чтобы внести изменения в стандартный конфиг запускаю графическую оболочку

make menuconfig

Вношу следующие изменения:

  • Toolchain
    • C library - выбираю (glibc)
  • System configuration
    • Root password - указываю свой пароль
    • Install timezone info - отмечаю для установки
    • Custom scripts to run before creating filesystem images - добавляю перед уазанным скриптом $(TOPDIR)/
    • Custom scripts to run after creating filesystem images - добавляю перед уазанным скриптом $(TOPDIR)/
  • Target packages
    • Interpreter languages and scripting
    • nodejs
    • NPM for the target
    • python3
    • External python modules
      • python-pip
      • python-rpi-gpio
      • python-rpi-ws281x
    • Networking applications
    • chrony
    • dropbear
    • iproute2
    • Text editors and viewers
    • vim
  • Filesystem images
    • exact size - указываю 250М

Выхожу из конфигурационной оболочки с сохранением изменений.

Запускаю сборку

make

Запись образа на карту памяти

Полученный после сборки образ системы записываю на карту памяти

sudo dd if=images/sdcard.img of=/dev/mmcblk0 status=progress

Заключение

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

Опубликовано: