План 9 в Rust
R9 — это повторная реализация ядра plan9 в Rust. Он не только вдохновлен, но и во многом основан на исходном коде Plan 9.
Для сборки ядра мы используем cargo
и шаблон xtask
.
Чтобы собрать r9 для x86_64, мы предполагаем, что вы клонировали репозиторий 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
, требует llvm-objcopy
. Ожидается, что он будет находиться в пути цепочки инструментов ржавчины. Вы можете установить, запустив:
rustup component add llvm-tools
Если вы получаете сообщение No such file or directory (os error 2)
, установите llvm
отдельно от набора инструментов Rust и установите:
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
Если сообщения No such file or directory (os error 2)
исчезают, убедитесь, что установлен qemu
или qemu-kvm
и что в вашем пути находится двоичный файл qemu-system-x86_64
(или qemu-system-aarch64
в случае aarch64).
R9 можно запустить с помощью qemu для различных поддерживаемых архитектур:
Арка | Платформа | Командная строка |
---|---|---|
aarch64 | raspi3b | груз xtask qemu --arch aarch64 --verbose |
aarch64 | raspi4b | груз xtask qemu --arch aarch64 --config raspi4b --verbose |
х86-64 | q35 | груз xtask qemu --arch x86-64 --verbose |
x86-64 (с КВМ) | q35 | груз xtask qemu --arch x86-64 --kvm --verbose |
рискв | вирт | груз xtask qemu --arch riscv64 --verbose |
R9 в большей или меньшей степени запускался на следующем оборудовании:
Предполагая, что вы можете настроить TFTP-сервер (удачи, это невероятно сложно, но, чего бы это ни стоило, dnsmasq может иногда работать) и предполагая местоположение вашего каталога сетевой загрузки, вы можете собрать и скопировать двоичный файл, используя следующую команду:
cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img
При этом копируется сжатый двоичный файл, который будет гораздо быстрее копироваться по сети.
Прошивка Raspberry Pi загружает config.txt
перед ядром. Здесь мы можем, среди прочего, установить, какой UART использовать. Для использования миниарта будет настроено следующее содержимое:
enable_uart=1
core_freq_min=500