openEuler Embedded 的 Yocto入门 : 2. 构建一个Hello,world!
获取BitBake
- 官方下载
git clone https://git.yoctoproject.org/poky
cd poky/bitbake
- 国内镜像下载(推荐)
git clone https://gitee.com/openeuler/yocto-poky.git -b v3.3.6
cd yocto-poky/bitbake
配置BitBake环境
export PATH=/path/to/bitbake/bin:$PATH
bitbake --version # 验证安装
# 预期输出:BitBake Build Tool Core version 1.50.0
Hello World示例
1. 创建工程目录
mkdir $HOME/hello
cd $HOME/hello
2. 创建基础配置文件
mkdir conf
touch conf/bitbake.conf
3. 创建必需类文件
mkdir classes
touch classes/base.bbclass
4. 配置核心变量
编辑 conf/bitbake.conf
添加:
TMPDIR = "${TOPDIR}/tmp"
CACHE = "${TMPDIR}/cache"
STAMP = "${TMPDIR}/${PN}/stamps"
T = "${TMPDIR}/${PN}/work"
5. 创建自定义层
cd $HOME/hello
mkdir meta-mylayer
cd meta-mylayer
mkdir conf
创建 conf/layer.conf
:
BBPATH .= ":${LAYERDIR}"
BBFILES += "${LAYERDIR}/recipes-*/*.bb"
BBFILE_COLLECTIONS += "mylayer"
BBFILE_PATTERN_mylayer := "^${LAYERDIR}/"
BBFILE_PRIORITY_mylayer = "5"
注意:层名称建议以 meta-
开头
6. 创建Hello World配方
创建 recipes-hello/printhello.bb
:
DESCRIPTION = "Prints Hello World"
PN = "printhello"
PV = "1"python do_build() {bb.plain("********************")bb.plain("* *")bb.plain("* Hello, World! *")bb.plain("* *")bb.plain("********************")
}
addtask do_build
7. 配置层路径
创建 conf/bblayers.conf
:
BBLAYERS ?= " \/path/to/meta-mylayer \
"
8. 执行构建
cd $HOME/hello
bitbake printhello
成功输出
********************
* *
* Hello, World! *
* *
********************
最终目录结构
hello/
├── classes
│ └── base.bbclass
├── conf
│ ├── bblayers.conf
│ └── bitbake.conf
└── meta-mylayer/├── conf│ └── layer.conf└── recipes-hello└── printhello.bb
关键概念说明
- bitbake.conf
Yocto底层配置文件,定义构建核心变量
- base.bbclass
任务处理基类,提供通用任务实现
- bblayers.conf
层管理系统,定位工程构建层
- layer.conf
层元数据定义文件
常见问题排查
错误信息 | 解决方案 |
---|---|
ModuleNotFoundError: No module named 'bb' | 检查BitBake路径配置和环境变量 |
Could not inherit file classes/base.bbclass | 创建classes/base.bbclass文件 |
No setscene tasks | 正常信息,无需处理 |
Nothing PROVIDES 'printhello' | 检查bblayers.conf路径配置 |
调试提示:删除tmp
目录可强制重新执行任务
参考文献
poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.rst
poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.rst
🚀 动手实践:基于 openEuler Embedded 的 Yocto 入门
接下来将带您逐步实现:
👉 立即点击关注,解锁嵌入式开发新技能!
👍 一键三连获取完整代码模板与构建加速技巧!
✨ 感谢您的支持,我们即刻启程!