Otros proyectos

  • oreboot
    • "coreboot sin la C".
    • Compatible con x86, aarch64 y RISC-V.
    • Depende de LinuxBoot en lugar de tener controladores propios.
  • [Tutorial del SO de Rust en RaspberryPi]Rust RaspberryPi OS tutorial
    • Inicialización, controlador de UART, bootloader sencillo, JTAG, niveles de excepción, gestión de excepciones, tablas de páginas, etc.
    • Algunas dudas sobre el mantenimiento de la caché y la inicialización en Rust, aunque no es precisamente un buen ejemplo para copiar en código de producción.
  • cargo-call-stack
    • Análisis estático para determinar el uso máximo de la stack.
  • El tutorial del sistema operativo en RaspberryPi ejecuta código de Rust antes de que la MMU y las cachés se habiliten. De este modo, se leerá y escribirá memoria (por ejemplo, la stack). Sin embargo:
    • Sin la MMU y la caché, los accesos no alineados fallarán. Se compila con aarch64-unknown-none, que define +strict-align para evitar que el compilador genere accesos no alineados. Debería estar bien, pero no tiene por qué ser así, en general.
    • Si se estuviera ejecutando en una máquina virtual, podría provocar problemas de coherencia en la caché. El problema es que la máquina virtual accede a la memoria directamente con la caché inhabilitada, mientras que el host cuenta con alias que se pueden almacenar en caché en la misma memoria. Incluso si el host no accede explícitamente a la memoria, los accesos especulativos pueden provocar que se llene la caché, haciendo que los cambios de uno u otro se pierdan. De nuevo, es correcto en este caso particular (si se ejecuta directamente en el hardware sin hipervisor) pero, por lo general, no es un buen patrón.