Skip to content

Repository files navigation

zCore

CIDocsCoverage Status

Reimplement Zircon microkernel in safe Rust as a userspace program!

Getting started

Environments:

Developing environment info

  • 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.

Run zcore in libos mode

Run zcore in linux-libos mode

  • 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 of error, warn, info, debug, trace.

Run native Zircon program (shell) in zircon-libos mode:

  • step 1: Compile and Run Zircon shell

    cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi

    The graphic and LOG options are the same as Linux.

Run zcore in bare-metal mode

Run Linux shell in linux-bare-metal mode:


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]

Run Zircon shell in zircon-bare-metal mode:

  • 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-usercd zcore-zircon-user && make zbi MODE=release
    # Run your programs in zCore
    make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]

List of zCore's modular crates

NameDescriptionAuthorsRepo URL
zcorezCore Reimplement Zircon microkernel in safe Rust as a userspace program!wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zCore
zcore-loaderLinux and Zircon user programs loader and runner.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-loader
zcore-kernel-halKernel HAL interface definations.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-kernel-hal
zcore-zircon-syscallZircon syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-syscall
zcore-testsTest scripts for zCore OS.wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/zcore-tests
zcore-rbootThe x86_64 UEFI bootloader for zCorewangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/rboot
zcore-linux-syscallLinux syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-syscall
zcore-driversDevice drivers of zCoreequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-drivers
zcore-libc-testTest scripts for zCore OS.Chenc@jia.jexiaoluoyuan@163.comhttps://github.com/kern-crates/libc-test
zcore-zircon-objectZircon kernel objectswangrunji0408@163.companqinglin00@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-object
zcore-linux-objectLinux kernel objectswangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-object
zcore-zircon-userUser programs for zCore/Zirconwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-user

Testing

LibOS Mode Testing

Zircon related

Run Zircon official core-tests:

cd zcore-tests && make zircon-core-test-libos

Linux related

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.

Bare-metal Mode Testing

Zircon related

Run Zircon official core-tests on bare-metal:

cd zcore-tests && make zircon-core-test

Linux related

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!)

Graph/Game

snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c

Step1: compile usr app

We can use musl-gcc compile it in x86_64 mode

Step2: change zcore for run snake app first.

change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]

Step3: prepare root fs image, run zcore in linux-bare-metal mode

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 imagecd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on

Then you can play the game. Operation

  • Keyboard
    • W/A/S/D: Move
    • R: Restart
    • ESC: End
  • Mouse
    • Left: Speed up
    • Right: Slow down
    • Middle: Pause/Resume

Doc

make doc

RISC-V 64 porting info

Components

Overview

Hardware Abstraction Layer

Bare MetalLinux / macOS
Virtual Memory ManagementPage TableMmap
Thread Managementexecutorasync-std::task
Exception HandlingInterruptSignal

Small Goal & Little Plans

Dev Status

🚧 Working In Progress

  • 2020.04.16: Zircon console is working on zCore! 🎉

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - kern-crates/zCore · GitHub
Skip to content

Repository files navigation

zCore

CIDocsCoverage Status

Reimplement Zircon microkernel in safe Rust as a userspace program!

Getting started

Environments:

Developing environment info

  • 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.

Run zcore in libos mode

Run zcore in linux-libos mode

  • 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 of error, warn, info, debug, trace.

Run native Zircon program (shell) in zircon-libos mode:

  • step 1: Compile and Run Zircon shell

    cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi

    The graphic and LOG options are the same as Linux.

Run zcore in bare-metal mode

Run Linux shell in linux-bare-metal mode:


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]

Run Zircon shell in zircon-bare-metal mode:

  • 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-usercd zcore-zircon-user && make zbi MODE=release
    # Run your programs in zCore
    make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]

List of zCore's modular crates

NameDescriptionAuthorsRepo URL
zcorezCore Reimplement Zircon microkernel in safe Rust as a userspace program!wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zCore
zcore-loaderLinux and Zircon user programs loader and runner.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-loader
zcore-kernel-halKernel HAL interface definations.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-kernel-hal
zcore-zircon-syscallZircon syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-syscall
zcore-testsTest scripts for zCore OS.wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/zcore-tests
zcore-rbootThe x86_64 UEFI bootloader for zCorewangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/rboot
zcore-linux-syscallLinux syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-syscall
zcore-driversDevice drivers of zCoreequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-drivers
zcore-libc-testTest scripts for zCore OS.Chenc@jia.jexiaoluoyuan@163.comhttps://github.com/kern-crates/libc-test
zcore-zircon-objectZircon kernel objectswangrunji0408@163.companqinglin00@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-object
zcore-linux-objectLinux kernel objectswangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-object
zcore-zircon-userUser programs for zCore/Zirconwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-user

Testing

LibOS Mode Testing

Zircon related

Run Zircon official core-tests:

cd zcore-tests && make zircon-core-test-libos

Linux related

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.

Bare-metal Mode Testing

Zircon related

Run Zircon official core-tests on bare-metal:

cd zcore-tests && make zircon-core-test

Linux related

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!)

Graph/Game

snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c

Step1: compile usr app

We can use musl-gcc compile it in x86_64 mode

Step2: change zcore for run snake app first.

change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]

Step3: prepare root fs image, run zcore in linux-bare-metal mode

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 imagecd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on

Then you can play the game. Operation

  • Keyboard
    • W/A/S/D: Move
    • R: Restart
    • ESC: End
  • Mouse
    • Left: Speed up
    • Right: Slow down
    • Middle: Pause/Resume

Doc

make doc

RISC-V 64 porting info

Components

Overview

Hardware Abstraction Layer

Bare MetalLinux / macOS
Virtual Memory ManagementPage TableMmap
Thread Managementexecutorasync-std::task
Exception HandlingInterruptSignal

Small Goal & Little Plans

Dev Status

🚧 Working In Progress

  • 2020.04.16: Zircon console is working on zCore! 🎉

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - kern-crates/zCore · GitHub
Skip to content

Repository files navigation

zCore

CIDocsCoverage Status

Reimplement Zircon microkernel in safe Rust as a userspace program!

Getting started

Environments:

Developing environment info

  • 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.

Run zcore in libos mode

Run zcore in linux-libos mode

  • 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 of error, warn, info, debug, trace.

Run native Zircon program (shell) in zircon-libos mode:

  • step 1: Compile and Run Zircon shell

    cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi

    The graphic and LOG options are the same as Linux.

Run zcore in bare-metal mode

Run Linux shell in linux-bare-metal mode:


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]

Run Zircon shell in zircon-bare-metal mode:

  • 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-usercd zcore-zircon-user && make zbi MODE=release
    # Run your programs in zCore
    make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]

List of zCore's modular crates

NameDescriptionAuthorsRepo URL
zcorezCore Reimplement Zircon microkernel in safe Rust as a userspace program!wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zCore
zcore-loaderLinux and Zircon user programs loader and runner.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-loader
zcore-kernel-halKernel HAL interface definations.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-kernel-hal
zcore-zircon-syscallZircon syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-syscall
zcore-testsTest scripts for zCore OS.wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/zcore-tests
zcore-rbootThe x86_64 UEFI bootloader for zCorewangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/rboot
zcore-linux-syscallLinux syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-syscall
zcore-driversDevice drivers of zCoreequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-drivers
zcore-libc-testTest scripts for zCore OS.Chenc@jia.jexiaoluoyuan@163.comhttps://github.com/kern-crates/libc-test
zcore-zircon-objectZircon kernel objectswangrunji0408@163.companqinglin00@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-object
zcore-linux-objectLinux kernel objectswangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-object
zcore-zircon-userUser programs for zCore/Zirconwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-user

Testing

LibOS Mode Testing

Zircon related

Run Zircon official core-tests:

cd zcore-tests && make zircon-core-test-libos

Linux related

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.

Bare-metal Mode Testing

Zircon related

Run Zircon official core-tests on bare-metal:

cd zcore-tests && make zircon-core-test

Linux related

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!)

Graph/Game

snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c

Step1: compile usr app

We can use musl-gcc compile it in x86_64 mode

Step2: change zcore for run snake app first.

change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]

Step3: prepare root fs image, run zcore in linux-bare-metal mode

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 imagecd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on

Then you can play the game. Operation

  • Keyboard
    • W/A/S/D: Move
    • R: Restart
    • ESC: End
  • Mouse
    • Left: Speed up
    • Right: Slow down
    • Middle: Pause/Resume

Doc

make doc

RISC-V 64 porting info

Components

Overview

Hardware Abstraction Layer

Bare MetalLinux / macOS
Virtual Memory ManagementPage TableMmap
Thread Managementexecutorasync-std::task
Exception HandlingInterruptSignal

Small Goal & Little Plans

Dev Status

🚧 Working In Progress

  • 2020.04.16: Zircon console is working on zCore! 🎉

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - kern-crates/zCore · GitHub
Skip to content

Repository files navigation

zCore

CIDocsCoverage Status

Reimplement Zircon microkernel in safe Rust as a userspace program!

Getting started

Environments:

Developing environment info

  • 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.

Run zcore in libos mode

Run zcore in linux-libos mode

  • 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 of error, warn, info, debug, trace.

Run native Zircon program (shell) in zircon-libos mode:

  • step 1: Compile and Run Zircon shell

    cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi

    The graphic and LOG options are the same as Linux.

Run zcore in bare-metal mode

Run Linux shell in linux-bare-metal mode:


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]

Run Zircon shell in zircon-bare-metal mode:

  • 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-usercd zcore-zircon-user && make zbi MODE=release
    # Run your programs in zCore
    make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]

List of zCore's modular crates

NameDescriptionAuthorsRepo URL
zcorezCore Reimplement Zircon microkernel in safe Rust as a userspace program!wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zCore
zcore-loaderLinux and Zircon user programs loader and runner.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-loader
zcore-kernel-halKernel HAL interface definations.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-kernel-hal
zcore-zircon-syscallZircon syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-syscall
zcore-testsTest scripts for zCore OS.wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/zcore-tests
zcore-rbootThe x86_64 UEFI bootloader for zCorewangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/rboot
zcore-linux-syscallLinux syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-syscall
zcore-driversDevice drivers of zCoreequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-drivers
zcore-libc-testTest scripts for zCore OS.Chenc@jia.jexiaoluoyuan@163.comhttps://github.com/kern-crates/libc-test
zcore-zircon-objectZircon kernel objectswangrunji0408@163.companqinglin00@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-object
zcore-linux-objectLinux kernel objectswangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-object
zcore-zircon-userUser programs for zCore/Zirconwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-user

Testing

LibOS Mode Testing

Zircon related

Run Zircon official core-tests:

cd zcore-tests && make zircon-core-test-libos

Linux related

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.

Bare-metal Mode Testing

Zircon related

Run Zircon official core-tests on bare-metal:

cd zcore-tests && make zircon-core-test

Linux related

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!)

Graph/Game

snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c

Step1: compile usr app

We can use musl-gcc compile it in x86_64 mode

Step2: change zcore for run snake app first.

change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]

Step3: prepare root fs image, run zcore in linux-bare-metal mode

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 imagecd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on

Then you can play the game. Operation

  • Keyboard
    • W/A/S/D: Move
    • R: Restart
    • ESC: End
  • Mouse
    • Left: Speed up
    • Right: Slow down
    • Middle: Pause/Resume

Doc

make doc

RISC-V 64 porting info

Components

Overview

Hardware Abstraction Layer

Bare MetalLinux / macOS
Virtual Memory ManagementPage TableMmap
Thread Managementexecutorasync-std::task
Exception HandlingInterruptSignal

Small Goal & Little Plans

Dev Status

🚧 Working In Progress

  • 2020.04.16: Zircon console is working on zCore! 🎉

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - kern-crates/zCore · GitHub
Skip to content

Repository files navigation

zCore

CIDocsCoverage Status

Reimplement Zircon microkernel in safe Rust as a userspace program!

Getting started

Environments:

Developing environment info

  • 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.

Run zcore in libos mode

Run zcore in linux-libos mode

  • 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 of error, warn, info, debug, trace.

Run native Zircon program (shell) in zircon-libos mode:

  • step 1: Compile and Run Zircon shell

    cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi

    The graphic and LOG options are the same as Linux.

Run zcore in bare-metal mode

Run Linux shell in linux-bare-metal mode:


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]

Run Zircon shell in zircon-bare-metal mode:

  • 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-usercd zcore-zircon-user && make zbi MODE=release
    # Run your programs in zCore
    make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]

List of zCore's modular crates

NameDescriptionAuthorsRepo URL
zcorezCore Reimplement Zircon microkernel in safe Rust as a userspace program!wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zCore
zcore-loaderLinux and Zircon user programs loader and runner.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-loader
zcore-kernel-halKernel HAL interface definations.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-kernel-hal
zcore-zircon-syscallZircon syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-syscall
zcore-testsTest scripts for zCore OS.wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/zcore-tests
zcore-rbootThe x86_64 UEFI bootloader for zCorewangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/rboot
zcore-linux-syscallLinux syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-syscall
zcore-driversDevice drivers of zCoreequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-drivers
zcore-libc-testTest scripts for zCore OS.Chenc@jia.jexiaoluoyuan@163.comhttps://github.com/kern-crates/libc-test
zcore-zircon-objectZircon kernel objectswangrunji0408@163.companqinglin00@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-object
zcore-linux-objectLinux kernel objectswangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-object
zcore-zircon-userUser programs for zCore/Zirconwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-user

Testing

LibOS Mode Testing

Zircon related

Run Zircon official core-tests:

cd zcore-tests && make zircon-core-test-libos

Linux related

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.

Bare-metal Mode Testing

Zircon related

Run Zircon official core-tests on bare-metal:

cd zcore-tests && make zircon-core-test

Linux related

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!)

Graph/Game

snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c

Step1: compile usr app

We can use musl-gcc compile it in x86_64 mode

Step2: change zcore for run snake app first.

change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]

Step3: prepare root fs image, run zcore in linux-bare-metal mode

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 imagecd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on

Then you can play the game. Operation

  • Keyboard
    • W/A/S/D: Move
    • R: Restart
    • ESC: End
  • Mouse
    • Left: Speed up
    • Right: Slow down
    • Middle: Pause/Resume

Doc

make doc

RISC-V 64 porting info

Components

Overview

Hardware Abstraction Layer

Bare MetalLinux / macOS
Virtual Memory ManagementPage TableMmap
Thread Managementexecutorasync-std::task
Exception HandlingInterruptSignal

Small Goal & Little Plans

Dev Status

🚧 Working In Progress

  • 2020.04.16: Zircon console is working on zCore! 🎉

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - kern-crates/zCore · GitHub
Skip to content

Repository files navigation

zCore

CIDocsCoverage Status

Reimplement Zircon microkernel in safe Rust as a userspace program!

Getting started

Environments:

Developing environment info

  • 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.

Run zcore in libos mode

Run zcore in linux-libos mode

  • 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 of error, warn, info, debug, trace.

Run native Zircon program (shell) in zircon-libos mode:

  • step 1: Compile and Run Zircon shell

    cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi

    The graphic and LOG options are the same as Linux.

Run zcore in bare-metal mode

Run Linux shell in linux-bare-metal mode:


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]

Run Zircon shell in zircon-bare-metal mode:

  • 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-usercd zcore-zircon-user && make zbi MODE=release
    # Run your programs in zCore
    make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]

List of zCore's modular crates

NameDescriptionAuthorsRepo URL
zcorezCore Reimplement Zircon microkernel in safe Rust as a userspace program!wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zCore
zcore-loaderLinux and Zircon user programs loader and runner.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-loader
zcore-kernel-halKernel HAL interface definations.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-kernel-hal
zcore-zircon-syscallZircon syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-syscall
zcore-testsTest scripts for zCore OS.wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/zcore-tests
zcore-rbootThe x86_64 UEFI bootloader for zCorewangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/rboot
zcore-linux-syscallLinux syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-syscall
zcore-driversDevice drivers of zCoreequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-drivers
zcore-libc-testTest scripts for zCore OS.Chenc@jia.jexiaoluoyuan@163.comhttps://github.com/kern-crates/libc-test
zcore-zircon-objectZircon kernel objectswangrunji0408@163.companqinglin00@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-object
zcore-linux-objectLinux kernel objectswangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-object
zcore-zircon-userUser programs for zCore/Zirconwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-user

Testing

LibOS Mode Testing

Zircon related

Run Zircon official core-tests:

cd zcore-tests && make zircon-core-test-libos

Linux related

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.

Bare-metal Mode Testing

Zircon related

Run Zircon official core-tests on bare-metal:

cd zcore-tests && make zircon-core-test

Linux related

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!)

Graph/Game

snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c

Step1: compile usr app

We can use musl-gcc compile it in x86_64 mode

Step2: change zcore for run snake app first.

change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]

Step3: prepare root fs image, run zcore in linux-bare-metal mode

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 imagecd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on

Then you can play the game. Operation

  • Keyboard
    • W/A/S/D: Move
    • R: Restart
    • ESC: End
  • Mouse
    • Left: Speed up
    • Right: Slow down
    • Middle: Pause/Resume

Doc

make doc

RISC-V 64 porting info

Components

Overview

Hardware Abstraction Layer

Bare MetalLinux / macOS
Virtual Memory ManagementPage TableMmap
Thread Managementexecutorasync-std::task
Exception HandlingInterruptSignal

Small Goal & Little Plans

Dev Status

🚧 Working In Progress

  • 2020.04.16: Zircon console is working on zCore! 🎉

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - kern-crates/zCore · GitHub
Skip to content

Repository files navigation

zCore

CIDocsCoverage Status

Reimplement Zircon microkernel in safe Rust as a userspace program!

Getting started

Environments:

Developing environment info

  • 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.

Run zcore in libos mode

Run zcore in linux-libos mode

  • 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 of error, warn, info, debug, trace.

Run native Zircon program (shell) in zircon-libos mode:

  • step 1: Compile and Run Zircon shell

    cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi

    The graphic and LOG options are the same as Linux.

Run zcore in bare-metal mode

Run Linux shell in linux-bare-metal mode:


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]

Run Zircon shell in zircon-bare-metal mode:

  • 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-usercd zcore-zircon-user && make zbi MODE=release
    # Run your programs in zCore
    make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]

List of zCore's modular crates

NameDescriptionAuthorsRepo URL
zcorezCore Reimplement Zircon microkernel in safe Rust as a userspace program!wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zCore
zcore-loaderLinux and Zircon user programs loader and runner.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-loader
zcore-kernel-halKernel HAL interface definations.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-kernel-hal
zcore-zircon-syscallZircon syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-syscall
zcore-testsTest scripts for zCore OS.wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/zcore-tests
zcore-rbootThe x86_64 UEFI bootloader for zCorewangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/rboot
zcore-linux-syscallLinux syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-syscall
zcore-driversDevice drivers of zCoreequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-drivers
zcore-libc-testTest scripts for zCore OS.Chenc@jia.jexiaoluoyuan@163.comhttps://github.com/kern-crates/libc-test
zcore-zircon-objectZircon kernel objectswangrunji0408@163.companqinglin00@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-object
zcore-linux-objectLinux kernel objectswangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-object
zcore-zircon-userUser programs for zCore/Zirconwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-user

Testing

LibOS Mode Testing

Zircon related

Run Zircon official core-tests:

cd zcore-tests && make zircon-core-test-libos

Linux related

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.

Bare-metal Mode Testing

Zircon related

Run Zircon official core-tests on bare-metal:

cd zcore-tests && make zircon-core-test

Linux related

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!)

Graph/Game

snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c

Step1: compile usr app

We can use musl-gcc compile it in x86_64 mode

Step2: change zcore for run snake app first.

change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]

Step3: prepare root fs image, run zcore in linux-bare-metal mode

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 imagecd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on

Then you can play the game. Operation

  • Keyboard
    • W/A/S/D: Move
    • R: Restart
    • ESC: End
  • Mouse
    • Left: Speed up
    • Right: Slow down
    • Middle: Pause/Resume

Doc

make doc

RISC-V 64 porting info

Components

Overview

Hardware Abstraction Layer

Bare MetalLinux / macOS
Virtual Memory ManagementPage TableMmap
Thread Managementexecutorasync-std::task
Exception HandlingInterruptSignal

Small Goal & Little Plans

Dev Status

🚧 Working In Progress

  • 2020.04.16: Zircon console is working on zCore! 🎉

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - kern-crates/zCore · GitHub
Skip to content

Repository files navigation

zCore

CIDocsCoverage Status

Reimplement Zircon microkernel in safe Rust as a userspace program!

Getting started

Environments:

Developing environment info

  • 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.

Run zcore in libos mode

Run zcore in linux-libos mode

  • 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 of error, warn, info, debug, trace.

Run native Zircon program (shell) in zircon-libos mode:

  • step 1: Compile and Run Zircon shell

    cargo run --release --features "zircon libos" -- prebuilt/zircon/x64/bringup.zbi

    The graphic and LOG options are the same as Linux.

Run zcore in bare-metal mode

Run Linux shell in linux-bare-metal mode:


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]

Run Zircon shell in zircon-bare-metal mode:

  • 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-usercd zcore-zircon-user && make zbi MODE=release
    # Run your programs in zCore
    make run MODE=release USER=1 [LOG=warn] [GRAPHIC=on] [ACCEL=1]

List of zCore's modular crates

NameDescriptionAuthorsRepo URL
zcorezCore Reimplement Zircon microkernel in safe Rust as a userspace program!wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zCore
zcore-loaderLinux and Zircon user programs loader and runner.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-loader
zcore-kernel-halKernel HAL interface definations.wangrunji0408@163.comequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-kernel-hal
zcore-zircon-syscallZircon syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-syscall
zcore-testsTest scripts for zCore OS.wangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/zcore-tests
zcore-rbootThe x86_64 UEFI bootloader for zCorewangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/kern-crates/rboot
zcore-linux-syscallLinux syscalls implementationwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-syscall
zcore-driversDevice drivers of zCoreequation618@gmail.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-drivers
zcore-libc-testTest scripts for zCore OS.Chenc@jia.jexiaoluoyuan@163.comhttps://github.com/kern-crates/libc-test
zcore-zircon-objectZircon kernel objectswangrunji0408@163.companqinglin00@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-object
zcore-linux-objectLinux kernel objectswangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-linux-object
zcore-zircon-userUser programs for zCore/Zirconwangrunji0408@163.comxiaoluoyuan@163.comhttps://github.com/kern-crates/zcore-zircon-user

Testing

LibOS Mode Testing

Zircon related

Run Zircon official core-tests:

cd zcore-tests && make zircon-core-test-libos

Linux related

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.

Bare-metal Mode Testing

Zircon related

Run Zircon official core-tests on bare-metal:

cd zcore-tests && make zircon-core-test

Linux related

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!)

Graph/Game

snake game: https://github.com/rcore-os/rcore-user/blob/master/app/src/snake.c

Step1: compile usr app

We can use musl-gcc compile it in x86_64 mode

Step2: change zcore for run snake app first.

change zCore/zCore/main.rs L176 vec!["/bin/busybox".into(), "sh".into()] TO vec!["/bin/snake".into(), "sh".into()]

Step3: prepare root fs image, run zcore in linux-bare-metal mode

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 imagecd zCore #zCore kernel dir
make run MODE=release LINUX=1 GRAPHIC=on

Then you can play the game. Operation

  • Keyboard
    • W/A/S/D: Move
    • R: Restart
    • ESC: End
  • Mouse
    • Left: Speed up
    • Right: Slow down
    • Middle: Pause/Resume

Doc

make doc

RISC-V 64 porting info

Components

Overview

Hardware Abstraction Layer

Bare MetalLinux / macOS
Virtual Memory ManagementPage TableMmap
Thread Managementexecutorasync-std::task
Exception HandlingInterruptSignal

Small Goal & Little Plans

Dev Status

🚧 Working In Progress

  • 2020.04.16: Zircon console is working on zCore! 🎉

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages