gpt4 book ai didi

yocto - 如何让 "HelloWorld - BitBake Style"在更新版本的 Yocto 上工作?

转载 作者:行者123 更新时间:2023-12-04 16:04:56 26 4
gpt4 key购买 nike

在“使用 Yocto 项目的嵌入式 Linux 系统”一书中,第 4 章包含一个名为 "HelloWorld - BitBake style" 的示例。 .我在尝试让旧示例与“Sumo”版本 2.5 兼容时遇到了一堆问题。

如果你像我一样,按照本书的说明遇到的第一个错误是你复制了 bitbake.conf 并得到:

ERROR: ParseError at /tmp/bbhello/conf/bitbake.conf:749: Could not include required file conf/abi_version.conf

并且在复制 abi_version.conf 之后,您不断发现需要移动的交叉连接文件越来越多,然后出现一些相对路径错误...更好的方法?

最佳答案

这里有一系列步骤,可以让你根据书中的说明bitbake nano

除非另有说明,否则这些示例和说明均基于 online copy of the book's code-samples .网上资源虽然方便复制粘贴,但与打印品并不完全一致,至少有一个额外的bug。

初始工作区设置

本指南假定您正在使用安装在 /tmp/poky 中的 Yocto 2.5 版(“sumo”),并且构建环境将进入 /tmp/bbhello 。如果您还没有 Poky 工具+库,最简单的方法是克隆它:

$ git clone -b sumo git://git.yoctoproject.org/poky.git /tmp/poky

然后您可以使用以下命令初始化工作区:

$ source /tmp/poky/oe-init-build-env /tmp/bbhello/

如果您启动一个新的终端窗口,您需要重复上一个命令,这将重新设置您的 shell 环境,但它不应替换第一次在工作区中创建的任何文件。

连接默认值

oe-init-build-env 脚本应该刚刚为您创建了这些文件:

  • bbhello/conf/local.conf
  • bbhello/conf/templateconf.cfg
  • bbhello/conf/bblayers.conf

保留这些,它们取代了一些书籍说明,这意味着您应该创建或拥有这些文件:

  • bbhello/classes/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 \
"

创建层和配方

继续创建以下文件from the book-samples :

  • meta-hello/conf/layer.conf
  • meta-hello/recipes-editor/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 of:

上添加一行
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 的方式,稍微修改它以指向同一 web 目录中的 COPYING 文件。将此行添加到 nano.bb:

LIC_FILES_CHKSUM = "${SITE}/v${PV_MAJOR}.${PV_MINOR}/COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"

本例中的 MD5 校验和来自手动下载和检查 the matching file .

完成!

现在 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

关于yocto - 如何让 "HelloWorld - BitBake Style"在更新版本的 Yocto 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51145263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com