yocto poky @ x86_64 qemu开发QuickStart

本文介绍了Yocto,一种基于Linux的构建系统,详细讲解了从安装依赖、下载代码、配置、编译到运行QEMU和创建工具链的过程,以及如何查看和解决编译问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

yocto的读作“幺科托",它的本意是一种非常小的度量单位(10的负24次方),在这里它代表一种LINUX的发行版及其构建系统。

它的使用非常简单,按照如下步骤操作,每个开发者都可以构建一套自己的LINUX发行版镜像。

开发环境:

安装依赖

$ sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev python3-subunit mesa-common-dev zstd liblz4-tool file locales
$ sudo locale-gen en_US.UTF-8

下载代码:

两种方式下载代码

方式1:下载POKY仓库

git clone git://git.yoctoproject.org/poky

方式2:下载压缩包

https://www.yoctoproject.org/software-overview/downloads/archived-releases/

配置

$ tar xvf poky-aa63b25cbe25d89ab07ca11ee72c17cab68df8de.tar.bz2
$ cd poky/
$ source oe-init-build-env

编译

$ bitbake core-image-sato

下载的原始压缩包中不包括发行版package源码,构建框架在编译过程中会自动下载源码编译,下载的源码包存储在路径poky/build/downloads下:

编译过程:

编译结束

运行QEMU

执行如下命令启动虚拟机:

$ runqemu qemux86-64

编译其它架构

打开文件build/conf/local.conf,可以看到构建系统支持多个ARCH的QEMU仿真运行:

选择熟悉的MIPS再次执行构建运行

编译工具链

$ bitbake meta-toolchain

编译结果,工具链安装包poky-glibc-x86_64-meta-toolchain-mips32r2-qemumips-toolchain-4.2.3.sh

工具链被安装到/opt/poky/4.2.3/sysroots/x86_64-pokysdk-linux/usr/bin/mips-poky-linux目录下:

使用工具链前最好source一下/opt/poky/4.2.3/environment-setup-mips32r2-poky-linux

编译代码:

mips-poky-linux-gcc  -meb -mabi=32 -mhard-float -march=mips32r2 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/poky/4.2.3/sysroots/mips32r2-poky-linux main.c

编译的是大端程序:

编译PPC QEMU启动镜像

编译PPC工具链

查看目标依赖

yocto支持查看目标依赖,依赖数据以为.dot形式输出,之后在用graphviz工具将生成的task-depends.dot转成图像:

$ bitbake -g meta-toolchain
$ dot -v -Tsvg -o dep.svg task-depends.dot

会生成一张巨复杂的依赖关系图:

编译问题

经过验证,如果遇到如下编译错误,再次执行编译命令即可,无需额外处理。

参考文档

imx8mqevk yocto 编译wifi驱动使用toolchain_bitbakeimx8 toolchain_自学Linux记录的博客-优快云博客

Yocto Project Quick Build — The Yocto Project ® 4.2.999 documentation

Yocto Project – It's not an embedded Linux distribution – it creates a custom one for you

LUG's repo file generator

Yocto Project Quick Build — The Yocto Project ® 4.2.999 documentation


结束

| WARNING: Backtrace (BB generated script): | #1: do_configure, /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/temp/run.do_configure.1013554, line 152 | #2: main, /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/temp/run.do_configure.1013554, line 156 ERROR: Task (/home/tisdk/tisdk/sources/oe-core/meta/recipes-devtools/qemu/qemu-native_8.2.2.bb:do_configure) failed with exit code '1' WARNING: qemu-native-8.2.2-r0 do_populate_lic: Could not copy license file /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/qemu-8.2.2/COPYING to /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/license-destdir/x86_64/qemu-native/COPYING: [Errno 2] No such file or directory: '/home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/qemu-8.2.2/COPYING' WARNING: qemu-native-8.2.2-r0 do_populate_lic: Could not copy license file /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/qemu-8.2.2/COPYING.LIB to /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/license-destdir/x86_64/qemu-native/COPYING.LIB: [Errno 2] No such file or directory: '/home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/qemu-8.2.2/COPYING.LIB' ERROR: qemu-native-8.2.2-r0 do_populate_lic: QA Issue: qemu-native: LIC_FILES_CHKSUM points to an invalid file: /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/qemu-8.2.2/COPYING [license-checksum] ERROR: qemu-native-8.2.2-r0 do_populate_lic: QA Issue: qemu-native: LIC_FILES_CHKSUM points to an invalid file: /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/qemu-8.2.2/COPYING.LIB [license-checksum] ERROR: qemu-native-8.2.2-r0 do_populate_lic: Fatal QA errors were found, failing task. ERROR: Logfile of failure stored in: /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/temp/log.do_populate_lic.1121716 ERROR: Task (/home/tisdk/tisdk/sources/oe-core/meta/recipes-devtools/qemu/qemu-native_8.2.2.bb:do_populate_lic) failed with exit code '1'
最新发布
07-30
<think>我们正在处理一个Yocto构建错误,涉及两个任务失败:`do_configure` 和 `do_populate_lic`。 首先,错误信息显示: 1. `qemu-native_8.2.2.bb:do_configure` 失败,退出码为1。 2. `do_populate_lic` 任务失败,因为找不到许可证文件(COPYING和COPYING.LIB),导致QA检查失败。 分析: - `do_configure` 失败是根本原因,因为配置失败导致后续任务(包括编译和安装)无法进行,从而没有生成许可证文件。 - `do_populate_lic` 失败是结果,因为配置失败后,源码目录可能没有正确设置或构建,导致许可证文件缺失。 因此,我们需要重点解决 `do_configure` 的失败。 步骤: 1. 查看 `do_configure` 的日志文件:`/home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/temp/log.do_configure.1013554`(注意:实际路径中的数字可能不同,但日志路径在错误信息中已给出)。 2. 根据日志分析配置失败的具体原因。 常见原因: - 依赖缺失:qemu在配置阶段可能需要某些主机上的开发包(如glib、zlib等)。 - 配置选项错误:配方中传递的配置参数可能存在问题。 - 权限问题:构建目录权限不足。 - 环境问题:环境变量设置不正确。 由于错误信息中未给出具体配置错误,我们需要查看日志。 但是,我们也可以尝试以下通用解决方法: 1. 清理并重新构建: ```bash bitbake -c cleansstate qemu-native bitbake qemu-native ``` 2. 确保主机满足构建要求:根据Yocto文档,安装必要的主机包(如ubuntu上): ```bash sudo apt-get install gcc g++ make libssl-dev libglib2.0-dev zlib1g-dev ``` 3. 检查配方中的配置选项:查看 `qemu-native_8.2.2.bb` 文件,特别是 `EXTRA_OECONF` 变量。 4. 手动运行配置步骤(在构建目录中): ```bash cd /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/qemu-8.2.2 ./configure --help # 查看配置选项,然后尝试运行配方中使用的配置命令(从日志中获取) ``` 关于 `do_populate_lic` 的失败,在解决 `do_configure` 后应该会自动解决,因为许可证文件是源码自带的,如果源码解压正确就应该存在。如果源码解压后没有这些文件,可能是源码包问题。 注意:在构建过程中,如果 `do_configure` 失败,那么 `do_populate_lic` 任务也会失败,因为它在配置之后运行(但实际顺序可能因依赖关系而不同,不过通常配置失败后不会继续后续任务,但这里似乎触发了许可证检查)。 但是,错误信息显示在 `do_populate_lic` 任务中找不到许可证文件,这可能是由于配置失败导致源码目录没有正确生成?或者源码下载解压失败?需要检查 `do_unpack` 是否成功。 建议步骤: 1. 检查源码目录是否存在:`/home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/qemu-8.2.2`。 2. 如果不存在,则可能是 `do_unpack` 失败,需要检查下载和解压步骤。 3. 如果存在,检查该目录下是否有 `COPYING` 和 `COPYING.LIB` 文件。如果没有,可能是源码包问题;如果有,则可能是路径错误。 由于配方中 `LIC_FILES_CHKSUM` 指向这些文件,如果文件存在但路径不匹配,可能是配方中的路径设置错误。 但是,当前错误信息显示文件不存在,所以先解决 `do_configure` 失败的问题,再确认源码目录。 因此,我们首先解决配置错误。 由于没有具体的配置错误日志,我们只能提供一般性指导。如果用户能提供日志,可以进一步分析。 总结: 主要解决 `do_configure` 失败。清理状态,检查依赖,查看配置日志。 §§相关问题§§ 1. 如何查看Yocto构建任务的具体日志文件? 2. 在Yocto中,如何解决常见的配置(do_configure)失败问题? 3. 为什么在配置失败后会出现许可证文件缺失的错误? 4. 如何确保主机系统满足构建qemu-native的依赖要求? 5. 在Yocto配方中,LIC_FILES_CHKSUM的作用是什么?如何正确设置?</think>这个错误发生在 Yocto/OE 构建系统中,主要涉及两个任务失败:`qemu-native_8.2.2.bb:do_configure` 和 `do_populate_lic`。以下是详细分析和解决方案: ### 错误分析: 1. **`do_configure` 失败**(核心问题): - QEMU 的配置阶段失败(`qemu-native_8.2.2.bb:do_configure`) - 错误代码:`exit code '1'` - 可能原因: - 缺少主机依赖(如 Python、Ninja 等) - 配置选项冲突 - 构建目录权限问题 - 源码损坏或补丁应用失败 2. **`do_populate_lic` 失败**(衍生问题): - 因配置失败,无法找到许可证文件: - `/qemu-8.2.2/COPYING` - `/qemu-8.2.2/COPYING.LIB` - 触发 QA 错误:`LIC_FILES_CHKSUM points to an invalid file` - 根本原因是配置未完成导致源码未正确准备 ### 解决步骤: 1. **检查配置日志**: ```bash less /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/temp/log.do_configure.1013554 ``` 查找关键错误信息(如缺失依赖、配置中止位置) 2. **安装主机依赖**(常见解决方案): ```bash # Ubuntu/Debian 示例 sudo apt install ninja-build meson pkg-config libglib2.0-dev libpixman-1-dev ``` 3. **清理并重建**: ```bash bitbake -c cleansstate qemu-native bitbake -c cleanall qemu-native bitbake qemu-native ``` 4. **检查配方元数据**: - 确认 `qemu-native_8.2.2.bb` 中的配置选项: ```bitbake EXTRA_OECONF = " \ --disable-werror \ --enable-modules \ --enable-linux-user \ --disable-gtk --disable-vte \ ``` - 验证 `LIC_FILES_CHKSUM` 是否匹配源码: ```bitbake LIC_FILES_CHKSUM = "file://COPYING;md5=... \ file://COPYING.LIB;md5=..." ``` 5. **手动验证源码**: ```bash cd /home/tisdk/tisdk/build/arago-tmp-default-glibc/work/x86_64-linux/qemu-native/8.2.2/ ls qemu-8.2.2/COPYING* # 确认文件存在 ``` ### 预防措施: 1. 在 `local.conf` 中添加: ```bitbake LICENSE_FLAGS_ACCEPTED = "commercial" ``` 2. 定期更新层和配方: ```bash cd sources/oe-core && git pull ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值