2021.11.20: Now we are updating our labs. Please checkout chX-dev Branches for our current new labs. (Notice: please see the [Dependency] section in the end of this doc)
Overview
This project aims to show how to write an Unix-like OS running on RISC-V platforms from scratch in Rust for beginners without any background knowledge about computer architectures, assembly languages or operating systems.
Features
Platform supported: qemu-system-riscv64 simulator or dev boards based on Kendryte K210 SoC such as Maix Dock
Now we are still updating our project, you can find latest changes on branches chX-dev such as ch1-dev. We are intended to publish first release 3.5.0 after completing most of the tasks mentioned below.
Overall progress: ch7
Completed
automatically clean up and rebuild before running our project on a different platform
fix power series application in early chapters, now you can find modulus in the output
use UPSafeCell instead of RefCell or spin::Mutex in order to access static data structures and adjust its API so that it cannot be borrowed twice at a time(mention & .exclusive_access().task[0] in run_first_task)
move TaskContext into TaskControlBlock instead of restoring it in place on kernel stack(since ch3), eliminating annoying task_cx_ptr2
replace llvm_asm! with asm!
expand the fs image size generated by rcore-fs-fuse to 128MiB
add a new test named huge_write which evaluates the fs performance(qemu~500KiB/s k210~50KiB/s)
flush all block cache to disk after a fs transaction which involves write operation
replace spin::Mutex with UPSafeCell before SMP chapter
add codes for a new chapter about synchronization & mutual exclusion(uniprocessor only)
Todo(High priority)
support Allwinner’s RISC-V D1 chip
bug fix: we should call find_pte rather than find_pte_create in PageTable::unmap
bug fix: check validity of level-3 pte in find_pte instead of checking it outside this function
use old fs image optionally, do not always rebuild the image
add new system calls: getdents64/fstat
shell functionality improvement(to be continued…)
give every non-zero process exit code an unique and clear error type
effective error handling of mm module
Todo(Low priority)
rewrite practice doc and remove some inproper questions
provide smooth debug experience at a Rust source code level
format the code using official tools
Crates
We will add them later.
关于
Let's write an OS which can run on ARM in Rust from scratch! (
rCore-Tutorial-v3
rCore-Tutorial version 3.5. See the Documentation in Chinese.
news
Overview
This project aims to show how to write an Unix-like OS running on RISC-V platforms from scratch in Rust for beginners without any background knowledge about computer architectures, assembly languages or operating systems.
Features
qemu-system-riscv64
simulator or dev boards based on Kendryte K210 SoC such as Maix DockRun our project
TODO:
Working in progress
Now we are still updating our project, you can find latest changes on branches
chX-dev
such asch1-dev
. We are intended to publish first release 3.5.0 after completing most of the tasks mentioned below.Overall progress: ch7
Completed
power
series application in early chapters, now you can find modulus in the outputUPSafeCell
instead ofRefCell
orspin::Mutex
in order to access static data structures and adjust its API so that it cannot be borrowed twice at a time(mention& .exclusive_access().task[0]
inrun_first_task
)TaskContext
intoTaskControlBlock
instead of restoring it in place on kernel stack(since ch3), eliminating annoyingtask_cx_ptr2
llvm_asm!
withasm!
rcore-fs-fuse
to 128MiBhuge_write
which evaluates the fs performance(qemu~500KiB/s k210~50KiB/s)spin::Mutex
withUPSafeCell
before SMP chapterTodo(High priority)
find_pte
rather thanfind_pte_create
inPageTable::unmap
find_pte
instead of checking it outside this functionTodo(Low priority)
Crates
We will add them later.