Rust 的计划 9
R9 是 Rust 中 plan9 内核的重新实现。它不仅受到原始 Plan 9 源代码的启发,而且在许多方面源自原始 Plan 9 源代码。
我们使用cargo
和xtask
模式来构建内核。
要为 x86_64 构建 r9,我们假设您已将 git 存储库克隆到方便的地方。然后只需切换到顶级目录并cargo xtask build --arch x86-64
即可。
要针对 aarch64 进行构建,请运行cargo xtask build --arch aarch64
(当前仅支持 Raspberry Pi 3)。
还有其他有用的xtask
子命令;运行cargo xtask help
查看可用的内容。
目前,r9 还不是自托管的。
cargo xtask dist
cargo xtask qemu
dist 需要llvm-objcopy
。这预计将存在于 Rust 工具链路径中。您可以通过运行来安装:
rustup component add llvm-tools
如果您收到No such file or directory (os error 2)
消息,请与 rust 工具链分开安装llvm
并设置:
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
如果No such file or directory (os error 2)
消息仍然存在,请检查以确保安装了qemu
或qemu-kvm
,并且qemu-system-x86_64
二进制文件位于您的路径中(如果是 aarch64,则为qemu-system-aarch64
)。
R9 可以使用 qemu 针对各种支持的架构运行:
拱 | 平台 | 命令行 |
---|---|---|
架构64 | 拉斯皮3b | 货物 xtask qemu --arch aarch64 --verbose |
架构64 | 拉斯皮4b | 货物 xtask qemu --arch aarch64 --config raspi4b --verbose |
x86-64 | q35 | 货物 xtask qemu --arch x86-64 --verbose |
x86-64(带 kvm) | q35 | 货物 xtask qemu --arch x86-64 --kvm --verbose |
瑞斯克夫 | 虚拟 | 货物 xtask qemu --arch riscv64 --verbose |
R9 已或多或少地在以下硬件上运行:
假设你可以设置一个 TFTP 服务器(祝你好运,它非常繁琐,但就其价值而言,dnsmasq 偶尔可以工作),并假设你的 netboot 目录的位置,你可以使用以下命令构建和复制二进制文件:
cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img
这会复制一个压缩的二进制文件,通过网络复制应该要快得多。
Raspberry Pi 固件在内核之前加载config.txt
。在这里我们可以设置要使用的 UART 等。以下内容将设置为使用 miniuart:
enable_uart=1
core_freq_min=500