Yocto开发篇 | Poky添加一个demo层

本文详细介绍了如何使用Bitbake创建meta-demo层,添加到构建目录,并执行镜像编译与单独编译Demo层的过程。涉及步骤包括设置环境变量、创建新层、配置bblayers.conf以及实际操作指令。

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

一、使用bitbake命令创建demo层

$ export PATH=$PATH:/home/neutionwei/poky/bitbake/bin
$ export BBPATH=/home/neutionwei/poky/build
$ cd ~/poky
$ bitbake-layers create-layer meta-demo
NOTE: Starting bitbake server...
Add your new layer with 'bitbake-layers add-layer meta-demo'

二、添加demo层到构建目录

$ cd build
$ bitbake-layers add-layer ../meta-demo
NOTE: Starting bitbake server...

cat命令查看以下bblayer,conf文件,可以看到倒数第二行把meta-demo添加到构建目录!

$ cat conf/bblayers.conf
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
/home/neutionwei/proj/yocto/poky/meta \
/home/neutionwei/proj/yocto/poky/meta-poky \
/home/neutionwei/proj/yocto/poky/meta-yocto-bsp \
/home/neutionwei/proj/yocto/poky/meta-demo \
"

三、编译镜像或者单独编译demo层

(1)编译镜像:

$ cd build
$ bitbake core-image-minimal
Parsing recipes: 100% |#################################################################################################| Time: 0:00:17
Parsing of 769 .bb files complete (0 cached, 769 parsed). 1301 targets, 40 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.46.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "x86_64-poky-linux"
MACHINE              = "qemux86-64"
DISTRO               = "poky"
DISTRO_VERSION       = "3.1"
TUNE_FEATURES        = "m64 core2"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       
meta-demo            = "my-yocto-3.1:5d47cdf448b6cff5bb7cc5b0ba0426b8235ec478"

Initialising tasks: 100% |##############################################################################################| Time: 0:00:01
Sstate summary: Wanted 0 Found 0 Missed 0 Current 1159 (0% match, 100% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 3156 tasks of which 3156 didn't need to be rerun and all succeeded.

(2)单独编译demo层:

$ bitbake meta-demo

<think>嗯,用户现在想了解如何在Yocto中从零开始添加一个hello程序。之前的对话中,用户遇到了关于TEMPLATECONF路径的错误,现在转向如何添加自定义程序。这可能意味着用户已经解决了构建环境的问题,现在想进一步学习Yocto的配方开发。 首先,我需要确认用户的需求。他们可能是一个刚开始使用Yocto开发者,想要打包一个简单的应用程序,比如经典的“Hello World”。用户需要一步步的指导,包括创建、编写配方、构建和测试。可能需要详细说明每个步骤,确保他们能够理解和操作。 接下来,我应该考虑用户可能的知识水平。他们可能对Yoctolayer)和配方(recipe)有基本了解,但需要具体指导如何从头开始。需要解释必要的目录结构,比如的创建,配方文件的编写,以及如何将添加到构建配置中。 然后,我需要确定正确的步骤。通常,添加自定义程序到Yocto涉及以下几个步骤:创建自定义,编写配方(.bb文件),配置构建系统以包含该,然后构建和测试程序。可能还需要解释如何编写简单的Makefile,以及如何确保配方正确引用源代码。 另外,用户可能会遇到的问题包括路径错误、未正确添加到bblayers.conf、配方语法错误等。应该在指导中包含这些常见问题的排查方法,比如检查是否启用,配方是否在正确的目录,构建命令是否正确执行。 同时,用户可能希望了解如何将本地源代码包含到配方中,而不是从远程仓库获取。因此,示例中使用file://协议引用本地文件是合适的。需要提醒用户将源代码放在正确的目录下,并注意文件权限问题。 最后,确保步骤清晰,示例代码准确,并提供验证方法,如运行生成的二进制文件。可能需要补充一些高级内容,如依赖管理、版本更新等,但根据用户的问题,保持基础即可,避免信息过载。 总结,回答应分步骤,详细说明每个部分,提供示例代码,并包含常见问题解决,确保用户能够顺利实现添加hello程序的目标。</think>在 Yocto 中从零开始添加一个自定义的 "hello" 程序,需要完成以下步骤: --- ### **1. 创建自定义Layer)** Yocto 通过“”(Layer)管理元数据和自定义配置。你需要先创建一个来存放你的程序。 #### **步骤:** ```bash # 进入 Yocto 源码目录(例如:poky) cd ~/work/yocto/poky # 使用 bitbake-layers 工具创建新 bitbake-layers create-layer meta-hello # 创建后,目录结构如下: # meta-hello/ # ├── conf # │ └── layer.conf # ├── COPYING.MIT # 许可证文件 # └── README # 说明 ``` --- ### **2. 添加自定义到构建系统** 将新添加到 `bblayers.conf` 中,使 Yocto 能识别它。 #### **步骤:** ```bash # 进入构建目录(例如:build) source oe-init-build-env build # 编辑 conf/bblayers.conf,在 BBLAYERS 中添加路径 BBLAYERS += " \ ${TOPDIR}/../meta-hello \ " ``` --- ### **3. 编写 Hello World 程序** 创建一个简单的 C 程序作为示例。 #### **步骤:** ```bash # 在 meta-hello 中创建示例程序目录 mkdir -p meta-hello/recipes-hello/hello/files # 编写 hello.c 文件(路径:meta-hello/recipes-hello/hello/files/hello.c) cat << EOF > meta-hello/recipes-hello/hello/files/hello.c #include <stdio.h> int main() { printf("Hello, Yocto!\n"); return 0; } EOF ``` --- ### **4. 编写 BitBake 配方(Recipe)** 配方文件(`.bb`)告诉 Yocto 如何构建和安装你的程序。 #### **步骤:** ```bash # 创建配方文件(路径:meta-hello/recipes-hello/hello/hello_1.0.bb) mkdir -p meta-hello/recipes-hello/hello cat << EOF > meta-hello/recipes-hello/hello/hello_1.0.bb SUMMARY = "Simple Hello World program" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://\${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://hello.c" S = "\${WORKDIR}" do_compile() { \${CC} \${CFLAGS} \${LDFLAGS} hello.c -o hello } do_install() { install -d \${D}\${bindir} install -m 0755 hello \${D}\${bindir} } EOF ``` #### **配方解释:** - `SRC_URI`: 指定源码路径(本地文件用 `file://` 协议)。 - `do_compile()`: 编译命令,使用 GCC 编译 C 文件。 - `do_install()`: 安装命令,将生成的二进制文件复制到目标系统的 `/usr/bin`。 --- ### **5. 构建并测试程序** 使用 BitBake 构建你的程序。 #### **步骤:** ```bash # 启动构建 bitbake hello # 构建成功后,生成的二进制文件位于临时目录: # tmp/work/<arch>/hello/1.0-r0/image/usr/bin/hello # 验证输出(可选) # 方法1:直接运行临时目录中的二进制文件 tmp/work/*/hello/1.0-r0/image/usr/bin/hello # 方法2:将程序打包进镜像 # 编辑 conf/local.conf,添加: IMAGE_INSTALL:append = " hello" # 重新构建镜像(例如:core-image-minimal) bitbake core-image-minimal ``` --- ### **6. 常见问题与排查** #### **(1) 找不到配方(Recipe not found)** - 检查是否已添加到 `bblayers.conf`。 - 确认配方文件路径和命名符合规范:`recipes-<category>/<package>/<package>_<version>.bb`。 #### **(2) 编译失败** - 检查 `hello.c` 文件路径是否正确。 - 确认配方中的编译命令是否与源码匹配(例如:代码文件名、编译器选项)。 #### **(3) 程序未安装到镜像** - 确认 `IMAGE_INSTALL:append` 是否在 `local.conf` 中正确配置。 - 检查镜像是否重新构建。 --- ### **7. 扩展:添加 Makefile 支持** 如果程序更复杂(例如需要 Makefile),可以修改配方: #### **示例:** ```bash # 创建 Makefile(路径:meta-hello/recipes-hello/hello/files/Makefile) cat << EOF > meta-hello/recipes-hello/hello/files/Makefile all: hello hello: hello.c \$(CC) \$(CFLAGS) \$(LDFLAGS) \$@ install: install -d \$(DESTDIR)/usr/bin install -m 0755 hello \$(DESTDIR)/usr/bin EOF # 修改配方(hello_1.0.bb) SRC_URI = "file://hello.c file://Makefile" do_compile() { oe_runmake # 调用 Makefile } do_install() { oe_runmake install DESTDIR=\${D} } ``` --- ### **8. 总结** 通过以上步骤,你可以在 Yocto 中实现: 1. 创建自定义。 2. 编写程序和配方。 3. 集成到构建系统。 4. 验证程序运行。 后续可进一步扩展功能,如添加版本控制、依赖管理或自动化测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入式逍遥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值