You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+27Lines changed: 27 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -135,6 +135,33 @@ cross-compilation and QEMU execution:
135
135
|`build.rs`| Locates the linker script generated by `axhal` and passes it to the linker |
136
136
|`configs/*.toml`| Pre-generated platform configuration for each architecture |
137
137
138
+
## ArceOS Tutorial Crates
139
+
140
+
This crate is part of a series of tutorial crates for learning OS development with [ArceOS](https://github.com/arceos-org/arceos). The crates are organized by functionality and complexity progression:
141
+
142
+
| # | Crate Name | Description |
143
+
|:---:|---|---|
144
+
| 1 |**arceos-helloworld** (this crate) | Minimal ArceOS unikernel application that prints Hello World, demonstrating the basic boot flow |
145
+
| 2 |[arceos-collections](https://crates.io/crates/arceos-collections)| Dynamic memory allocation on a unikernel, demonstrating the use of String, Vec, and other collection types |
146
+
| 3 |[arceos-readpflash](https://crates.io/crates/arceos-readpflash)| MMIO device access via page table remapping, reading data from QEMU's PFlash device |
147
+
| 4 |[arceos-readblk](https://crates.io/crates/arceos-readblk)| VirtIO block device driver discovery and disk I/O, demonstrating device probing and block read operations |
148
+
| 5 |[arceos-childtask](https://crates.io/crates/arceos-childtask)| Multi-tasking basics: spawning a child task (thread) that accesses a PFlash MMIO device |
149
+
| 6 |[arceos-msgqueue](https://crates.io/crates/arceos-msgqueue)| Cooperative multi-task scheduling with a producer-consumer message queue, demonstrating inter-task communication |
150
+
| 7 |[arceos-loadapp](https://crates.io/crates/arceos-loadapp)| FAT filesystem initialization and file I/O, demonstrating the full I/O stack from VirtIO block device to filesystem |
151
+
| 8 |[arceos-userprivilege](https://crates.io/crates/arceos-userprivilege)| User-privilege mode switching: loading a user-space program, switching to unprivileged mode, and handling syscalls |
152
+
| 9 |[arceos-lazymapping](https://crates.io/crates/arceos-lazymapping)| Lazy page mapping (demand paging): user-space program triggers page faults, and the kernel maps physical pages on demand |
153
+
| 10 |[arceos-runlinuxapp](https://crates.io/crates/arceos-runlinuxapp)| Loading and running real Linux ELF applications (musl libc) on ArceOS, with ELF parsing and Linux syscall handling |
154
+
| 11 |[arceos-guestmode](https://crates.io/crates/arceos-guestmode)| Minimal hypervisor: creating a guest address space, entering guest mode, and handling a single VM exit (shutdown) |
155
+
| 12 |[arceos-guestaspace](https://crates.io/crates/arceos-guestaspace)| Hypervisor address space management: loop-based VM exit handling with nested page fault (NPF) on-demand mapping |
| 14 |[arceos-guestmonolithickernel](https://crates.io/crates/arceos-guestmonolithickernel)| Full hypervisor + guest monolithic kernel: the guest kernel supports user-space process management, syscall handling, and preemptive scheduling |
158
+
159
+
**Progression Logic:**
160
+
161
+
-**#1–#7 (Unikernel Stage)**: Starting from the simplest output, these crates progressively introduce memory allocation, device access (MMIO / VirtIO), multi-task scheduling, and filesystem support, building up the core capabilities of a unikernel.
162
+
-**#8–#10 (Monolithic Kernel Stage)**: Building on the unikernel foundation, these crates add user/kernel privilege separation, page fault handling, and ELF loading, progressively evolving toward a monolithic kernel.
163
+
-**#11–#14 (Hypervisor Stage)**: Starting from minimal VM lifecycle management, these crates progressively add address space management, virtual devices, timer injection, and ultimately run a full monolithic kernel inside a virtual machine.
0 commit comments