Plano 9 em Ferrugem
R9 é uma reimplementação do kernel plan9 em Rust. Ele não é apenas inspirado, mas em muitos aspectos derivado do código-fonte original do Plan 9.
Usamos cargo
e o padrão xtask
para construir o kernel.
Para construir r9 para x86_64, presumimos que você clonou o repositório git em algum lugar conveniente. Em seguida, basta mudar para o diretório de nível superior e cargo xtask build --arch x86-64
.
Para construir para aarch64, execute cargo xtask build --arch aarch64
(atualmente apenas Raspberry Pi 3 é compatível).
Existem outros subcomandos úteis xtask
; execute cargo xtask help
para ver o que está disponível.
No momento, o r9 não é auto-hospedado.
cargo xtask dist
, do qual cargo xtask qemu
depende, requer llvm-objcopy
. Espera-se que isso permaneça no caminho do conjunto de ferramentas de ferrugem. Você pode instalar executando:
rustup component add llvm-tools
Se você receber mensagens No such file or directory (os error 2)
, instale llvm
separado do conjunto de ferramentas de ferrugem e defina:
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
Se as mensagens No such file or directory (os error 2)
persistirem, verifique se qemu
ou qemu-kvm
está instalado e o binário qemu-system-x86_64
está em seu caminho (ou qemu-system-aarch64
no caso de aarch64).
R9 pode ser executado usando qemu para as diversas arquiteturas suportadas:
Arco | Plataforma | Linha de comando |
---|---|---|
aarch64 | raspi3b | carga xtask qemu --arch aarch64 --verbose |
aarch64 | raspi4b | carga xtask qemu --arch aarch64 --config raspi4b --verbose |
x86-64 | q35 | carga xtask qemu --arch x86-64 --verbose |
x86-64 (com kvm) | q35 | carga xtask qemu --arch x86-64 --kvm --verbose |
risco | virtude | carga xtask qemu --arch riscv64 --verbose |
R9 foi executado no seguinte hardware em maior ou menor grau:
Supondo que você possa configurar um servidor TFTP (boa sorte, é incrivelmente complicado, mas vale a pena, dnsmasq pode funcionar ocasionalmente) e assumindo a localização do seu diretório netboot, você pode construir e copiar o binário usando o seguinte comando:
cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img
Isso copia um binário compactado, que deve ser muito mais rápido de copiar pela rede.
O firmware Raspberry Pi carrega config.txt
antes do kernel. Aqui podemos definir qual UART usar, entre outras coisas. O seguinte conteúdo será configurado para usar o miniuart:
enable_uart=1
core_freq_min=500