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)这种做法是可行的,但总的来说,这并非一种良好策略。
- 如果不启用 MMU 和缓存,非对齐访问将会出错。它使用