You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.2 KiB
Markdown

# Tutorial 01 - Wait Forever
## tl;dr
- The project skeleton is set up.
- A small piece of assembly code runs that just halts all CPU cores executing the kernel code.
## Building
- `Makefile` targets:
- `doc`: Generate documentation.
- `qemu`: Run the `kernel` in QEMU
- `clippy`
- `clean`
- `readelf`: Inspect the `ELF` output.
- `objdump`: Inspect the assembly.
- `nm`: Inspect the symbols.
## Code to look at
- `BSP`-specific `kernel.ld` linker script.
- Load address at `0x8_0000`
- Only `.text` section.
- `main.rs`: Important [inner attributes]:
- `#![no_std]`, `#![no_main]`
- `boot.s`: Assembly `_start()` function that executes `wfe` (Wait For Event), halting all cores
that are executing `_start()`.
3 years ago
- We (have to) define a `#[panic_handler]` function to make the compiler happy.
- Make it `unimplemented!()` because it will be stripped out since it is not used.
[inner attributes]: https://doc.rust-lang.org/reference/attributes.html
5 years ago
4 years ago
### Test it
5 years ago
In the project folder, invoke QEMU and observe the CPU core spinning on `wfe`:
3 years ago
5 years ago
```console
$ make qemu
5 years ago
[...]
4 years ago
IN:
0x00080000: d503205f wfe
5 years ago
0x00080004: 17ffffff b #0x80000
```