Работа с системой Yocto
Ох, ну и мудотенная хренотень этот Yocto Project. Ради получения ядра размером в пару мегабайт и фс, генерится больше 50гбт какого-то говна на протяжении целых суток. По мне, так это трэш какой-то. И очень печально конечно, если на этот говно-проект будут ориентироваться разработчики встраиваемых систем.
Контрол Ц + контрол В с сайта ibm.com "The Yocto Project™ – это Open Source-проект, целью которого является упрощение разработки специальных дистрибутивов Linux для встраиваемых систем и обеспечение их переносимости между различными платформами."
В общем, будущее за говнокодом, поэтому здесь основные первые шаги при знакомстве с yocto.
Процесс сборки описан довольно подробно в документации.
После установки/распаковки дистрибутива имеем примерно вот такую папочку со следующим содержимым:
$ ls -l итого 240 drwxr-xr-x 6 dima dima 4096 дек. 16 09:16 bitbake drwxr-xr-x 13 dima dima 4096 дек. 16 09:16 documentation -rw-r--r-- 1 dima dima 14664 дек. 16 09:16 fsl-setup-poky -rw-r--r-- 1 dima dima 545 дек. 16 09:16 LICENSE drwxr-xr-x 21 dima dima 4096 дек. 16 09:16 meta drwxr-xr-x 17 dima dima 4096 дек. 16 09:21 meta-fsl-networking drwxr-xr-x 13 dima dima 4096 дек. 16 09:16 meta-fsl-ppc drwxr-xr-x 7 dima dima 4096 дек. 16 09:21 meta-fsl-ppc-toolchain drwxr-xr-x 4 dima dima 4096 дек. 16 09:16 meta-hob drwxr-xr-x 16 dima dima 4096 дек. 16 09:16 meta-oe drwxr-xr-x 6 dima dima 4096 дек. 14 17:01 meta-skeleton drwxr-xr-x 11 dima dima 4096 дек. 16 09:21 meta-virtualization drwxr-xr-x 6 dima dima 4096 дек. 14 17:01 meta-yocto drwxr-xr-x 8 dima dima 4096 дек. 14 17:01 meta-yocto-bsp -rwxr-xr-x 1 dima dima 1592 дек. 16 09:16 oe-init-build-env -rw-r--r-- 1 dima dima 2038 дек. 16 09:16 README -rw-r--r-- 1 dima dima 17436 дек. 16 09:16 README.hardware drwxr-xr-x 9 dima dima 4096 дек. 16 09:16 scripts drwxr-xr-x 11 dima dima 131072 марта 3 16:07 sources drwxrwxr-x 260 dima dima 4096 дек. 18 04:41 sstate-cache
Далее нужно доустановить недостающие пакеты с помощью скрипта
$ . /scripts/host-prepare.sh
Следующий шаг - это конфигурирование yocto для сборки под конкретную цель.
Выполняется, для примера, вот так:
source ./fsl-setup-poky -m p5040rdb -j14 -t14
После выполнении этой команды создастся рабочая папочка, в моём случае это: build_p5040rdb_release
Теперь нужно перейти в неё и можно приступать к самой сборке. По-джидайски это, наверное, через использование bitbake. Для примера так:
$ bitbake fsl-image-minimal
с использованием графики - это запуск некой программки hob
$ hob
В hob можно выбрать цель, образ для сборки, настроить количество одновременных потоков для ускорения сборки и пр.
После завершения сборки Yocto Project готовые образы можно найти в
build_p5040ds_release/tmp/deploy/images
Кросс-компилятор находится где-то тут (искать по маске "-linux-gcc"):
/build_p5040ds_release/tmp/sysroots
Иногда при запуске hob или bitbake можно увидеть вот такое сообщение:
ERROR: Only one copy of bitbake should be run against a build directory
Это значит, что уже запущен bitbake:
ps -ef|grep bitbake
собранные пакеты располагаются в
/build_p5040ds_release/tmp/work/
Если требуется удалить какой-то пакет, то нужно использовать bitbake как-то вот так:
bitbake -c clean virtual/kernel bitbake -c cleansstate pulseaudio bitbake -c cleansstate u-boot
Для настройки ядра linux в Yocto Project:
bitbake -c menuconfig virtual/kernel
Для сборки ядра linux в Yocto Project:
$ bitbake -c compile -f virtual/kernel $ bitbake virtual/kernel
Настройка ядра для конкретной системы в Yocto Project:
MACHINE=p5040ds bitbake -c menuconfig virtual/kernel
Сборка ядра под конкретную систему в Yocto Project:
$ MACHINE=p5040ds-64b bitbake -c compile -f virtual/kernel $ MACHINE=p5040ds-64b bitbake virtual/kernel
В случае, если появляется вот такая надпись:
ERROR: OE-core's config sanity checker detected a potential misconfiguration. Either fix the cause of this error or at your own risk disable the checker (see sanity.conf). Following is the list of potential problems / advisories: Toolchain tunings invalid: Multilib 'lib64' (ppc64e5500) is also the default tuning. ERROR: Execution of event handler 'check_sanity_eventhandler' failed
то комментируем все строки в файле meta/conf/sanity.conf как-то так (не знаю, что это значит, но помогает):
#BB_MIN_VERSION = "1.17.1" #SANITY_ABIFILE = "${TMPDIR}/abi_version" #SANITY_VERSION ?= "1" #LOCALCONF_VERSION ?= "1" #LAYER_CONF_VERSION ?= "5" #SITE_CONF_VERSION ?= "1" #INHERIT += "sanity"
Как добавить новый пакет в цель сборки core-image-minimal:
1. Создать рецепт сборки, а лучше качнуть его из инета, поскольку он наверняка уже есть там. Затем скопировать его вот сюда как вариант: poky/meta/recipes-devtools
2. В файле poky/build/conf/local.conf добавить следующую строчку:
CORE_IMAGE_EXTRA_INSTALL = "efibootmgr"
либо вот так:
IMAGE_INSTALL_append = " lua5.1 efibootmgr"
где efibootmgr - название нового пакета и одноименное название рецепта сборки в poky/meta/recipes-devtools
3. запустить процесс сборки через hob и убедиться, что пакет добавлен при сборке цели core-image-minimal.
Сборка отдельных утилит в системе yocto выполняется согласно доступному списку команд для каждой утилиты. Список команд можно посмотреть так, например, для утилиты efibootmgr:
$ bitbake -c listtasks efibootmgr
Чтобы удалить утилиту с исходниками из tmp/work/corei7-64-poky-linux/efibootmgr, нужно выполнить:
bitbake -c cleansstate efibootmgr
Чтобы собрать утилиту, нужно выполнить:
bitbake -c compile efibootmgr
Опция "-v" добавит подробный вывод информации о процессе сборки:
bitbake -v -c compile efibootmgr