Plan 9 in Rust
R9 ist eine Neuimplementierung des Plan9-Kernels in Rust. Es ist nicht nur vom ursprünglichen Quellcode von Plan 9 inspiriert, sondern in vielerlei Hinsicht abgeleitet.
Wir verwenden cargo
und das xtask
Muster, um den Kernel zu erstellen.
Um r9 für x86_64 zu erstellen, gehen wir davon aus, dass Sie das Git-Repository an einem geeigneten Ort geklont haben. Wechseln Sie dann einfach in das Verzeichnis der obersten Ebene und cargo xtask build --arch x86-64
.
Um für aarch64 zu erstellen, führen Sie cargo xtask build --arch aarch64
aus (Derzeit wird nur Raspberry Pi 3 unterstützt).
Es gibt weitere nützliche xtask
Unterbefehle; Führen Sie cargo xtask help
aus, um zu sehen, was verfügbar ist.
Im Moment ist r9 kein Selbsthosting.
cargo xtask dist
, von dem cargo xtask qemu
abhängt, ist llvm-objcopy
erforderlich. Es wird erwartet, dass dies im Rust-Toolchain-Pfad angesiedelt ist. Sie können die Installation durchführen, indem Sie Folgendes ausführen:
rustup component add llvm-tools
Wenn Sie die Meldung No such file or directory (os error 2)
erhalten, installieren Sie llvm
getrennt von der Rust-Toolchain und legen Sie Folgendes fest:
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
Wenn die Meldung No such file or directory (os error 2)
bestehen bleibt, überprüfen Sie, ob qemu
oder qemu-kvm
installiert ist und sich die Binärdatei qemu-system-x86_64
in Ihrem Pfad befindet (oder qemu-system-aarch64
im Fall von aarch64).
R9 kann mit qemu für die verschiedenen unterstützten Architekturen ausgeführt werden:
Bogen | Plattform | Befehlszeile |
---|---|---|
aarch64 | raspi3b | Ladung xtask qemu --arch aarch64 --verbose |
aarch64 | raspi4b | Ladung xtask qemu --arch aarch64 --config raspi4b --verbose |
x86-64 | q35 | Ladung xtask qemu --arch x86-64 --verbose |
x86-64 (mit KVM) | q35 | Ladung xtask qemu --arch x86-64 --kvm --verbose |
riskant | Virt | Fracht xtask qemu --arch riscv64 --verbose |
R9 wurde mehr oder weniger stark auf folgender Hardware ausgeführt:
Vorausgesetzt, Sie können einen TFTP-Server einrichten (viel Glück, es ist unglaublich fummelig, aber was es wert ist, dnsmasq kann gelegentlich funktionieren) und vorausgesetzt, der Speicherort Ihres Netboot-Verzeichnisses, können Sie die Binärdatei mit dem folgenden Befehl erstellen und kopieren:
cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img
Dadurch wird eine komprimierte Binärdatei kopiert, die viel schneller über das Netzwerk kopiert werden sollte.
Die Raspberry Pi-Firmware lädt config.txt
vor dem Kernel. Hier können wir unter anderem einstellen, welcher UART verwendet werden soll. Für die Nutzung des Miniuarts werden folgende Inhalte eingerichtet:
enable_uart=1
core_freq_min=500