Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Faatomuaga

В данной серии статей я хочу рассмотреть систему сборки дистрибутива buildroot и поделиться опытом её кастомизации. Здесь будет практический опыт создания небольшой ОС с графическим интерфейсом и минимальным функционалом.

Muamua lava, e le tatau ona e fenumiai le faiga fau ma le tufatufaina. Buildroot e mafai ona fausia se faiga mai se seti o afifi o loʻo ofoina atu i ai. Buildroot e fausia i luga ole makefiles ma o lea e tele naua tomai faʻapitoa. Suia se afifi i se isi lomiga, faʻaopoopo lau oe lava afifi, sui tulafono mo le fausiaina o se afifi, faʻavasega le faila faila pe a uma ona faʻapipiʻi uma afifi? buildroot e mafai ona faia nei mea uma.

В России buildroot используется, но на мой взгляд мало русскоязычной информации для новичков.

Цель работы — собрать дистрибутив с live-загрузкой, интерфейсом icewm и браузером. Целевая платформа — virtualbox.

Aisea e fausia ai lau lava tufatufaga? E masani ona mana'omia galuega fa'atapula'a ma fa'agata fa'aagaaga. E oʻo lava i le tele o taimi i le masini e te manaʻomia le fatuina o firmware. O le fetuutuuna'i o se fa'asoa fa'amoemoe lautele e ala i le fa'amamāina o afifi e le mana'omia ma fa'aliliuina i le firmware e sili atu le fa'atinoina o galuega nai lo le fausiaina o se tufatufaga fou. O le fa'aaogaina o Gentoo e iai fo'i ona tapula'a.

Buildroot система очень мощная, но она ничего не сделает за вас. Она может лишь дать возможности и автоматизировать процесс сборки.

Альтернативные системы сборки (yocto, open build system и прочие) не рассматриваются и не сравниваются.

O fea e maua ai ma le auala e amata ai

Upega tafa'ilagi o Poloketi - buildroot.org. Здесь можно скачать актуальную версию и прочитать руководство. Там же можно обратиться к сообществу, есть багтрекер, mail-lists и irc-канал.

Buildroot e fa'agaoioia defconfigs mo le laupapa fa'amoemoe o le fale. Defconfig o se faila fa'atulagaina e teu ai na'o filifiliga e leai ni tau fa'aletonu. O ia lava na te fuafuaina mea o le a aoina ma pe faʻafefea. I lenei tulaga, e mafai ona e faʻapipiʻi eseʻese le faʻapipiʻi o le busybox, linux-kernel, uglibc, u-boot ma barebox bootloaders, ae o latou uma o le a nonoa i le laupapa taulaʻi.
После распаковки скачанного архива или клонировании из git получаем готовый к работе buildroot. Подробно о структуре каталогов можно прочитать в руководстве, расскажу о самых важных:

komiti — каталог с файлами, специфичными для каждой платы. Это могут быть скрипты формирования образов системы(iso, sdcart, cpio и прочие), каталог overlay, конфиг ядер и прочее
fetuunai — собственно defconfig платы. Defconfig — это неполная конфигурация платы. В нем хранится только отличные от дефолтных настроек параметры
dl — каталог со скачанными исходными кодами/файлами для сборки
galuega faatino/fa'atatau — собранная файловая система полученной ОС. В дальнейшем из нее создаются образы для загрузки/установки
galuega faatino/ talimalo - mea fa'aoga mo le fa'apotopotoga
gaosiga/fausia - afifi fa'atasi

Конфигурирование сборки осуществляется через KConfig. Эта же система используется для сборки ядра linux. Список самых часто используемых команд (выполнять в каталоге buildroot):

  • make menuconfig — вызвать настройку сборки. Так же можно с использование графического интерфейса (make nconfig,make xconfig,make gconfig)
  • fai linux-menuconfig - valaʻau le kernel configuration.
  • fa'amama - fa'amama i'uga fau (mea uma o lo'o teuina i totonu o galuega)
  • fai - fausia se faiga. E le toe fa'aopoopoina faiga ua uma ona fa'apipi'iina.
  • fai defconfig_name - sui le faʻatulagaga i se faʻamatalaga patino
  • fai lisi-defconfigs - faʻaali se lisi o faʻaoga
  • fai puna - naʻo le downloadina o faila faʻapipiʻi, e aunoa ma le fausiaina.
  • fai fesoasoani - lisi poloaiga e mafai

Fa'amatalaga taua ma fesoasoani fesoasoani

Buildroot не пересобирает уже собранные пакеты! Поэтому может создаться ситуация, когда потребуется полная пересборка.

E mafai ona e toe fausia se afifi ese ma le poloaiga fai packagename-rebuild. Mo se faʻataʻitaʻiga, e mafai ona e toe fausia le fatu Linux:

make linux-rebuild

Buildroot хранит состояние любого пакета созданием .stamp-файлов в каталоге output/build/$packagename:

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Следовательно, можно пересобрать root-fs и образы без пересборки пакетов:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

Fa'aoga Fuafuaga

buildroot o loʻo i ai se seti o fesuiaiga mo faʻaoga faigofie

  • $TOPDIR - buildroot directory
  • $BASEDIR - OUTPUT directory
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — каталоги сборки host fs, staging fs, target fs.
  • $BUILD_DIR - fa'atonuga fa'atasi ma afifi ma fa'apipi'iina

Faʻaaliga vaaia

В buildroot есть возможность по визуализации.Можно построить схему зависимостей, график времени сборки, график размера пакетов в итоговой системе. Результаты в виде pdf файлов( на выбор есть svn,png) в каталоге output/graph.

Fa'ata'ita'iga o fa'atonuga fa'aaliga:

  • make graph-depends fausia laau faalagolago
  • make <pkg>-graph-depends fausia se laau faalagolago mo se afifi faapitoa
  • BR2_GRAPH_OUT=png make graph-build taimi fau fa'afuafua fa'atasi ai ma mea e maua ai le PNG
  • make graph-size fa'ailoga le tele o le afifi

Fa'amatalaga aoga

E iai se subdirectory i le buildroot directory fa'aoga c полезными скриптами. Например, там есть скрипт, проверяющий корректность описания пакетов. Это может быть полезно при добавлении своих пакетов (я это сделаю позже). В файле utils/readme.txt есть описание этих скриптов.

Tatou fausia se faasoasoaga

Важно напомнить, что все операции ведутся от лица обычного пользователя, не root.
Все команды выполняются в корне buildroot. В поставке buildroot уже есть набор конфигураций под многие распространённые платы и виртуализацию.

Sei o tatou tilotilo i le lisi o faʻatonuga:

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Su'e ile qemu_x86_64_defconfig config

make qemu_x86_64_defconfig

Ma tatou amata le faʻapotopotoga

make

Ua mae'a lelei le fausiaina, va'ai i'uga:

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Buildroot ua tuufaatasia ata e mafai ona e tamoe i Qemu ma faʻamaonia e aoga.

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

O le taunuuga o se faiga o loʻo taʻavale i le qemu:

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Fausia lau oe lava fa'atulagaina laupapa

Fa'aopoopo Faila Fa'atonu

Sei o tatou tilotilo i le lisi o faʻatonuga:

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

В списке видим pc_x86_64_efi_defconfig. Мы создадим свою плату, скопировав её с конфигурации:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Сразу же создадим каталог платы для хранения своих скриптов, rootfs-overlay и прочих нужных файлов:

mkdir board/my_x86_board

Su'e i le defconfig lenei:

make my_x86_board_defconfig

Таким образом, теперь конфиг сборки (хранится в .config в корне каталога buildroot’а) соответствует целевой машине x86-64 legacy(bios) загрузкой.

Sei o tatou kopiina le linux-kernel configuration (aoga mulimuli ane):

cp board/pc/linux.config board/my_x86_board/

Fa'atulagaina fa'amaufa'ailoga e ala ile KConfig

Tatou amata le seti:

make menuconfig 

Откроется окно KConfig. Есть возможность конфигурировать с графическим интерфейсом (make nconfig, make xconfig, make gconfig):

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Входим в первый раздел Target Options. Здесь можно выбрать целевую архитектуру, под которую будет вестись сборка.

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Build options — здесь есть различные настройки сборки. Можно указать каталоги с исходными кодами, количество потоков сборки, зеркала для скачивания исходных кодов и прочие настройки. Оставим настройки по-умолчанию.

Toolchain – здесь настраивается сам инструментарий сборки. О нем подробнее.

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Ituaiga mea faigaluega - ituaiga o mea faigaluega faʻaaogaina. E mafai ona avea lenei mea ma se meafaigaluega e fausia i totonu o le buildroot poʻo se mea i fafo (e mafai ona e faʻamaonia le lisi ma le mea ua uma ona fausia poʻo le url mo le siiina). O lo'o iai avanoa fa'aopoopo mo fausaga eseese. Mo se faʻataʻitaʻiga, mo le lima e mafai ona e filifilia naʻo le Linaro version o le mea faigaluega fafo.

C library – выбор библиотеки С. От этого зависит работа всей системы. Обычно используется glibc, поддерживающая весь возможный функционал. Но она может оказаться слишком большой для встроенной системы, поэтому часто выбирают uglibc или musl. Мы выберем glibc (в дальнейшем это потребуется для использования systemd).

Kernel Headers и Custom Kernel Headers series – должно совпадать с версией ядра, которое будет в собираемой системе. Для kernel headers можно так же указать путь к тарболу или git-репозиторий.

GCC COMPILER VERSIONS – выбор версии компилятора, которая будет использована для сборки
Enable C++ support – выберем для сборки с поддержкой библиотек c++ в системе. В дальнейшем нам это пригодится.

Additional gcc options – можно задать дополнительные опции компилятора. Нам без надобности пока что.

System configuration позволяет задать будущие параметры созданной системы:

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Большинство пунктов понятны из названия. Обратим внимание на следующие пункты:
Auala i laulau a tagata fa'aoga - laulau ma tagata fa'aoga e fau (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Пример файла. Будет создан пользователь user с паролем admin, автоматически gid/uid, /bin/sh шеллом, группой по-умолчанию user, член группы root, комментарием Foo user

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Root filesystem overlay directories — каталог, накладываемый поверх собранной target-fs. Добавляет новые файлы и заменяет имеющиеся.

Custom scripts to run before creating filesystem images — Скрипты, выполняемые непосредственно перед сворачиванием файловой системы в образы. Сам скрипт пока оставим пустым

Tatou o i le vaega Kernel

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Здесь задаются настройки ядра. Само ядро конфигурируется через make linux-menuconfig.
Задать версию ядра можно по-разному: выбрать из предложенных, ввести версию вручную, указать репозиторий или готовый tarball.

Kernel configuration — путь к конфигу ядра. Можно выбрать конфигурацию по-умолчанию для выбранной архитектуры или defocnfig из Linux. В исходниках Linux есть набор defconfig’ов для разных целевых систем. НАйти нужный можно, e ala i le tilotilo sa'o i puna'oa iinei. Mo se faʻataʻitaʻiga, mo se laupapa uliuli ponaivi beagle e te mafaia filifili config.

Раздел Target packages позволяет выбрать, какие пакеты будут установлены в собираемую систему. Пока оставим без изменений. Позже мы добавим свои пакеты в этот список.
Fa'atonu ata - o se lisi o ata faiga faila o le a aoina. Fa'aopoopo se ata iso

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Bootloaders - filifilia o bootloaders e aoina. Sei o tatou filifili isolinix

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Fa'atonu Systemd

Systemd становится одним из столбов linux, наравне с kernel и glibc. Поэтому вынес его настройку в отдельный пункт.

Настраивается через make menuconfig, далее Target packages → System tools → systemd. Здесь можно указать, какие службы systemd будут установлены и запущены при старте системы.

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Fa'asaoina le fa'atulagaina o faiga

Matou te faʻasaoina lenei config e ala ile KConfig.

Ona fa'asaoina lea o la matou defconfig:

make savedefconfig

Linux Kernel Configuration

O le Linux kernel configuration o loʻo faʻaaogaina i le poloaiga lenei:

make linux-menuconfig

Tatou fa'aopoopo le lagolago mo le Virtualbox video card

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Tatou fa'aopoopoina le lagolago tu'ufa'atasiga a le Virtualbox Guest

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Sefe ma alu ese. TAIMI: конфигурация сохранится в output/build/linux-$version/config, но не в board/my_x86_board/linux.config

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

O lea la, e tatau ona e kopiina ma le lima le config i se nofoaga e teu ai:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

После чего выполним полную пересборку всей системы.Т.к. buildroot не пересобирает уже собранное, то надо вручную указать пакеты для пересборки. Чтобы не терять время и нервы, небольшую систему проще пересобрать целиком):

make clean;make

По завершении сборки запускаем VirtualBox(проверялось на версии 5.2 и 6.0) с загрузкой с cd-диска.Параметры системы:

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Tamomoe mai le iso ua tuufaatasia:

Buildroot - vaega 1. Faʻamatalaga lautele, faʻapipiʻiina o se faiga laʻititi, faʻatulagaina e ala i le lisi

Lisi o mea fa'aoga

  1. Buildroot tusi lesona

puna: www.habr.com

Faaopoopo i ai se faamatalaga