Plan 9 en óxido
R9 es una reimplementación del kernel plan9 en Rust. No sólo está inspirado, sino que en muchos sentidos se deriva del código fuente original de Plan 9.
Usamos cargo
y el patrón xtask
para construir el kernel.
Para compilar r9 para x86_64, asumimos que ha clonado el repositorio git en algún lugar conveniente. Luego simplemente cambie al directorio de nivel superior y cargo xtask build --arch x86-64
.
Para compilar para aarch64, ejecute cargo xtask build --arch aarch64
(actualmente solo se admite Raspberry Pi 3).
Hay otros subcomandos útiles xtask
; Ejecute cargo xtask help
para ver qué hay disponible.
En este momento, r9 no es autohospedado.
cargo xtask dist
, del que depende cargo xtask qemu
, requiere llvm-objcopy
. Se espera que esto viva en el camino de la cadena de herramientas de óxido. Puedes instalar ejecutando:
rustup component add llvm-tools
Si recibe mensajes No such file or directory (os error 2)
, instale llvm
por separado de la cadena de herramientas de Rust y configure:
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
Si persisten los mensajes No such file or directory (os error 2)
, verifique que qemu
o qemu-kvm
esté instalado y que el binario qemu-system-x86_64
esté en su ruta (o qemu-system-aarch64
en el caso de aarch64).
R9 se puede ejecutar usando qemu para las distintas arquitecturas compatibles:
Arco | Plataforma | Línea 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 (con kvm) | q35 | carga xtask qemu --arch x86-64 --kvm --verbose |
riscv | virtud | carga xtask qemu --arch riscv64 --verbose |
R9 se ha ejecutado en el siguiente hardware en mayor o menor grado:
Suponiendo que puedes configurar un servidor TFTP (buena suerte, es increíblemente complicado, pero por si sirve de algo, dnsmasq puede funcionar ocasionalmente), y asumiendo la ubicación de tu directorio netboot, puedes compilar y copiar el binario usando el siguiente comando:
cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img
Esto copia un binario comprimido, que debería ser mucho más rápido de copiar a través de la red.
El firmware de Raspberry Pi carga config.txt
antes que el kernel. Aquí podemos configurar qué UART usar, entre otras cosas. Los siguientes contenidos se configurarán para utilizar el miniuart:
enable_uart=1
core_freq_min=500