Yocto 介绍
Yocto 是一个开源项目,旨在帮助开发者快速创建适用于不同硬件平台的 Linux 系统。其主要特点:
- 支持多硬件架构,灵活可扩展
- 使用 Poky 作为参考发行版和构建系统
- 核心构建系统是 OpenEmbedded
- 核心构建工具是 bitbake
- 支持高度模块化的 layer 生态系统

更多参考:Yocto 官方文档 | Hailo-15 Yocto 仓库:meta-hailo-soc
OpenEmbedded 介绍
OpenEmbedded 是 Yocto 项目的核心,它支持使用 layer 将元数据(meta-xxx)模块化管理,典型层包括:
- meta-hailo-bsp
- meta-hailo-dsp
- meta-hailo-imaging
- meta-openembedded(第三方通用层)
构建工具:bitbake

Hailo-15 Yocto 镜像编译流程
- 安装依赖:
sudo apt install python3-pip chrpath diffstat gawk zstd lz4 kas
- 克隆 Hailo Yocto 仓库:
git clone https://github.com/hailo-ai/meta-hailo-soc.git cd meta-hailo-soc
- 初始化默认环境:
kas build kas/hailo15-sbc.yml
- 载入构建环境:
source poky/oe-init-build-env
- 构建镜像:
bitbake core-image-hailo
构建内核:
bitbake linux-yocto-hailo
- 参考 hailo15_sbc_quick_start_guide.pdf 完成刷机
Yocto BSP 定制化
定制 BSP 步骤:
- 创建 Vendor Layer:
mkdir -p customer bitbake-layers create-layer --priority 7 customer/meta-vendor
- 添加 Vendor Layer:
bitbake-layers add-layer customer/meta-vendor
- 新增 machine 配置:在
meta-vendor/conf/machine/新建new_board.conf - 修改 build/conf/local.conf:
MACHINE ??= "new_board"
MACHINE 是 Yocto 中硬件抽象与配置复用的关键机制。
U-boot 定制化
- 默认 U-Boot 配置由 machine.conf 中的
UBOOT_MACHINE指定 - 自定义步骤:
- 新增
new_board_defconfig和new_board.dts - 在 meta-vendor/recipes-bsp/u-boot/ 下创建 bbappend
- 新增
默认 repo 可参考:meta-hailo-bsp/recipes-bsp/u-boot/u-boot-hailo.inc
设备树定制
- 参考 arch/arm/dts/hailo15-sbc.dts
- 创建 arch/arm/dts/new_board.dts,并在 defconfig 中指定
Kernel 定制化
- 确认 Kernel Provider:
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-hailo"
- 创建 bbappend:
meta-vendor/recipes-kernel/linux-yocto-hailo/linux-yocto-hailo_%.bbappend
- 增加配置:
SRC_URI += "file://fragment.cfg" KERNEL_FEATURES:append = " cfg/fragment.scc "
- 重新编译:
bitbake linux-yocto-hailo -c cleansstate bitbake linux-yocto-hailo
软件包定制
- 创建 packagegroup:
meta-vendor/recipes-core/packagegroups/packagegroup-custom.bb
- 定义内容:
inherit packagegroup RDEPENDS:${PN} = " \ package_recipe1 \ package_recipe2 \ " - 将 packagegroup 加入 core-image:
meta-vendor/recipes-core/images/core-image-minimal.bbappend
并 include 一个 core-image-append.inc 文件:
IMAGE_INSTALL:append = " packagegroup-custom "
Hailo 安全启动 (Secure Boot)
安全启动防止设备加载未经授权的固件,保护系统安全。
- 生成密钥:
openssl genrsa -out customer_keypair.pem 3072 openssl rsa -in customer_keypair.pem -out customer_pubkey.pem -pubout
- 将公钥 customer_pubkey.pem 提供给 Hailo,获得 customer_certificate_chain.bin
- 将 Yocto 开发 key 替换为上述专用密钥
- 新增 secureboot 的 bbappend

详细流程参考:hailo_os_secure_boot_user_guide.pdf
USB WiFi 设备集成示例
以 AIC8800 为例:
- GitHub 地址:meta-aic-wifi
- 在
core-image-append.inc中添加 packagegroup-aic8800 - Yocto 编译时自动打包进 rootfs
本文内容基于 Hailo-15 SBC Yocto 定制化官方资料和实践总结,推荐结合官方文档深入理解。
发表回复