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.
089565762a
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 | 4 years ago | |
src | 4 years ago | |
Cargo.lock | 5 years ago | |
Cargo.toml | 4 years ago | |
Makefile | 4 years ago | |
README.CN.md | 4 years ago | |
README.md | 4 years ago | |
kernel | 4 years ago | |
kernel8.img | 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 thekernel
in QEMUclippy
clean
readelf
: Inspect theELF
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.
- Load address at
main.rs
: Important inner attributes:#![no_std]
,#![no_main]
cpu.S
: Assembly_start()
function that executeswfe
(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