Pull to refresh

Обзор систем сборок для Raspberry Pi

Reading time 9 min
Views 47K
В прошлом мой выбор пал на OpenEmbedded (OE) и по заслугам, она одна из лучших систем сборок. К выбору на тот момент не подходил осознанно и захотел исправить это, поэтому решил посмотреть на текущие решения.

Мысль бы не пришла в голову, если под руками не оказалась плата Raspberry Pi (RPi), популярность которой зашкаливает — это означает одно, что попробовать новые системы сборки должно быть как никогда просто.

Забегая вперед, хочу сказать, что мне хотелось выбрать систему сборки для любой платы, RPi это или нет — не важно и был приятно удивлен количеством решений, которые уже сделаны под эту плату.



Мотив


Года два-три назад моя основная и единственная система сборок была OpenEmbedded, так получилось, что попробовать что-то другое не было нужно. Я просто решил, что лучше изучить одну систему хорошо и то, что она популярная это только плюс, нежели пойти по другому пути и попробовать как можно больше систем сборок.

Мое мнение сейчас, что на тот момент момент у меня не было отладочной платы под которую были решения для других систем сборок. А таких решений как RPi не было, но лукавлю — была плата BeagleBoard, но если выбирать сейчас, RPi на порядок дешевле.

Поэтому начиная все заново, мне захотелось попробовать подойти к выбору систем сборок более осознанно и заодно посмотреть, возможно что-то изменилось. (и правда, изменилось)

Цель же этой статьи: очень кратко познакомить с системами сборок и дать максимально работающие инструкции, чтобы избежать плохого впечатления.

Я дал краткую выдержку о всех впечатлений в секции «Заключение», поэтому можете смело переходить туда, если не желаете тратить свое время на сборку образов.

Зачем это нужно

Допустим вы захотели собрать свой образ для RPi и стоите перед выбором как это сделать (под образом понимается прошивка на основе GNU/Linux для отладочной платы) и не знаете с чего начать.

Здесь вы найдете способ как это сделать, но не один, а сразу 6, потому что столько систем сборок мне удалось попробовать.

Кому полезна данная статья

Данная статья рассчитана на человека, разбирающегося в командной строке Linux-a, т.к. все примеры рассмотрены в ней были проверены под Arch Linux x84_64, что означает, что скорее всего у вас они тоже заработают.

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

В остальном статья предоставляет простые инструкции по сборке, дает перечень решений к появившимся у меня проблемам.

И конечно, не забудьте, что статья рассчитана на RPi.

Критерии

У меня несколько критериев, для системы сборок:
  1. Она должна мне нравится
  2. Она должна работать под GNU/Linux
  3. Она должна быть удобной


Поясню их:

Нравится, та система, которую мне захочеться использовать и год и два и 5+. И если нету поддержки моей отладочной платы, то с удовольствием ее добавлю.

Моя основная система это Arch Linux x86_64.

Удобство — это наличие документации, работоспособность, т.е. с ней удобно работать.

Список систем сборок


Я уже знал несколько систем сборок, такие как OpenEmbedded и PTXdist, поиск дал мне еще несколько, но в последствии список взял здесь:

  • OpenBricks
  • LTIB
  • PTXdist
  • Yocto Project / OpenEmbedded
  • OpenWRT / BuildRoot


Список составлен от наименее до наиболее понравившейся системе.

Наблюдения в отличии сборок

  • У каждой системы сборок, свой способ или скрипт для загрузки образа
  • Каждая система сборок была создана, какой-нибудь конкретной организацией, для своих нужд
  • Вы можете наблюдать, как изменяются инструкции переходя от одной системы к другой, последние мне кажутся практически идеальными.


Системы сборок


Основные моменты

Перед тем, как перейти к самим сборкам, здесь опишу основные моменты, которые использовались при составлении описания.

  • Каждое описание системы содержит отдельную секцию с ошибками, которые возникли у меня при выполнении инструкций, чтобы оставить инструкции в простом и понятном виде
  • Каждое описание содержит секцию с ссылками используемые ресурсы в статье
  • Каждое описание содержит секцию с «О системе», где попытался дать свое представление о системе и поделиться впечатлением от использования. Полное описание самой системы можете найти на соответствующем сайте.
  • В инструкциях присутствует переменная SANDBOX, ввел ее для упрощения записи инструкций, указывает на любую выбранную вами директорию
  • Не стал рассматривать отсутствия пакетов, необходимых для сборки. (таких как gcc, git и т.п.)


OpenBricks

О системе

Это система сборки, которая используется проектом GeeXBox — дистрибутив Linux с медиа-центром.

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

Но, вы можете попробовать уже собранные образы на странице проекта (см. ссылки)

Инструкции

Я пробовал собирать образ под основной (host) машиной, появлялись ошибки (см. ошибки), устал.
Скачал образ Ubuntu под VirtualBox, запустил под ним, не собралось, оказалось была проблема в понимании.

Я пытался собрать образ используя репозиторий OpenBricks, но он оказался больше тестовый, т.е. на сайте GeeXBox написано, что если там не собирается, то это нормально. Работающий, оказался репозиторий GeeXBox, но сборка через make menuconfig не увенчалась успехом, поэтому было решение использовать make *defconfig.

С помощью этих инструкций был получен образ:

export OB=$SANDBOX/ob
mkdir $OB && cd $OB

hg clone http://hg.geexbox.org/geexbox
cd geexbox
make geexbox-xbmc-bcm2708-raspberrypi_defconfig
make

#
# Установка образа
#
wget http://download.geexbox.org/snapshots/geexbox-xbmc-bcm2708-raspberrypi/latest/binaries.raspberrypi/make-sdcard
chmod +x make-sdcard
./make-sdcard /dev/mmcblk0 geexbox-3.0.raspberrypi.tar.bz2 raspberrypi



Ошибки



Ссылки



Cкриншот



LTIB

О системе

Система сборок, которую используют в Freescale для своих BSP.

Использует perl для сборки пакетов, а сами пакеты хранятся в rpm, что само по себе непривычно.

Еще одна особенность — LTIB не компилирует Toolchain, а скачивает или использует готовый, что для меня минус.

Инструкции

export LTIB=$SANDBOX/ltib
mkdir $LTIB && cd $LTIB

cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/ltib co -P ltib
cd ltib
./ltib

#
# Ругнулся:
#
# - по поводу rpm, установил rpm-org
# - по поводу sudo, добавил их строчку в sudo
# - не нашел достающий пакет
#

#
# Недостающий пакет
#

cd $LTIB
git clone https://github.com/midnightyell/RPi-LTIB.git
cp RPi-LTIB/ltib/opt/ltib/pkgs/*.rpm  /opt/ltib/pkgs/

./ltib


#
# Установка образа
#

sudo config/platform/rpi/rpi_mksdimage.sh -B rootfs/boot/ -R rootfs.ext2.gz
sudo dd if=rpi_sdcard.img of=/dev/mmcblk0


Собралось нормально, но в итоге вывод не показывался на терминал (uart или com порт), оказалось, что он просто выключен. К устройству можно было подключиться по ssh и попасть в консоль. (оказалось не очевидно)

Ошибки

  • Не был найден rpm. Решение: установил rpm-org, (rpm от red hat, не сработал)
  • Не был найден недостающий пакет. Решение в инструкциях выше


Ссылки



Скриншот



PTXdist

О системе

Система, которую используют Pengutronix.

Данная система сборки разбита на 2 этапа, сборку компилятора (toolchain) и самого образа системы. Т.е. получается, что образ собирается за два действия, а не за одно. Возможно, это минус.

В прошлом мне эта система показалась достаточно интересной. Было удобно пользоваться, а код внутри её структурированный и читабельный.

Инструкции

При первом поиске нашел на github-e вариант данной системы сборки для RPi, но мне не удалось её собрать (компилятор собрался, образ нет). Проблема, как мне кажется, что по вероятности её собирали под debian линуксом, что скорее всего ubunta, а у меня не она.

Но мне не хотелось останавливаться и поверить, что никто не использовал эту систему сборки для RPi. И нашел вариант, который находится на главном репозитории Pengutronix.

Инструкции, которые мне позволили собрать образ (и обратите внимание на секцию с ошибками внизу):

export PTX=$SANDBOX/ptx

mkdir $PTX && cd $PTX

#
# Собираем ptxdist
#

git clone git://git.pengutronix.de/git/ptxdist.git
cd ptxdist/

./autogen.sh
mkdir out
./configure --prefix=`pwd`/out
make && make install

export PATH=`pwd`/out/bin:$PATH
cd ..

#
# Собираем toolchain
#

wget http://www.ptxdist.de/oselas/toolchain/download/OSELAS.Toolchain-2011.11.3.tar.bz2
tar -xjf OSELAS.Toolchain-2011.11.3.tar.bz2

cd OSELAS.Toolchain-2011.11.3/

ptxdist select ptxconfigs/arm-1136jfs-linux-gnueabi_gcc-4.6.2_glibc-2.14.1_binutils-2.21.1a_kernel-2.6.39-sanitized.ptxconfig
ptxdist --force menuconfig
ptxdist --force go
cd ..

#
# Собираем образ
#

git clone http://git-public.pengutronix.de/git-public/OSELAS.BSP-Pengutronix-Generic.git
cd OSELAS.BSP-Pengutronix-Generic

git clone git://git.pengutronix.de/git/platform-pengutronix-raspberrypi.git

ptxdist select configs/ptxconfig
ptxdist platform platform-pengutronix-raspberrypi/platformconfig
ptxdist toolchain /opt/OSELAS.Toolchain-2011.11.3/arm-1136jfs-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/bin

ptxdist --force go
ptxdist --force images

#
# Заливаем образ на SD карточку
#

sudo dd if=./platform-pengutronix-raspberrypi/images/hd.img of=/dev/mmcblk0



Ошибки

  • configure: error: cannot compute suffix of object files: cannot compile. После выяснения стало ясно, что она символизирует совершенно другое — ./configure просто не нашел компилятор. Если использовалась опция fake args, то ./configure не пытался даже искать компилятор, а брал название его из неё. Решение: заменить в fake args (в ptxdist menuconfig) на «gcc»
  • @itemx must follow @item. Она появлялась из-за того, что на моей машине стоял makeinfo версией 5.0. Решение: установить makeinfo версией меньше, чем 5.0.
  • Битая ссылка на файлы. Решение: скачать, файлы pkg-config-0.25.tar.gz, udev-172.tar.bz2 и положить в папку src


Ссылки


Скриншот



Yocto Project / OpenEmbedded

О системе

OpenEmbedded это система сборок, которую используют кому не лень, она содержит очень много пакетов и сама по себе очень популярна и главное — это все работает.

Но, когда начал поиски систем сборок для RPi, то наткнулся на Yocto project о котором ничего не знал и оказалось, что он использует внутри себя OpenEmbedded.

Он появился в 2010-2011 году и оказалось, что цель достаточно хорошая — улучшить средства разработчику для работы со встраиваемыми системами и взять за основу OpenEmbedded.

Как результат, более стабильные билды, больше тестов и лучшая документация, мне удалось слабо пробежаться по этим фактам, но при компиляции образа было очень мало проблем.

Поэтому смело объединил, OpenEmbedded и Yocto project в одну секцию.

Инструкции

export YOCTO=$SANDBOX/yocto

mkdir $YOCTO && cd $YOCTO

#
# Приготовление
#

git clone git://git.yoctoproject.org/poky
cd poky
git clone https://github.com/djwillis/meta-raspberrypi.git

source oe-init-build-env build

#
# Настройка
#

emacs conf/local.conf

# Здесь следует изменить или удалить комментарий в таких переменных
# как
#
# BB_NUMBER_THREADS = "4"
#
# PARALLEL_MAKE = "-j 4"
#
# MACHINE ?= "raspberrypi"
#

emacs conf/bblayers.conf

# Здесь следует добавить путь к meta-raspberrypi в соответсвии с
# примером:
#
# BBLAYERS ?= " \
#  /home/m039/Trash/sandbox/yocto/poky/meta \
#  /home/m039/Trash/sandbox/yocto/poky/meta-raspberrypi \
#  /home/m039/Trash/sandbox/yocto/poky/meta-yocto \
#  /home/m039/Trash/sandbox/yocto/poky/meta-yocto-bsp \
#  "

#
# Для сборки может потребоваться какие-нибудь утилиты, пожалуйста,
# установите их с помощью средств своего дистрибутива.
#

#
# Сборка образа
#

bitbake rpi-basic-image

#
# Заливаем образ на SD карточку
#

sudo dd if=./tmp/deploy/images/rpi-basic-image-raspberrypi.rpi-sdimg of=/dev/mmcblk0


Ошибки

  • В системе у меня по-умолчанию python3, а для сборки нужен был python2. Решение: это (использовать virtualenv)

Ссылки


Скриншот



BuildRoot

О системе

Данную систему сборки использует OpenWrt.

Я не использовал эту систему раньше, поэтому добавить о ней ничего не могу, но она мне понравилась. Она оказалась очень простой в использовании и заработала, практически сразу.

Но установка образа, оказалась не красивой.

Инструкции

export BR=$SANDBOX/br
mkdir $BR && cd $BR

git clone --depth 1 git://github.com/gamaral/rpi-buildroot.git
cd rpi-buildroot
make raspberrypi_defconfig
make

#
#  Устанавливаем образ
#

sudo mkfs.vfat -F 16 -n boot /dev/mmcblk0p1
sudo mkdir -p mnt/boot
sudo mount /dev/mmcblk0p1 mnt/boot

sudo cp output/images/boot/* mnt/boot
sudo umount mnt/boot

sudo mkfs.ext3 -L rootfs /dev/mmcblk0p2
sudo mkdir -p mnt/rootfs
sudo mount /dev/mmcblk0p2 mnt/rootfs

sudo tar -xvpsf output/images/rootfs.tar -C mnt/rootfs
sudo umount mnt/rootfs


Ошибки

  • Были битые ссылки. Решение: скачать udev-182.tar.bz2 файлы и положить в папку $BR/RaspberryPi-BuildRoot/dl


Ссылки



Скриншот



OpenWrt

О системе

Тоже, что и BuildRoot, но собрался без ошибок.

Инструкции

export OW=$SANDBOX/ow
mkdir $OW && cd $OW

git clone https://code.google.com/p/raspberrypi-openwrt/

make menuconfig 
# выбрать bcm2835
make

#
# Устанавливаем образ
#

sudo dd if=./bin/brcm2708/openwrt-brcm2708-sdcard-vfat-ext4.img of=/dev/mmcblk0



Ссылки



Скриншот



Заключение


Впечатление

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

Я был крайне удивлен и рад, что узнал о таких проектах как Yocto project и OpenWRT, которые когда-то обошли меня стороной. Первый — прекрасное развитие OpenEmbedded, но в техническом плане ничего нового, второй проект мне захотелось просто попробовать.

Для себя же выбрал попробовать BuildRoot и, если что-то не устроит то перейду на Yocto project (взамен OpenEmbedded).

И конечно, не нужно собирать свои дистрибутивы (или образы), если можно попробовать уже готовые, это будет куда проще. На каждом сайте из систем сборки есть уже готовые образы.

Мое маленькое исследование подошло к концу и как результат решил его оформить в эту статью.

Что упустил

  • Не написал список пакетов, которые предоставляет система сборки
  • Есть ли команды, чтобы сразу сгенерировать конфигурацию для работы через nfs (только для удобства)
  • Не указал размер получившегося образа, время его сборки и общий размер папки, после компиляции

Материал для дальнейшего исследования


Последнее слово

Если найдете ошибку, пожалуйста, сообщите мне — поправлю.
Если пожелаете, добавлю ссылки на получившиеся у меня образы.
Если у вас есть замечания, комментария, какой-то текст кажется слишком простой и не нужный, пожалуйста, напишите лично.
Добавил скриншоты.
Tags:
Hubs:
+23
Comments 22
Comments Comments 22

Articles