Dar*_*ien 2 openembedded bitbake yocto
在“嵌入式 Linux 系统与 Yocto 项目”一书中,第 4 章包含一个名为“HelloWorld - BitBake 风格”的示例。我在尝试让旧示例与“Sumo”2.5 版配合使用时遇到了很多问题。
如果您像我一样,按照本书的说明遇到的第一个错误是您复制bitbake.conf并得到:
ERROR: ParseError at /tmp/bbhello/conf/bitbake.conf:749: Could not include required file conf/abi_version.conf
Run Code Online (Sandbox Code Playgroud)
而且复制过来之后abi_version.conf,你一直发现需要移动的交叉连接的文件越来越多,然后出现了一些相对路径错误......有没有更好的方法?
以下是一系列步骤,可让您bitbake nano根据本书的说明进行操作。
除非另有说明,这些示例和说明均基于本书代码示例的在线副本。虽然方便复制粘贴,但在线资源与打印副本并不完全一致,并且至少包含一个额外的错误。
本指南假设您使用的是 Yocto 2.5 版(“sumo”),安装到/tmp/poky,并且构建环境将进入/tmp/bbhello. 如果你还没有 Poky 工具+库,最简单的方法是克隆它:
$ git clone -b sumo git://git.yoctoproject.org/poky.git /tmp/poky
Run Code Online (Sandbox Code Playgroud)
然后您可以使用以下命令初始化工作区:
$ source /tmp/poky/oe-init-build-env /tmp/bbhello/
Run Code Online (Sandbox Code Playgroud)
如果您启动一个新的终端窗口,您将需要重复之前的命令,这将重新设置您的 shell 环境,但它不应替换第一次在工作区中创建的任何文件。
该oe-init-build-env脚本应该刚刚为您创建了这些文件:
保留这些,他们取代了一些书的说明,这意味着你应该不创建或有文件:
同样,也不能覆盖bbhello/conf/bblayers.conf用书的样本。相反,编辑它以添加一行指向您自己的meta-hello文件夹,例如:
BBLAYERS ?= " \
${TOPDIR}/meta-hello \
/tmp/poky/meta \
/tmp/poky/meta-poky \
/tmp/poky/meta-yocto-bsp \
"
Run Code Online (Sandbox Code Playgroud)
继续并从 book-samples创建以下文件:
当我们遇到错误时,我们将逐渐编辑这些文件。
错误:
ERROR: BBFILE_PATTERN_hello not defined
Run Code Online (Sandbox Code Playgroud)
这是由于图书网站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"
Run Code Online (Sandbox Code Playgroud)
有趣的是,该错误并未出现在该书的印刷版中。
错误:
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
Run Code Online (Sandbox Code Playgroud)
可以通过添加具有 bitbake 识别的值之一的许可证设置来修复。在这种情况下,添加一行到nano.bb:
LICENSE="GPLv3"
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)
这是通过更新配方中使用的特殊 python 命令来解决的,因为@bb.data已被弃用,现在已被删除。相反,将其替换为@d,例如:
PV_MAJOR = "${@d.getVar('PV',d,1).split('.')[0]}"
PV_MINOR = "${@d.getVar('PV',d,1).split('.')[1]}"
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)
这可以通过在配方中添加一个指令来解决,告诉它要获取什么包含许可证信息的文件,以及我们期望它具有什么校验和。
我们可以按照配方生成 的方式SRC_URI,稍微修改它以指向COPYING同一网络目录中的文件。将此行添加到nano.bb:
LIC_FILES_CHKSUM = "${SITE}/v${PV_MAJOR}.${PV_MINOR}/COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
Run Code Online (Sandbox Code Playgroud)
本例中的 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4052 次 |
| 最近记录: |