Вот несколько шагов, которые помогут вам bitbake nano
в соответствии с инструкциями из книги.
Если не указано иное, все эти образцы и инструкции основаны на онлайн-копии кода книги- образцы. Хотя онлайн-ресурс удобен для копирования и вставки, он не полностью соответствует печатной копии и содержит как минимум одну дополнительную ошибку.
Первоначальная настройка рабочего пространства
В этом руководстве предполагается, что вы работаете с Yocto версии 2.5 («сумо»), установленной в /tmp/poky
, и что среда сборки войдет в /tmp/bbhello
. Если у вас еще нет библиотек Poky tools +, проще всего клонировать их с помощью:
$ git clone -b sumo git://git.yoctoproject.org/poky.git /tmp/poky
Затем вы можете инициализировать рабочее пространство с помощью:
$ source /tmp/poky/oe-init-build-env /tmp/bbhello/
Если вы запустите новое окно терминала, вам нужно будет повторить предыдущую команду, чтобы снова настроить среду оболочки, но она не должна заменять какие-либо файлы, созданные в рабочей области с первого раза.
Подключение к настройкам по умолчанию
Скрипт oe-init-build-env
должен был только что создать для вас эти файлы:
- bbhello / conf / local.conf
- bbhello / conf / templateconf.cfg
- bbhello / conf / bblayers.conf
Сохраните их, они заменяют собой некоторые инструкции в книге, а это означает, что вам не следует создавать или хранить файлы:
- bbhello / классы / base.bbclass
- bbhello / conf / bitbake.conf
Точно так же не перезаписывайте bbhello/conf/bblayers.conf
образцом книги. Вместо этого отредактируйте его, чтобы добавить одну строку, указывающую на вашу собственную папку meta-hello
, например:
BBLAYERS ?= " \
${TOPDIR}/meta-hello \
/tmp/poky/meta \
/tmp/poky/meta-poky \
/tmp/poky/meta-yocto-bsp \
"
Создание слоя и рецепта
Теперь создайте следующие файлы из примеров книг:
- мета-привет / conf / layer.conf
- мета-привет / редактор рецептов / nano / nano.bb
Мы будем редактировать эти файлы постепенно по мере появления ошибок.
Не могу найти ошибку рецепта
Ошибка:
ERROR: BBFILE_PATTERN_hello not defined
Это вызвано bbhello/meta-hello/conf/layer.conf
внутренней несовместимостью книжного веб-сайта. Он использует имя коллекции «hello», но в следующих двух строках используются суффиксы _test
. Просто измените их на _hello
, чтобы они соответствовали:
# Set layer search pattern and priority
BBFILE_COLLECTIONS += "hello"
BBFILE_PATTERN_hello := "^${LAYERDIR}/"
BBFILE_PRIORITY_hello = "5"
Интересно, что в печатном экземпляре книги этой ошибки нет.
Нет лицензионной ошибки
Ошибка:
ERROR: /tmp/bbhello/meta-hello/recipes-editor/nano/nano.bb: This recipe does not have the LICENSE field set (nano)
ERROR: Failed to parse recipe: /tmp/bbhello/meta-hello/recipes-editor/nano/nano.bb
Можно исправить, добавив параметр лицензии с одним из значений, распознаваемых bitbake. В этом случае добавьте строку на nano.bb
из:
LICENSE="GPLv3"
Ошибка синтаксического анализа рецепта
ERROR: ExpansionError during parsing /tmp/bbhello/meta-hello/recipes-editor/nano/nano.bb
[...]
bb.data_smart.ExpansionError: Failure expanding variable PV_MAJOR, expression was ${@bb.data.getVar('PV',d,1).split('.')[0]} which triggered exception AttributeError: module 'bb.data' has no attribute 'getVar'
Это исправлено обновлением специальных команд Python, используемых в рецепте, поскольку @bb.data
устарел и теперь удален. Вместо этого замените его на @d
, например:
PV_MAJOR = "${@d.getVar('PV',d,1).split('.')[0]}"
PV_MINOR = "${@d.getVar('PV',d,1).split('.')[1]}"
Ошибка контрольной суммы лицензии
ERROR: nano-2.2.6-r0 do_populate_lic: QA Issue: nano: Recipe file fetches files and does not have license file information (LIC_FILES_CHKSUM) [license-checksum]
Это можно исправить, добавив в рецепт директиву, сообщающую ему, какой файл с лицензионной информацией нужно захватить и какую контрольную сумму мы ожидаем от него.
Мы можем проследить, как рецепт генерирует SRC_URI
, и немного изменить его, чтобы он указывал на файл COPYING
в том же веб-каталоге. Добавьте эту строку в nano.bb
:
LIC_FILES_CHKSUM = "${SITE}/v${PV_MAJOR}.${PV_MINOR}/COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
Контрольная сумма MD5 в этом случае была получена в результате ручной загрузки и проверки соответствующего файла.
Сделанный!
Теперь bitbake nano
должен работать, и когда он будет завершен, вы увидите, что он построен nano
:
/tmp/bbhello $ find ./tmp/deploy/ -name "*nano*.rpm*"
./tmp/deploy/rpm/i586/nano-dbg-2.2.6-r0.i586.rpm
./tmp/deploy/rpm/i586/nano-dev-2.2.6-r0.i586.rpm
person
Darien
schedule
03.07.2018