Alex Blog

H15 SBC Yocto 定制化指南

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 镜像编译流程

  1. 安装依赖:
    sudo apt install python3-pip chrpath diffstat gawk zstd lz4 kas
  2. 克隆 Hailo Yocto 仓库:
    git clone https://github.com/hailo-ai/meta-hailo-soc.git
    cd meta-hailo-soc
  3. 初始化默认环境:
    kas build kas/hailo15-sbc.yml
  4. 载入构建环境:
    source poky/oe-init-build-env
  5. 构建镜像:
    bitbake core-image-hailo

    构建内核:

    bitbake linux-yocto-hailo
  6. 参考 hailo15_sbc_quick_start_guide.pdf 完成刷机

Yocto BSP 定制化

定制 BSP 步骤:

  1. 创建 Vendor Layer:
    mkdir -p customer
    bitbake-layers create-layer --priority 7 customer/meta-vendor
  2. 添加 Vendor Layer:
    bitbake-layers add-layer customer/meta-vendor
  3. 新增 machine 配置:在 meta-vendor/conf/machine/ 新建 new_board.conf
  4. 修改 build/conf/local.conf:
    MACHINE ??= "new_board"

MACHINE 是 Yocto 中硬件抽象与配置复用的关键机制。

U-boot 定制化

  • 默认 U-Boot 配置由 machine.conf 中的 UBOOT_MACHINE 指定
  • 自定义步骤:
    • 新增 new_board_defconfignew_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 定制化

  1. 确认 Kernel Provider:
    PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-hailo"
  2. 创建 bbappend:
    meta-vendor/recipes-kernel/linux-yocto-hailo/linux-yocto-hailo_%.bbappend
  3. 增加配置:
    SRC_URI += "file://fragment.cfg"
    KERNEL_FEATURES:append = " cfg/fragment.scc "
  4. 重新编译:
    bitbake linux-yocto-hailo -c cleansstate
    bitbake linux-yocto-hailo

软件包定制

  1. 创建 packagegroup:
    meta-vendor/recipes-core/packagegroups/packagegroup-custom.bb
  2. 定义内容:
    inherit packagegroup
    RDEPENDS:${PN} = " \
        package_recipe1 \
        package_recipe2 \
    "
  3. 将 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)

安全启动防止设备加载未经授权的固件,保护系统安全。

  1. 生成密钥:
    openssl genrsa -out customer_keypair.pem 3072
    openssl rsa -in customer_keypair.pem -out customer_pubkey.pem -pubout
  2. 将公钥 customer_pubkey.pem 提供给 Hailo,获得 customer_certificate_chain.bin
  3. 将 Yocto 开发 key 替换为上述专用密钥
  4. 新增 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 定制化官方资料和实践总结,推荐结合官方文档深入理解。

 


已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注