mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-21 18:44:01 +00:00
Stage 23
This commit is contained in:
47
docs/stage23.md
Normal file
47
docs/stage23.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# CLeonOS Stage23
|
||||
|
||||
## Stage Goal
|
||||
- Add a kernel shell command `rusttest`.
|
||||
- Implement `rusttest` logic in Rust (`no_std`) instead of C.
|
||||
- Link Rust object into the kernel ELF so command runs in kernel mode.
|
||||
|
||||
## What Was Implemented
|
||||
- Kernel Rust source added:
|
||||
- `clks/rust/src/lib.rs`
|
||||
- exports `clks_rusttest_hello()`
|
||||
- output text: `Hello world!`
|
||||
- Kernel build integration (CMake):
|
||||
- build `libclks_kernel_rust.a`
|
||||
- link kernel ELF with `${KERNEL_RUST_LIB}`
|
||||
- Shell integration:
|
||||
- add command `rusttest`
|
||||
- `rusttest` calls Rust symbol `clks_rusttest_hello()`
|
||||
- Compatibility symbols for Rust link:
|
||||
- add `clks/lib/libc_compat.c` for `memcpy/memset/memmove/memcmp/bcmp`
|
||||
- Stage banner updated:
|
||||
- `CLEONOS Stage23 START`
|
||||
|
||||
## Acceptance Criteria
|
||||
- Kernel boots and prints `CLEONOS Stage23 START`.
|
||||
- `help` contains `rusttest`.
|
||||
- Running `rusttest` prints exactly:
|
||||
- `Hello world!`
|
||||
- No regression to existing shell commands.
|
||||
|
||||
## Build Targets
|
||||
- `make setup`
|
||||
- `make userapps`
|
||||
- `make iso`
|
||||
- `make run`
|
||||
- `make debug`
|
||||
|
||||
## QEMU Command
|
||||
- `qemu-system-x86_64 -M q35 -m 1024M -cdrom build/CLeonOS-x86_64.iso -serial stdio`
|
||||
|
||||
## Common Bugs and Debugging
|
||||
- Rust link undefined symbols (`memcpy/memset/...`):
|
||||
- Ensure `clks/lib/libc_compat.c` is included in kernel source set.
|
||||
- Panic-related undefined symbol:
|
||||
- Ensure Rust file keeps `#[panic_handler]` and `rust_eh_personality` stub.
|
||||
- `rusttest` command not found:
|
||||
- Confirm `help` output includes `rusttest` and shell dispatch branch exists.
|
||||
Reference in New Issue
Block a user