wheatfox
开发分支:https://github.com/syswonder/hvisor/tree/dev-board-abstract
platform/$ARCH/$BOARD 【重要】ARCH/BOARD ,例如 aarch64/qemu-gicv3 【重要】BID=xxx/xxx 来简写,同时也支持之前的 ARCH=xxx BOARD=xxx 风格,并且不再需要指定feature(见后文)linker.ld - 每个板卡的链接脚本platform.mk - QEMU 启动 Makefile 和 hvisor.bin target(每个架构的 hvisor.bin 的处理都不太一样,需要每个 board 自行编写)board.rs - 类似之前 qemu_aarch64.rs 的板卡定义 rust 代码(就是一些结构),现在放在每个板子的专用目录中configs/ - hvisor tool 启动 zone 的 json 文件cargo/
features - 通过 FEATURES 指定需要的 driver 型号 以及其他特性信息,编译时的 FEATURES 会从这里读取(之前每次都需要在命令行手写)config.template.toml - 移除根目录的 .cargo/config ,改为动态生成(因为每个板子的 linker 需要在这里指定,所以需要根据选择的 BOARD 动态生成,脚本位于 tools/gen_cargo_config.shtest/ - (Optional)内部存放用于 unittest+systemtest 的代码,目前仅 qemu-* 相关的板卡能进行 qemu 测试image/ - qemu / 实机 启动时需要的 kernel/rootfs/dtb 等存放在这里,和之前的 image 目录含义一致
bootloader/ - (Optional) 用于 QEMU 本地运行和 unittest+systemtest 测试使用dts/ - (Optional)zone 0, 1, 2, … 的 dts 文件its/ - (Optional) 用于 uboot FIT image 生成(zcu102)acpi/ - (Optional) x64 下 acpi 设备树源码(hvisor x86 port)kernel/ - (Optional) ignorevirtdisk/- (Optional) ignore以下是通过脚本自动生成的 .cargo/config.toml,注释中会包含自动生成时的一些信息。
其中 template 支持 macro 替换,方便使用,__ARCH__ __BOARD__ 等将被直接替换为 ARCH 等:
# cat platform/aarch64/qemu-gicv3/cargo/config.template.toml
[target.aarch64-unknown-none]
runner = "platform/__ARCH__/__BOARD__/test/runner.sh"
rustflags = [
"-Clink-arg=-Tplatform/__ARCH__/__BOARD__/linker.ld",
"-Ctarget-feature=+a53,+v8a,+strict-align,-neon,-fp-armv8",
"-Cforce-frame-pointers=yes",
]
# Generated by gen_cargo_config.sh at Mon Mar 10 11:14:26 AM CST 2025 (wheatfox@dedsec-amd0)
# BASH_VERSION = 5.2.15(1)-release
# HOST_ARCH = x86_64
# OS_INFO = Linux 6.1.0-27-amd64 debian
# ARCH = aarch64
# BOARD = qemu-gicv3
# FEATURES = gicv3 pl011 iommu pci pt_layout_qemu
# HVISOR_SRC = /home/wheatfox/Documents/Code/hvisor-abstract
# LD_SCRIPT = /home/wheatfox/Documents/Code/hvisor-abstract/platform/aarch64/qemu-gicv3/linker.ld
# TEMPLATE = /home/wheatfox/Documents/Code/hvisor-abstract/platform/aarch64/qemu-gicv3/cargo/config.template.toml
[target.aarch64-unknown-none]
runner = "platform/aarch64/qemu-gicv3/test/runner.sh"
rustflags = [
"-Clink-arg=-Tplatform/aarch64/qemu-gicv3/linker.ld",
"-Ctarget-feature=+a53,+v8a,+strict-align,-neon,-fp-armv8",
"-Cforce-frame-pointers=yes",
]
board.rs 和 dts 定义,存在一定的差别,之前都是混在一起放的(linux-v2.dts / linux.dts)build.rs 实现,其主要负责把前面提到的每个板子的 board.rs 自动 symlink 到 src/platform 下面的临时文件 __board.rs (gitignore掉了,对这个临时 symlink 软链接文件的修改会和 board 专有目录内的 board.rs 同步,后者会被保存到 git 仓库中),__board.rs 由 src/platform/mod.rs 自动导入build.rs 实现而不是在之前的 Makefile 里通过脚本实现:
src/device/uart 下面所有 platform_ 相关的 cfg,转而通过 FEATURES 传入需要的 driver (由前文板子专用目录内的 features 文件指定,一行一个):