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. В реальной жизни, под конкретную аппаратную платформу и набор программного обеспечения, скорее всего, придется писать свои правила и рецепты сборки, но это уже совсем другая история.