From 76ad4b2939173faa97ea4bf21748e2cac46ae8ce Mon Sep 17 00:00:00 2001 From: Andrew Walbran Date: Tue, 28 Feb 2023 03:01:05 +0000 Subject: [PATCH] Add first AP slide and mention other projects. --- src/SUMMARY.md | 3 ++- src/bare-metal/aps.md | 15 +++++++++++++++ src/bare-metal/aps/other-projects.md | 11 +++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/bare-metal/aps.md create mode 100644 src/bare-metal/aps/other-projects.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index b84a8c70..99a05355 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -255,10 +255,11 @@ # Bare Metal Rust: Afternoon -- [Application processors]() +- [Application processors](bare-metal/aps.md) - [MMIO](bare-metal/aps/mmio.md) - [Let's write a UART driver]() - [Logging]() + - [Other projects](bare-metal/aps/other-projects.md) - [Useful crates]() - [zerocopy]() - [aarch64_paging]() diff --git a/src/bare-metal/aps.md b/src/bare-metal/aps.md new file mode 100644 index 00000000..8e937fbe --- /dev/null +++ b/src/bare-metal/aps.md @@ -0,0 +1,15 @@ +# Application processors + +So far we've talked about microcontrollers, such as the Arm Cortex-M series. Now let's try writing +something for Cortex-A. For simplicity we'll just work with QEMU's aarch64 +['virt'](https://qemu-project.gitlab.io/qemu/system/arm/virt.html) board. + +
+ +* Broadly speaking, microcontrollers don't have an MMU or multiple levels of privilege (exception + levels on Arm CPUs, rings on x86), while application processors do. +* QEMU supports emulating various different machines or board models for each architecture. The + 'virt' board doesn't correspond to any particular real hardware, but is designed purely for + virtual machines. + +
diff --git a/src/bare-metal/aps/other-projects.md b/src/bare-metal/aps/other-projects.md new file mode 100644 index 00000000..7f212899 --- /dev/null +++ b/src/bare-metal/aps/other-projects.md @@ -0,0 +1,11 @@ +# Other projects + + * [oreboot](https://github.com/oreboot/oreboot) + * "coreboot without the C" + * Supports x86, aarch64 and RISC-V. + * Relies on LinuxBoot rather than having many drivers itself. + * [Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) + * Initialisation, UART driver, simple bootloader, JTAG, exception levels, exception handling, page tables + * Not all very well written, so beware. + * [`cargo-call-stack`](https://crates.io/crates/cargo-call-stack) + * Static analysis to determine maximum stack usage.