本文档详细说明 meta-starry 提供的 BitBake Classes、变量和配置文件接口。
用途:Rust 内核通用构建逻辑
继承方式:
inherit rust-kernel提供的功能:
- 配置 Rust 工具链路径
- 设置
RUSTC_BOOTSTRAP=1 - 生成
.cargo/config.toml - 默认的
do_configure、do_compile、do_install实现
关键变量:
| 变量 | 类型 | 说明 | 示例 |
|---|---|---|---|
RUST_TARGET |
必需 | Rust 目标三元组 | aarch64-unknown-none-softfloat |
KERNEL_ARCH |
必需 | 内核架构 | aarch64 |
CARGO_FEATURES |
可选 | Cargo features | defplat dwarf smp |
使用示例:
inherit rust-kernel
RUST_TARGET = "aarch64-unknown-none-softfloat"
KERNEL_ARCH = "aarch64"
CARGO_FEATURES = "defplat dwarf smp qemu"用途:ArceOS 特定构建逻辑
继承方式:
inherit arceos提供的功能:
- 生成
.axconfig.toml平台配置文件 - 导出 ArceOS 环境变量
- 配置 musl 工具链
- 设置 RUSTFLAGS
关键变量:
| 变量 | 类型 | 说明 | 默认值 |
|---|---|---|---|
ARCEOS_ARCH |
必需 | 架构名称 | 由 MACHINE 推导 |
ARCEOS_PLATFORM |
必需 | 平台名称 | 由 MACHINE 推导 |
ARCEOS_PLAT_PACKAGE |
必需 | 平台包名 | 由 MACHINE 推导 |
ARCEOS_SMP |
可选 | CPU 核心数 | 4 |
ARCEOS_LOG |
可选 | 日志级别 | warn |
ARCEOS_DWARF |
可选 | 调试符号 | y |
ARCEOS_MEM |
可选 | 内存大小 | 由平台决定 |
ARCEOS_BUS |
可选 | 总线类型 | pci |
核心函数:
生成 .axconfig.toml 平台配置文件。
调用时机:do_configure
生成的配置示例:
[kernel]
name = "starry"
arch = "aarch64"
platform = "aarch64-qemu-virt"
smp = 4
log_level = "warn"
[build]
profile = "release"设置 musl 工具链 wrapper(用于 lwext4_rust 等依赖 C 编译器的 crate)。
使用示例:
inherit arceos
ARCEOS_ARCH = "aarch64"
ARCEOS_PLATFORM = "aarch64-qemu-virt"
ARCEOS_SMP = "8"
ARCEOS_LOG = "debug"用途:自动生成 Cargo features(复刻 Makefile 的 features.mk 逻辑)
继承方式:
inherit arceos-features提供的功能:
- 自动推导
CARGO_FEATURES变量 - 支持
defplat/myplat、dwarf、smp等特性 - 复刻 Makefile 的特性解析逻辑
输入变量:
| 变量 | 说明 | 示例 |
|---|---|---|
ARCEOS_PLAT_PACKAGE |
平台包名 | axplat-aarch64-qemu-virt |
ARCEOS_SMP |
CPU 核心数 | 4 |
ARCEOS_DWARF |
是否启用 DWARF | y |
ARCEOS_FEATURES |
额外的 features | net fs |
ARCEOS_APP_FEATURES |
应用级 features | qemu |
ARCEOS_USE_MYPLAT |
使用 myplat(默认 0) | 0 或 1 |
输出变量:
CARGO_FEATURES- 完整的 Cargo features 字符串
推导逻辑:
# 平台特性
if ARCEOS_USE_MYPLAT == "1":
ax_feat = ["myplat"]
else:
ax_feat = ["defplat"]
# 调试特性
if ARCEOS_DWARF == "y":
ax_feat.append("dwarf")
# SMP 特性
if ARCEOS_SMP > 1:
lib_feat.append("smp")
# 组合成最终的 CARGO_FEATURES
CARGO_FEATURES = "axfeat/" + " axfeat/".join(ax_feat) + " " + " ".join(lib_feat) + " " + ARCEOS_APP_FEATURES使用示例:
inherit arceos-features
# 输入
ARCEOS_PLAT_PACKAGE = "axplat-aarch64-qemu-virt"
ARCEOS_SMP = "4"
ARCEOS_DWARF = "y"
ARCEOS_APP_FEATURES = "qemu"
# 自动生成
# CARGO_FEATURES = "axfeat/defplat axfeat/dwarf axfeat/smp qemu"定义目标硬件平台的配置。
# 架构和平台
ARCEOS_ARCH = "aarch64"
ARCEOS_PLATFORM = "aarch64-qemu-virt"
ARCEOS_PLAT_PACKAGE = "axplat-aarch64-qemu-virt"
RUST_TARGET = "aarch64-unknown-none-softfloat"
# QEMU 配置(用于 runqemu)
QB_SYSTEM_NAME = "qemu-system-aarch64"
QB_MACHINE = "-machine virt"
QB_CPU = "-cpu cortex-a72"
QB_MEM = "-m 1G"
QB_SMP = "-smp 4"
QB_DEFAULT_KERNEL = "starry.bin"
QB_KERNEL_ROOT = " "
QB_SERIAL_OPT = "-nographic"
QB_OPT_APPEND = ""# 覆盖默认值
ARCEOS_SMP ?= "8"
ARCEOS_LOG ?= "debug"
ARCEOS_MEM ?= "2G"
ARCEOS_BUS ?= "mmio"aarch64-qemu-virt.conf:
require conf/machine/include/arceos-machine-common.inc
require conf/machine/include/arm/arch-armv8a.inc
ARCEOS_ARCH = "aarch64"
ARCEOS_PLATFORM = "aarch64-qemu-virt"
ARCEOS_PLAT_PACKAGE = "axplat-aarch64-qemu-virt"
RUST_TARGET = "aarch64-unknown-none-softfloat"
QB_SYSTEM_NAME = "qemu-system-aarch64"
QB_MACHINE = "-machine virt"
QB_CPU = "-cpu cortex-a72"
QB_MEM = "-m 1G"
QB_SMP = "-smp 4"
QB_DEFAULT_KERNEL = "starry.bin"
QB_KERNEL_ROOT = " "
QB_SERIAL_OPT = "-nographic"定义发行版级别的全局配置。
DISTRO_NAME = "starryos"
DISTRO_VERSION = "2.0"
# 工具链选择
PREFERRED_PROVIDER_rust-native = "rust-prebuilt-native"
PREFERRED_PROVIDER_cargo-native = "rust-prebuilt-native"
# 镜像主机名
hostname:pn-base-files ?= "starryos"
# Bare-metal 优化
ASSUME_PROVIDED += "libgcc-dev virtual/${TARGET_PREFIX}compilerlibs"
PACKAGE_CLASSES = "package_ipk"在 build/conf/local.conf 中覆盖:
# 修改发行版名称
DISTRO_NAME = "myos"
DISTRO_VERSION = "1.0"
# 修改主机名
hostname:pn-base-files = "myos-${MACHINE}"用途:最小测试镜像
继承:core-image
安装的包:
IMAGE_INSTALL = "\
packagegroup-core-boot \
bash \
"IMAGE_FEATURES:
IMAGE_FEATURES += "debug-tweaks"自定义方法:
创建 .bbappend 文件:
# 创建 bbappend
cat > my-layer/recipes-core/images/starry-minimal-image.bbappend << 'EOF'
IMAGE_INSTALL:append = " \
vim \
htop \
"
EOF用途:完整测试发行版
继承:core-image
安装的包:
IMAGE_INSTALL:append = " packagegroup-starrytest "IMAGE_FEATURES:
IMAGE_FEATURES += "\
debug-tweaks \
ssh-server-dropbear \
tools-debug \
tools-profile \
tools-testapps \
package-management \
bash-completion-pkgs \
"自定义方法:
在 build/conf/local.conf 中:
# 添加额外的包
IMAGE_INSTALL:append:pn-starry-test-image = " \
vim \
git \
python3-pip \
"
# 添加额外的特性
IMAGE_FEATURES:append:pn-starry-test-image = " \
read-only-rootfs \
"用途:StarryOS 测试组件集合
子包:
| 子包 | 内容 | 用途 |
|---|---|---|
packagegroup-starrytest |
所有子包 | 完整测试环境 |
packagegroup-starrytest-core |
保留(将来扩展) | 核心组件 |
packagegroup-starrytest-shell |
bash, coreutils, util-linux 等 | Shell 环境 |
packagegroup-starrytest-python |
python3 及模块 | 测试脚本运行环境 |
packagegroup-starrytest-harness |
starry-test-harness | StarryOS 测试套件 |
使用方式:
# 在自定义镜像中安装所有组件
IMAGE_INSTALL:append = " packagegroup-starrytest "
# 或只安装 Shell 环境
IMAGE_INSTALL:append = " packagegroup-starrytest-shell "
# 或只安装 Python 环境
IMAGE_INSTALL:append = " packagegroup-starrytest-python "
# 或组合使用
IMAGE_INSTALL:append = " \
packagegroup-starrytest-shell \
packagegroup-starrytest-python \
"自定义 PackageGroup:
创建新的 packagegroup:
# my-layer/recipes-core/packagegroups/packagegroup-mytools.bb
SUMMARY = "My custom tools"
LICENSE = "MIT"
inherit packagegroup
RDEPENDS:${PN} = "\
vim \
git \
htop \
"在镜像中使用:
IMAGE_INSTALL:append = " packagegroup-mytools "| 变量 | 类型 | 默认值 | 说明 |
|---|---|---|---|
ARCEOS_ARCH |
string | 由 MACHINE 推导 | 架构名称(aarch64/riscv64/loongarch64/x86_64) |
ARCEOS_PLATFORM |
string | 由 MACHINE 推导 | 平台名称 |
ARCEOS_PLAT_PACKAGE |
string | 由 MACHINE 推导 | 平台包名 |
ARCEOS_SMP |
int | 4 | CPU 核心数 |
ARCEOS_LOG |
string | warn | 日志级别 |
ARCEOS_DWARF |
y/n | y | 是否启用 DWARF 调试符号 |
ARCEOS_MEM |
string | 由平台决定 | 内存大小(如 "1G") |
ARCEOS_BUS |
string | pci | 总线类型 |
ARCEOS_FEATURES |
string | "" | 额外的 Cargo features |
ARCEOS_APP_FEATURES |
string | qemu | 应用级 Cargo features |
ARCEOS_NO_AXSTD |
y/n | y | 是否禁用 axstd |
ARCEOS_AX_LIB |
string | axfeat | 使用的 ArceOS 库 |
| 变量 | 类型 | 说明 |
|---|---|---|
RUST_TARGET |
string | Rust 目标三元组 |
CARGO_FEATURES |
string | Cargo features(自动生成) |
RUSTFLAGS |
string | Rust 编译器标志(自动生成) |
| 变量 | 类型 | 默认值 | 说明 |
|---|---|---|---|
IMAGE_FSTYPES |
string | ext4 | 镜像格式 |
IMAGE_ROOTFS_SIZE |
int | 8192000 | Rootfs 大小(KB) |
IMAGE_FEATURES |
string | - | 镜像特性列表 |
IMAGE_INSTALL |
string | - | 安装的包列表 |
- 创建 machine 配置文件:
cat > meta-starry/conf/machine/my-platform.conf << 'EOF'
require conf/machine/include/arceos-machine-common.inc
ARCEOS_ARCH = "aarch64"
ARCEOS_PLATFORM = "my-platform"
ARCEOS_PLAT_PACKAGE = "axplat-my-platform"
RUST_TARGET = "aarch64-unknown-none-softfloat"
QB_SYSTEM_NAME = "qemu-system-aarch64"
QB_MACHINE = "-machine my-board"
QB_CPU = "-cpu cortex-a72"
EOF- 构建:
MACHINE=my-platform bitbake starry在 build/conf/local.conf 中:
ARCEOS_FEATURES:pn-starry = "myfeature"或在配方中:
ARCEOS_FEATURES:append = " myfeature"cat > my-layer/recipes-core/images/my-image.bb << 'EOF'
require recipes-core/images/starry-test-image.bb
SUMMARY = "My custom image"
IMAGE_INSTALL:append = " \
vim \
git \
packagegroup-mytools \
"
IMAGE_FEATURES:append = " \
read-only-rootfs \
"
EOF最后更新:2026-01-09