Other projects

  • oreboot
    • “coreboot without the C”
    • 支持 x86、aarch64 和 RISC-V。
    • 依赖于 LinuxBoot,而不是许多驱动程序本身。
  • Rust RaspberryPi 操作系统教程
    • 初始化、UART 驱动程序、简单引导加载程序、JTAG、异常级别、异常处理、分页表
    • 在 Rust 中,有些用于处理缓存维护和初始化的方法并不安全,不适宜照搬到正式版代码中。
  • cargo-call-stack

    • 使用静态分析来确定堆栈用量上限。
  • 在 RaspberryPi 操作系统教程中,先运行 Rust 代码然后启用 MMU 和缓存。此操作会读取和写入内存(例如堆栈)。不过:

    • 如果不启用 MMU 和缓存,非对齐访问将会出错。它使用 aarch64-unknown-none 进行构建,后者会设置 +strict-align 以防止编译器生成非对齐访问,因此应该没有问题,但一般情况下并不一定如此。
    • 如果是在虚拟机中运行该命令,可能会导致缓存一致性问题。问题在于,虚拟机是在禁用缓存的情况下直接访问内存,而主机具有同一内存的缓存别名。即使主机并没有明确访问该内存,推测性访问仍然会导致缓存被填充,然后任何一方对于该内存进行的更改就会丢失。再次强调,尽管在此特定示例中(即在硬件上直接运行且无 Hypervisor)这种做法是可行的,但总的来说,这并非一种良好策略。