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 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:
Следовательно, можно пересобрать 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 faalagolagomake <pkg>-graph-depends
fausia se laau faalagolago mo se afifi faapitoaBR2_GRAPH_OUT=png make graph-build
taimi fau fa'afuafua fa'atasi ai ma mea e maua ai le PNGmake 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:
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 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:
Fausia lau oe lava fa'atulagaina laupapa
Fa'aopoopo Faila Fa'atonu
Sei o tatou tilotilo i le lisi o faʻatonuga:
В списке видим 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):
Входим в первый раздел Target Options. Здесь можно выбрать целевую архитектуру, под которую будет вестись сборка.
Build options — здесь есть различные настройки сборки. Можно указать каталоги с исходными кодами, количество потоков сборки, зеркала для скачивания исходных кодов и прочие настройки. Оставим настройки по-умолчанию.
Toolchain – здесь настраивается сам инструментарий сборки. О нем подробнее.
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 позволяет задать будущие параметры созданной системы:
Большинство пунктов понятны из названия. Обратим внимание на следующие пункты:
Auala i laulau a tagata fa'aoga - laulau ma tagata fa'aoga e fau (
Пример файла. Будет создан пользователь 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
Здесь задаются настройки ядра. Само ядро конфигурируется через make linux-menuconfig.
Задать версию ядра можно по-разному: выбрать из предложенных, ввести версию вручную, указать репозиторий или готовый tarball.
Kernel configuration — путь к конфигу ядра. Можно выбрать конфигурацию по-умолчанию для выбранной архитектуры или defocnfig из Linux. В исходниках Linux есть набор defconfig’ов для разных целевых систем. НАйти нужный можно,
Раздел Target packages позволяет выбрать, какие пакеты будут установлены в собираемую систему. Пока оставим без изменений. Позже мы добавим свои пакеты в этот список.
Fa'atonu ata - o se lisi o ata faiga faila o le a aoina. Fa'aopoopo se ata iso
Bootloaders - filifilia o bootloaders e aoina. Sei o tatou filifili isolinix
Fa'atonu Systemd
Systemd становится одним из столбов linux, наравне с kernel и glibc. Поэтому вынес его настройку в отдельный пункт.
Настраивается через make menuconfig, далее Target packages → System tools → systemd. Здесь можно указать, какие службы systemd будут установлены и запущены при старте системы.
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
Tatou fa'aopoopoina le lagolago tu'ufa'atasiga a le Virtualbox Guest
Sefe ma alu ese. TAIMI: конфигурация сохранится в output/build/linux-$version/config, но не в board/my_x86_board/linux.config
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-диска.Параметры системы:
Tamomoe mai le iso ua tuufaatasia:
Lisi o mea fa'aoga
- Buildroot tusi lesona
puna: www.habr.com