Reimplement Zircon microkernel in safe Rust as a userspace program!
Environments๏ผ
- current rustc -- rustc 1.66.0-nightly (1898c34e9 2022-10-26)
- current rust-toolchain -- nightly-2022-10-27
- current qemu -- 4.2.1 -> 5.2.0 -> 6.2.0 -> 7.0.0 -> 8.0.93
Clone repo and pull prebuilt fuchsia images:
git clone --recursive https://github.com/kern-crates/zCore.git
cd zCore
Use docker container as standand develop environment, please refer to scripts/docker.
-
step 1: Prepare Alpine Linux rootfs:
make rootfs
-
step 2: Compile & Run native Linux program (Busybox) in libos mode:
cargo run --release --features "linux libos" -- /bin/busybox [args]
OR
make run PLATFORM=libos LINUX=1 LOG=warn
You can also add the feature
graphic
to show the graphical output (with sdl2 installed).To debug, set the
LOG
environment variable to one oferror
,warn
,info
,debug
,trace
.
-
step 1: Compile and Run Zircon shell
cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi
The
graphic
andLOG
options are the same as Linux.
Quick start for x86_64
make run LINUX=1 ARCH=x86_64 PLATFORM=qemu MODE=debug LOG=debug
Quick start for RISCV64
make image ARCH=riscv64
make run ARCH=riscv64 LINUX=1
# OR: make run LINUX=1 MODE=release SMP=1 ARCH=riscv64 PLATFORM=qemu LOG=debug
Quick start for AARCH64
make image ARCH=aarch64
make run LINUX=1 ARCH=aarch64 PLATFORM=qemu LOG=warn
-
step 1: Prepare Alpine Linux rootfs:
make rootfs ARCH=[x86_64|riscv64|aarch64]
-
step 2: Create Linux rootfs image:
Note: Before below step, you can add some special apps in zCore/rootfs
make image ARCH=[x86_64|riscv64|aarch64]
-
step 3: Build and run zcore in linux-bare-metal mode:
make run MODE=release LINUX=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]
-
step 1: Build and run zcore in zircon-bare-metal mode:
make run MODE=release [LOG=warn] [GRAPHIC=on] [ACCEL=1]
-
step 2: Build and run your own Zircon user programs:
# See template in zircon-user cd zcore-zircon-user && make zbi MODE=release # Run your programs in zCore make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]
Run Zircon official core-tests:
cd zcore-tests && make zircon-core-test-libos
Run Linux musl libc-tests for CI:
cd zcore-tests && make linux-libc-test-libos
# Check `zcore-tests/linux_libc_test_x86_64_libos.log` for results.
Run Zircon official core-tests on bare-metal:
cd zcore-tests && make zircon-core-test
Run Linux musl libc-tests for CI:
cd zcore-tests && make linux-libc-test-baremetal ARCH=[x86_64|riscv64|aarch64]
Run Linux other tests (eg: busybox):
cd zcore-tests && make linux-other-test-baremetal ARCH=[x86_64|riscv64|aarch64]
You can use zcore-tests/linux_libc_test*.py -t app
& zcore-tests/testcases/linux_libc_test/*.txt
to test specified apps.
zcore-tests/testcases/*_test/*.txt
includes all FAILED
apps (We need YOUR HELP to fix bugs!)
snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c
We can use musl-gcc compile it in x86_64 mode
change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]
exec:
cd zCore #zCore ROOT DIR
make rootfs
cp ../rcore-user/app/snake rootfs/bin #copy snake ELF file to rootfs/bin
make image # build rootfs image
cd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on
Then you can play the game. Operation
- Keyboard
W
/A
/S
/D
: MoveR
: RestartESC
: End
- Mouse
Left
: Speed upRight
: Slow downMiddle
: Pause/Resume
make doc
Bare Metal | Linux / macOS | |
---|---|---|
Virtual Memory Management | Page Table | Mmap |
Thread Management | executor |
async-std::task |
Exception Handling | Interrupt | Signal |
๐ง Working In Progress
- 2020.04.16: Zircon console is working on zCore! ๐