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.
Andre Richter 089565762a
Makefiles: Docker USB passthrough in Linux only
Detect if we run on Linux. If so, dockerize Makefile targets that need access to
USB devices. If we run on anything else, attempt to execute natively.

This will enable non-Linux Unixes like macOS to run the chainboot target, given
they install the needed Ruby dependencies.
4 years ago
..
.vscode Switch to rust-analyzer 4 years ago
src Refactor tutorial 01 4 years ago
Cargo.lock Add code for tutorial 01 5 years ago
Cargo.toml Remove xbuild. Use upstream aarch64 rust-std 🎉 🦀 4 years ago
Makefile Makefiles: Docker USB passthrough in Linux only 4 years ago
README.CN.md Remove xbuild. Use upstream aarch64 rust-std 🎉 🦀 4 years ago
README.md Remove xbuild. Use upstream aarch64 rust-std 🎉 🦀 4 years ago
kernel Remove xbuild. Use upstream aarch64 rust-std 🎉 🦀 4 years ago
kernel8.img Add code for tutorial 01 5 years ago

README.md

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

  • Custom link.ld linker script.
    • Load address at 0x80_000
    • Only .text section.
  • main.rs: Important inner attributes:
    • #![no_std], #![no_main]
  • cpu.S: Assembly _start() function that executes wfe (Wait For Event), halting all cores that are executing _start().
  • We (have to) define a #[panic_handler] function.
    • Just waits infinitely for a cpu event.

Test it

In the project folder, invoke QEMU and observe the CPU core spinning on wfe:

$ make qemu
[...]
IN:
0x00080000:  d503205f  wfe
0x00080004:  17ffffff  b        #0x80000