Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Repository files navigation

Ask DeepWiki

StarryOS

NO LONGER MAINTAINED. You can check for the latest stable maintenance version in https://github.com/Starry-OS/StarryOS.

CI

A monolithic kernel based on ArceOS.

Quick Start

Build and Run through Docker

Install Docker in your system.

Then build all dependencies through provided dockerfile:

./scripts/get_deps.sh
cd .arceos
docker build -t starry -f Dockerfile .

Create a container and build/run app:

# back to the root directory of the projectcd ..
docker run --privileged --rm -it -v $(pwd):/starry -w /starry starry bash
# Now build/run app in the container
make user_apps
make defconfig
make run

Manually Build and Run

1. Install Build Dependencies

cargo install cargo-binutils axconfig-gen
sudo apt install libclang-dev cmake dosfstools build-essential

Download & install musl toolchains:

# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
tar zxf loongarch64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrcexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH

2. Dependencies for running apps

Note: If the developer wants to install qemu from the source code, please refer to Dockerfile.

# for Debian/Ubuntu
sudo apt-get install qemu-system
# for macos
brew install qemu

Notice: The version of qemu should be no less than 8.2.0.

Other systems, arch and version please refer to Qemu Download

3. Build & Run

# Clone the base repository
./scripts/get_deps.sh
# Run riscv64 example
make ARCH=riscv64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=riscv64 defconfig
make ARCH=riscv64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run x86_64 example
make ARCH=x86_64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=x86_64 defconfig
make ARCH=x86_64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run aarch64 example
make ARCH=aarch64 AX_TESTCASE=nimbos user_apps
make ARCH=aarch64 defconfig
make ARCH=aarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run Loongarch64 example
make ARCH=loongarch64 AX_TESTCASE=nimbos user_apps
make ARCH=loongarch64 defconfig
make ARCH=loongarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run another example (libc testcases)
make ARCH=riscv64 AX_TESTCASE=libc user_apps
make ARCH=riscv64 defconfig
# When running libc testcases, you need to enable `fp_simd` feature.
make ARCH=riscv64 AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run

4. Commands Explanation

# Clone the base repository
./scripts/get_deps.sh
# Build user applications
make ARCH=<arch> AX_TESTCASE=<testcases> user_apps
# Build kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> build
# Run kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> run

Where testcases are shown under the apps/ folder.

<arch> should be one of riscv64, aarch64, x86_64, loongarch64.

<log> should be one of off, error, warn, info, debug, trace.

More arguments and targets can be found in Makefile.

For example, to run the nimbos testcases on qemu-system-x86_64 with log level info:

make ARCH=x86_64 LOG=info AX_TESTCASE=nimbos run

Note: Arguments like NET, BLK, and GRAPHIC enable devices in QEMU, which take effect only at runtime, not at build time. More features can be found in the Cargo.toml of arceos.

Development with Visual Studio Code

Since ArceOS relies on special build scripts and some environment variables, this usually causes rust-analyzer to prompt some annoying errors. You may want to put the following configuration into .vscode/settings.json (ie workspace settings):

{
"rust-analyzer.cargo.extraEnv": {
"AX_CONFIG_PATH": "${workspaceFolder}/.axconfig.toml"
}
}

Test for oscomp testcases

We can run testcases of the OS competition with StarryOS. Guidence can be found in Starry-Tutorial.

And you can run the testcases with the following commands:

# Clone the base repository
./scripts/get_deps.sh
# run the testcases of oscomp on x86_64
$ make oscomp_run ARCH=x86_64 # If it reports an error: -accel kvm: failed to initialize kvm: Permission denied, please add `ACCEL=n` argument.# run the testcases of oscomp on riscv64
$ make oscomp_run ARCH=riscv64
# run the testcases of oscomp on aarch64
$ make oscomp_run ARCH=aarch64
# run the testcases of oscomp on loongarch64
$ make oscomp_run ARCH=loongarch64

To run more testcases from oscomp, you can refer to the oscomp README.

How to add new testcases

To allow the kernel to run user-written test cases, temporary test cases can be created.

If you want to add source codes of the testcases, you can refer to the libc testcases and add your source codes in the c testcase folder, and append the testcase_list with your testcase name. Then you can run the testcases with the following commands:

make AX_TESTCASE=libc user_apps ARCH=$(YOUR_ARCH)
make AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run ARCH=$(YOUR_ARCH)

If you want to add executable file directly, the specific steps are as follows:

  1. Create a temporary test case folder

    cd apps && mkdir custom &&cd custom
  2. Create a Makefile in the current directory and fill in the following content:

    all: build
    build:
    clean:
    rm -rf *.out

    The reason for creating an empty build Makefile is that when Starry packages test case images, it will first execute the test case's build program by default. However, since our temporary test case does not currently have a defined build program, make all does not need to perform any operations.

  3. Copy your executable file into the current directory.

  4. Create a testcase_list file in the current directory and add the relative path of the executable file that needs to be executed. Note that this path should be relative to apps/custom (i.e., the current directory). In our example, the content should be:

    hello
  5. Return to the project root directory and run the following command:

    sudo ./build_img.sh -fs ext4 -file apps/custom
    cp disk.img .arceos/disk.img
    make defconfig
    make AX_TESTCASE=custom ARCH=x86_64 BLK=y NET=y FEATURES=fp_simd,lwext4_rs LOG=off ACCEL=n run

    This completes the execution of the custom test case.

About

基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/

Topics

Resources

Stars

20 stars

Watchers

2 watching

Forks

Releases

Packages

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 - oscomp/starry-next: 基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/ · GitHub
Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Repository files navigation

Ask DeepWiki

StarryOS

NO LONGER MAINTAINED. You can check for the latest stable maintenance version in https://github.com/Starry-OS/StarryOS.

CI

A monolithic kernel based on ArceOS.

Quick Start

Build and Run through Docker

Install Docker in your system.

Then build all dependencies through provided dockerfile:

./scripts/get_deps.sh
cd .arceos
docker build -t starry -f Dockerfile .

Create a container and build/run app:

# back to the root directory of the projectcd ..
docker run --privileged --rm -it -v $(pwd):/starry -w /starry starry bash
# Now build/run app in the container
make user_apps
make defconfig
make run

Manually Build and Run

1. Install Build Dependencies

cargo install cargo-binutils axconfig-gen
sudo apt install libclang-dev cmake dosfstools build-essential

Download & install musl toolchains:

# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
tar zxf loongarch64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrcexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH

2. Dependencies for running apps

Note: If the developer wants to install qemu from the source code, please refer to Dockerfile.

# for Debian/Ubuntu
sudo apt-get install qemu-system
# for macos
brew install qemu

Notice: The version of qemu should be no less than 8.2.0.

Other systems, arch and version please refer to Qemu Download

3. Build & Run

# Clone the base repository
./scripts/get_deps.sh
# Run riscv64 example
make ARCH=riscv64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=riscv64 defconfig
make ARCH=riscv64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run x86_64 example
make ARCH=x86_64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=x86_64 defconfig
make ARCH=x86_64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run aarch64 example
make ARCH=aarch64 AX_TESTCASE=nimbos user_apps
make ARCH=aarch64 defconfig
make ARCH=aarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run Loongarch64 example
make ARCH=loongarch64 AX_TESTCASE=nimbos user_apps
make ARCH=loongarch64 defconfig
make ARCH=loongarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run another example (libc testcases)
make ARCH=riscv64 AX_TESTCASE=libc user_apps
make ARCH=riscv64 defconfig
# When running libc testcases, you need to enable `fp_simd` feature.
make ARCH=riscv64 AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run

4. Commands Explanation

# Clone the base repository
./scripts/get_deps.sh
# Build user applications
make ARCH=<arch> AX_TESTCASE=<testcases> user_apps
# Build kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> build
# Run kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> run

Where testcases are shown under the apps/ folder.

<arch> should be one of riscv64, aarch64, x86_64, loongarch64.

<log> should be one of off, error, warn, info, debug, trace.

More arguments and targets can be found in Makefile.

For example, to run the nimbos testcases on qemu-system-x86_64 with log level info:

make ARCH=x86_64 LOG=info AX_TESTCASE=nimbos run

Note: Arguments like NET, BLK, and GRAPHIC enable devices in QEMU, which take effect only at runtime, not at build time. More features can be found in the Cargo.toml of arceos.

Development with Visual Studio Code

Since ArceOS relies on special build scripts and some environment variables, this usually causes rust-analyzer to prompt some annoying errors. You may want to put the following configuration into .vscode/settings.json (ie workspace settings):

{
"rust-analyzer.cargo.extraEnv": {
"AX_CONFIG_PATH": "${workspaceFolder}/.axconfig.toml"
}
}

Test for oscomp testcases

We can run testcases of the OS competition with StarryOS. Guidence can be found in Starry-Tutorial.

And you can run the testcases with the following commands:

# Clone the base repository
./scripts/get_deps.sh
# run the testcases of oscomp on x86_64
$ make oscomp_run ARCH=x86_64 # If it reports an error: -accel kvm: failed to initialize kvm: Permission denied, please add `ACCEL=n` argument.# run the testcases of oscomp on riscv64
$ make oscomp_run ARCH=riscv64
# run the testcases of oscomp on aarch64
$ make oscomp_run ARCH=aarch64
# run the testcases of oscomp on loongarch64
$ make oscomp_run ARCH=loongarch64

To run more testcases from oscomp, you can refer to the oscomp README.

How to add new testcases

To allow the kernel to run user-written test cases, temporary test cases can be created.

If you want to add source codes of the testcases, you can refer to the libc testcases and add your source codes in the c testcase folder, and append the testcase_list with your testcase name. Then you can run the testcases with the following commands:

make AX_TESTCASE=libc user_apps ARCH=$(YOUR_ARCH)
make AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run ARCH=$(YOUR_ARCH)

If you want to add executable file directly, the specific steps are as follows:

  1. Create a temporary test case folder

    cd apps && mkdir custom &&cd custom
  2. Create a Makefile in the current directory and fill in the following content:

    all: build
    build:
    clean:
    rm -rf *.out

    The reason for creating an empty build Makefile is that when Starry packages test case images, it will first execute the test case's build program by default. However, since our temporary test case does not currently have a defined build program, make all does not need to perform any operations.

  3. Copy your executable file into the current directory.

  4. Create a testcase_list file in the current directory and add the relative path of the executable file that needs to be executed. Note that this path should be relative to apps/custom (i.e., the current directory). In our example, the content should be:

    hello
  5. Return to the project root directory and run the following command:

    sudo ./build_img.sh -fs ext4 -file apps/custom
    cp disk.img .arceos/disk.img
    make defconfig
    make AX_TESTCASE=custom ARCH=x86_64 BLK=y NET=y FEATURES=fp_simd,lwext4_rs LOG=off ACCEL=n run

    This completes the execution of the custom test case.

About

基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/

Topics

Resources

Stars

20 stars

Watchers

2 watching

Forks

Releases

Packages

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 - oscomp/starry-next: 基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/ · GitHub
Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Repository files navigation

Ask DeepWiki

StarryOS

NO LONGER MAINTAINED. You can check for the latest stable maintenance version in https://github.com/Starry-OS/StarryOS.

CI

A monolithic kernel based on ArceOS.

Quick Start

Build and Run through Docker

Install Docker in your system.

Then build all dependencies through provided dockerfile:

./scripts/get_deps.sh
cd .arceos
docker build -t starry -f Dockerfile .

Create a container and build/run app:

# back to the root directory of the projectcd ..
docker run --privileged --rm -it -v $(pwd):/starry -w /starry starry bash
# Now build/run app in the container
make user_apps
make defconfig
make run

Manually Build and Run

1. Install Build Dependencies

cargo install cargo-binutils axconfig-gen
sudo apt install libclang-dev cmake dosfstools build-essential

Download & install musl toolchains:

# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
tar zxf loongarch64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrcexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH

2. Dependencies for running apps

Note: If the developer wants to install qemu from the source code, please refer to Dockerfile.

# for Debian/Ubuntu
sudo apt-get install qemu-system
# for macos
brew install qemu

Notice: The version of qemu should be no less than 8.2.0.

Other systems, arch and version please refer to Qemu Download

3. Build & Run

# Clone the base repository
./scripts/get_deps.sh
# Run riscv64 example
make ARCH=riscv64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=riscv64 defconfig
make ARCH=riscv64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run x86_64 example
make ARCH=x86_64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=x86_64 defconfig
make ARCH=x86_64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run aarch64 example
make ARCH=aarch64 AX_TESTCASE=nimbos user_apps
make ARCH=aarch64 defconfig
make ARCH=aarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run Loongarch64 example
make ARCH=loongarch64 AX_TESTCASE=nimbos user_apps
make ARCH=loongarch64 defconfig
make ARCH=loongarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run another example (libc testcases)
make ARCH=riscv64 AX_TESTCASE=libc user_apps
make ARCH=riscv64 defconfig
# When running libc testcases, you need to enable `fp_simd` feature.
make ARCH=riscv64 AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run

4. Commands Explanation

# Clone the base repository
./scripts/get_deps.sh
# Build user applications
make ARCH=<arch> AX_TESTCASE=<testcases> user_apps
# Build kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> build
# Run kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> run

Where testcases are shown under the apps/ folder.

<arch> should be one of riscv64, aarch64, x86_64, loongarch64.

<log> should be one of off, error, warn, info, debug, trace.

More arguments and targets can be found in Makefile.

For example, to run the nimbos testcases on qemu-system-x86_64 with log level info:

make ARCH=x86_64 LOG=info AX_TESTCASE=nimbos run

Note: Arguments like NET, BLK, and GRAPHIC enable devices in QEMU, which take effect only at runtime, not at build time. More features can be found in the Cargo.toml of arceos.

Development with Visual Studio Code

Since ArceOS relies on special build scripts and some environment variables, this usually causes rust-analyzer to prompt some annoying errors. You may want to put the following configuration into .vscode/settings.json (ie workspace settings):

{
"rust-analyzer.cargo.extraEnv": {
"AX_CONFIG_PATH": "${workspaceFolder}/.axconfig.toml"
}
}

Test for oscomp testcases

We can run testcases of the OS competition with StarryOS. Guidence can be found in Starry-Tutorial.

And you can run the testcases with the following commands:

# Clone the base repository
./scripts/get_deps.sh
# run the testcases of oscomp on x86_64
$ make oscomp_run ARCH=x86_64 # If it reports an error: -accel kvm: failed to initialize kvm: Permission denied, please add `ACCEL=n` argument.# run the testcases of oscomp on riscv64
$ make oscomp_run ARCH=riscv64
# run the testcases of oscomp on aarch64
$ make oscomp_run ARCH=aarch64
# run the testcases of oscomp on loongarch64
$ make oscomp_run ARCH=loongarch64

To run more testcases from oscomp, you can refer to the oscomp README.

How to add new testcases

To allow the kernel to run user-written test cases, temporary test cases can be created.

If you want to add source codes of the testcases, you can refer to the libc testcases and add your source codes in the c testcase folder, and append the testcase_list with your testcase name. Then you can run the testcases with the following commands:

make AX_TESTCASE=libc user_apps ARCH=$(YOUR_ARCH)
make AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run ARCH=$(YOUR_ARCH)

If you want to add executable file directly, the specific steps are as follows:

  1. Create a temporary test case folder

    cd apps && mkdir custom &&cd custom
  2. Create a Makefile in the current directory and fill in the following content:

    all: build
    build:
    clean:
    rm -rf *.out

    The reason for creating an empty build Makefile is that when Starry packages test case images, it will first execute the test case's build program by default. However, since our temporary test case does not currently have a defined build program, make all does not need to perform any operations.

  3. Copy your executable file into the current directory.

  4. Create a testcase_list file in the current directory and add the relative path of the executable file that needs to be executed. Note that this path should be relative to apps/custom (i.e., the current directory). In our example, the content should be:

    hello
  5. Return to the project root directory and run the following command:

    sudo ./build_img.sh -fs ext4 -file apps/custom
    cp disk.img .arceos/disk.img
    make defconfig
    make AX_TESTCASE=custom ARCH=x86_64 BLK=y NET=y FEATURES=fp_simd,lwext4_rs LOG=off ACCEL=n run

    This completes the execution of the custom test case.

About

基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/

Topics

Resources

Stars

20 stars

Watchers

2 watching

Forks

Releases

Packages

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 - oscomp/starry-next: 基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/ · GitHub
Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Repository files navigation

Ask DeepWiki

StarryOS

NO LONGER MAINTAINED. You can check for the latest stable maintenance version in https://github.com/Starry-OS/StarryOS.

CI

A monolithic kernel based on ArceOS.

Quick Start

Build and Run through Docker

Install Docker in your system.

Then build all dependencies through provided dockerfile:

./scripts/get_deps.sh
cd .arceos
docker build -t starry -f Dockerfile .

Create a container and build/run app:

# back to the root directory of the projectcd ..
docker run --privileged --rm -it -v $(pwd):/starry -w /starry starry bash
# Now build/run app in the container
make user_apps
make defconfig
make run

Manually Build and Run

1. Install Build Dependencies

cargo install cargo-binutils axconfig-gen
sudo apt install libclang-dev cmake dosfstools build-essential

Download & install musl toolchains:

# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
tar zxf loongarch64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrcexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH

2. Dependencies for running apps

Note: If the developer wants to install qemu from the source code, please refer to Dockerfile.

# for Debian/Ubuntu
sudo apt-get install qemu-system
# for macos
brew install qemu

Notice: The version of qemu should be no less than 8.2.0.

Other systems, arch and version please refer to Qemu Download

3. Build & Run

# Clone the base repository
./scripts/get_deps.sh
# Run riscv64 example
make ARCH=riscv64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=riscv64 defconfig
make ARCH=riscv64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run x86_64 example
make ARCH=x86_64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=x86_64 defconfig
make ARCH=x86_64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run aarch64 example
make ARCH=aarch64 AX_TESTCASE=nimbos user_apps
make ARCH=aarch64 defconfig
make ARCH=aarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run Loongarch64 example
make ARCH=loongarch64 AX_TESTCASE=nimbos user_apps
make ARCH=loongarch64 defconfig
make ARCH=loongarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run another example (libc testcases)
make ARCH=riscv64 AX_TESTCASE=libc user_apps
make ARCH=riscv64 defconfig
# When running libc testcases, you need to enable `fp_simd` feature.
make ARCH=riscv64 AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run

4. Commands Explanation

# Clone the base repository
./scripts/get_deps.sh
# Build user applications
make ARCH=<arch> AX_TESTCASE=<testcases> user_apps
# Build kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> build
# Run kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> run

Where testcases are shown under the apps/ folder.

<arch> should be one of riscv64, aarch64, x86_64, loongarch64.

<log> should be one of off, error, warn, info, debug, trace.

More arguments and targets can be found in Makefile.

For example, to run the nimbos testcases on qemu-system-x86_64 with log level info:

make ARCH=x86_64 LOG=info AX_TESTCASE=nimbos run

Note: Arguments like NET, BLK, and GRAPHIC enable devices in QEMU, which take effect only at runtime, not at build time. More features can be found in the Cargo.toml of arceos.

Development with Visual Studio Code

Since ArceOS relies on special build scripts and some environment variables, this usually causes rust-analyzer to prompt some annoying errors. You may want to put the following configuration into .vscode/settings.json (ie workspace settings):

{
"rust-analyzer.cargo.extraEnv": {
"AX_CONFIG_PATH": "${workspaceFolder}/.axconfig.toml"
}
}

Test for oscomp testcases

We can run testcases of the OS competition with StarryOS. Guidence can be found in Starry-Tutorial.

And you can run the testcases with the following commands:

# Clone the base repository
./scripts/get_deps.sh
# run the testcases of oscomp on x86_64
$ make oscomp_run ARCH=x86_64 # If it reports an error: -accel kvm: failed to initialize kvm: Permission denied, please add `ACCEL=n` argument.# run the testcases of oscomp on riscv64
$ make oscomp_run ARCH=riscv64
# run the testcases of oscomp on aarch64
$ make oscomp_run ARCH=aarch64
# run the testcases of oscomp on loongarch64
$ make oscomp_run ARCH=loongarch64

To run more testcases from oscomp, you can refer to the oscomp README.

How to add new testcases

To allow the kernel to run user-written test cases, temporary test cases can be created.

If you want to add source codes of the testcases, you can refer to the libc testcases and add your source codes in the c testcase folder, and append the testcase_list with your testcase name. Then you can run the testcases with the following commands:

make AX_TESTCASE=libc user_apps ARCH=$(YOUR_ARCH)
make AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run ARCH=$(YOUR_ARCH)

If you want to add executable file directly, the specific steps are as follows:

  1. Create a temporary test case folder

    cd apps && mkdir custom &&cd custom
  2. Create a Makefile in the current directory and fill in the following content:

    all: build
    build:
    clean:
    rm -rf *.out

    The reason for creating an empty build Makefile is that when Starry packages test case images, it will first execute the test case's build program by default. However, since our temporary test case does not currently have a defined build program, make all does not need to perform any operations.

  3. Copy your executable file into the current directory.

  4. Create a testcase_list file in the current directory and add the relative path of the executable file that needs to be executed. Note that this path should be relative to apps/custom (i.e., the current directory). In our example, the content should be:

    hello
  5. Return to the project root directory and run the following command:

    sudo ./build_img.sh -fs ext4 -file apps/custom
    cp disk.img .arceos/disk.img
    make defconfig
    make AX_TESTCASE=custom ARCH=x86_64 BLK=y NET=y FEATURES=fp_simd,lwext4_rs LOG=off ACCEL=n run

    This completes the execution of the custom test case.

About

基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/

Topics

Resources

Stars

20 stars

Watchers

2 watching

Forks

Releases

Packages

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 - oscomp/starry-next: 基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/ · GitHub
Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Repository files navigation

Ask DeepWiki

StarryOS

NO LONGER MAINTAINED. You can check for the latest stable maintenance version in https://github.com/Starry-OS/StarryOS.

CI

A monolithic kernel based on ArceOS.

Quick Start

Build and Run through Docker

Install Docker in your system.

Then build all dependencies through provided dockerfile:

./scripts/get_deps.sh
cd .arceos
docker build -t starry -f Dockerfile .

Create a container and build/run app:

# back to the root directory of the projectcd ..
docker run --privileged --rm -it -v $(pwd):/starry -w /starry starry bash
# Now build/run app in the container
make user_apps
make defconfig
make run

Manually Build and Run

1. Install Build Dependencies

cargo install cargo-binutils axconfig-gen
sudo apt install libclang-dev cmake dosfstools build-essential

Download & install musl toolchains:

# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
tar zxf loongarch64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrcexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH

2. Dependencies for running apps

Note: If the developer wants to install qemu from the source code, please refer to Dockerfile.

# for Debian/Ubuntu
sudo apt-get install qemu-system
# for macos
brew install qemu

Notice: The version of qemu should be no less than 8.2.0.

Other systems, arch and version please refer to Qemu Download

3. Build & Run

# Clone the base repository
./scripts/get_deps.sh
# Run riscv64 example
make ARCH=riscv64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=riscv64 defconfig
make ARCH=riscv64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run x86_64 example
make ARCH=x86_64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=x86_64 defconfig
make ARCH=x86_64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run aarch64 example
make ARCH=aarch64 AX_TESTCASE=nimbos user_apps
make ARCH=aarch64 defconfig
make ARCH=aarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run Loongarch64 example
make ARCH=loongarch64 AX_TESTCASE=nimbos user_apps
make ARCH=loongarch64 defconfig
make ARCH=loongarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run another example (libc testcases)
make ARCH=riscv64 AX_TESTCASE=libc user_apps
make ARCH=riscv64 defconfig
# When running libc testcases, you need to enable `fp_simd` feature.
make ARCH=riscv64 AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run

4. Commands Explanation

# Clone the base repository
./scripts/get_deps.sh
# Build user applications
make ARCH=<arch> AX_TESTCASE=<testcases> user_apps
# Build kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> build
# Run kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> run

Where testcases are shown under the apps/ folder.

<arch> should be one of riscv64, aarch64, x86_64, loongarch64.

<log> should be one of off, error, warn, info, debug, trace.

More arguments and targets can be found in Makefile.

For example, to run the nimbos testcases on qemu-system-x86_64 with log level info:

make ARCH=x86_64 LOG=info AX_TESTCASE=nimbos run

Note: Arguments like NET, BLK, and GRAPHIC enable devices in QEMU, which take effect only at runtime, not at build time. More features can be found in the Cargo.toml of arceos.

Development with Visual Studio Code

Since ArceOS relies on special build scripts and some environment variables, this usually causes rust-analyzer to prompt some annoying errors. You may want to put the following configuration into .vscode/settings.json (ie workspace settings):

{
"rust-analyzer.cargo.extraEnv": {
"AX_CONFIG_PATH": "${workspaceFolder}/.axconfig.toml"
}
}

Test for oscomp testcases

We can run testcases of the OS competition with StarryOS. Guidence can be found in Starry-Tutorial.

And you can run the testcases with the following commands:

# Clone the base repository
./scripts/get_deps.sh
# run the testcases of oscomp on x86_64
$ make oscomp_run ARCH=x86_64 # If it reports an error: -accel kvm: failed to initialize kvm: Permission denied, please add `ACCEL=n` argument.# run the testcases of oscomp on riscv64
$ make oscomp_run ARCH=riscv64
# run the testcases of oscomp on aarch64
$ make oscomp_run ARCH=aarch64
# run the testcases of oscomp on loongarch64
$ make oscomp_run ARCH=loongarch64

To run more testcases from oscomp, you can refer to the oscomp README.

How to add new testcases

To allow the kernel to run user-written test cases, temporary test cases can be created.

If you want to add source codes of the testcases, you can refer to the libc testcases and add your source codes in the c testcase folder, and append the testcase_list with your testcase name. Then you can run the testcases with the following commands:

make AX_TESTCASE=libc user_apps ARCH=$(YOUR_ARCH)
make AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run ARCH=$(YOUR_ARCH)

If you want to add executable file directly, the specific steps are as follows:

  1. Create a temporary test case folder

    cd apps && mkdir custom &&cd custom
  2. Create a Makefile in the current directory and fill in the following content:

    all: build
    build:
    clean:
    rm -rf *.out

    The reason for creating an empty build Makefile is that when Starry packages test case images, it will first execute the test case's build program by default. However, since our temporary test case does not currently have a defined build program, make all does not need to perform any operations.

  3. Copy your executable file into the current directory.

  4. Create a testcase_list file in the current directory and add the relative path of the executable file that needs to be executed. Note that this path should be relative to apps/custom (i.e., the current directory). In our example, the content should be:

    hello
  5. Return to the project root directory and run the following command:

    sudo ./build_img.sh -fs ext4 -file apps/custom
    cp disk.img .arceos/disk.img
    make defconfig
    make AX_TESTCASE=custom ARCH=x86_64 BLK=y NET=y FEATURES=fp_simd,lwext4_rs LOG=off ACCEL=n run

    This completes the execution of the custom test case.

About

基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/

Topics

Resources

Stars

20 stars

Watchers

2 watching

Forks

Releases

Packages

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 - oscomp/starry-next: 基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/ · GitHub
Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Repository files navigation

Ask DeepWiki

StarryOS

NO LONGER MAINTAINED. You can check for the latest stable maintenance version in https://github.com/Starry-OS/StarryOS.

CI

A monolithic kernel based on ArceOS.

Quick Start

Build and Run through Docker

Install Docker in your system.

Then build all dependencies through provided dockerfile:

./scripts/get_deps.sh
cd .arceos
docker build -t starry -f Dockerfile .

Create a container and build/run app:

# back to the root directory of the projectcd ..
docker run --privileged --rm -it -v $(pwd):/starry -w /starry starry bash
# Now build/run app in the container
make user_apps
make defconfig
make run

Manually Build and Run

1. Install Build Dependencies

cargo install cargo-binutils axconfig-gen
sudo apt install libclang-dev cmake dosfstools build-essential

Download & install musl toolchains:

# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
tar zxf loongarch64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrcexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH

2. Dependencies for running apps

Note: If the developer wants to install qemu from the source code, please refer to Dockerfile.

# for Debian/Ubuntu
sudo apt-get install qemu-system
# for macos
brew install qemu

Notice: The version of qemu should be no less than 8.2.0.

Other systems, arch and version please refer to Qemu Download

3. Build & Run

# Clone the base repository
./scripts/get_deps.sh
# Run riscv64 example
make ARCH=riscv64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=riscv64 defconfig
make ARCH=riscv64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run x86_64 example
make ARCH=x86_64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=x86_64 defconfig
make ARCH=x86_64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run aarch64 example
make ARCH=aarch64 AX_TESTCASE=nimbos user_apps
make ARCH=aarch64 defconfig
make ARCH=aarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run Loongarch64 example
make ARCH=loongarch64 AX_TESTCASE=nimbos user_apps
make ARCH=loongarch64 defconfig
make ARCH=loongarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run another example (libc testcases)
make ARCH=riscv64 AX_TESTCASE=libc user_apps
make ARCH=riscv64 defconfig
# When running libc testcases, you need to enable `fp_simd` feature.
make ARCH=riscv64 AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run

4. Commands Explanation

# Clone the base repository
./scripts/get_deps.sh
# Build user applications
make ARCH=<arch> AX_TESTCASE=<testcases> user_apps
# Build kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> build
# Run kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> run

Where testcases are shown under the apps/ folder.

<arch> should be one of riscv64, aarch64, x86_64, loongarch64.

<log> should be one of off, error, warn, info, debug, trace.

More arguments and targets can be found in Makefile.

For example, to run the nimbos testcases on qemu-system-x86_64 with log level info:

make ARCH=x86_64 LOG=info AX_TESTCASE=nimbos run

Note: Arguments like NET, BLK, and GRAPHIC enable devices in QEMU, which take effect only at runtime, not at build time. More features can be found in the Cargo.toml of arceos.

Development with Visual Studio Code

Since ArceOS relies on special build scripts and some environment variables, this usually causes rust-analyzer to prompt some annoying errors. You may want to put the following configuration into .vscode/settings.json (ie workspace settings):

{
"rust-analyzer.cargo.extraEnv": {
"AX_CONFIG_PATH": "${workspaceFolder}/.axconfig.toml"
}
}

Test for oscomp testcases

We can run testcases of the OS competition with StarryOS. Guidence can be found in Starry-Tutorial.

And you can run the testcases with the following commands:

# Clone the base repository
./scripts/get_deps.sh
# run the testcases of oscomp on x86_64
$ make oscomp_run ARCH=x86_64 # If it reports an error: -accel kvm: failed to initialize kvm: Permission denied, please add `ACCEL=n` argument.# run the testcases of oscomp on riscv64
$ make oscomp_run ARCH=riscv64
# run the testcases of oscomp on aarch64
$ make oscomp_run ARCH=aarch64
# run the testcases of oscomp on loongarch64
$ make oscomp_run ARCH=loongarch64

To run more testcases from oscomp, you can refer to the oscomp README.

How to add new testcases

To allow the kernel to run user-written test cases, temporary test cases can be created.

If you want to add source codes of the testcases, you can refer to the libc testcases and add your source codes in the c testcase folder, and append the testcase_list with your testcase name. Then you can run the testcases with the following commands:

make AX_TESTCASE=libc user_apps ARCH=$(YOUR_ARCH)
make AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run ARCH=$(YOUR_ARCH)

If you want to add executable file directly, the specific steps are as follows:

  1. Create a temporary test case folder

    cd apps && mkdir custom &&cd custom
  2. Create a Makefile in the current directory and fill in the following content:

    all: build
    build:
    clean:
    rm -rf *.out

    The reason for creating an empty build Makefile is that when Starry packages test case images, it will first execute the test case's build program by default. However, since our temporary test case does not currently have a defined build program, make all does not need to perform any operations.

  3. Copy your executable file into the current directory.

  4. Create a testcase_list file in the current directory and add the relative path of the executable file that needs to be executed. Note that this path should be relative to apps/custom (i.e., the current directory). In our example, the content should be:

    hello
  5. Return to the project root directory and run the following command:

    sudo ./build_img.sh -fs ext4 -file apps/custom
    cp disk.img .arceos/disk.img
    make defconfig
    make AX_TESTCASE=custom ARCH=x86_64 BLK=y NET=y FEATURES=fp_simd,lwext4_rs LOG=off ACCEL=n run

    This completes the execution of the custom test case.

About

基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/

Topics

Resources

Stars

20 stars

Watchers

2 watching

Forks

Releases

Packages

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 - oscomp/starry-next: 基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/ · GitHub
Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Repository files navigation

Ask DeepWiki

StarryOS

NO LONGER MAINTAINED. You can check for the latest stable maintenance version in https://github.com/Starry-OS/StarryOS.

CI

A monolithic kernel based on ArceOS.

Quick Start

Build and Run through Docker

Install Docker in your system.

Then build all dependencies through provided dockerfile:

./scripts/get_deps.sh
cd .arceos
docker build -t starry -f Dockerfile .

Create a container and build/run app:

# back to the root directory of the projectcd ..
docker run --privileged --rm -it -v $(pwd):/starry -w /starry starry bash
# Now build/run app in the container
make user_apps
make defconfig
make run

Manually Build and Run

1. Install Build Dependencies

cargo install cargo-binutils axconfig-gen
sudo apt install libclang-dev cmake dosfstools build-essential

Download & install musl toolchains:

# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
tar zxf loongarch64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrcexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH

2. Dependencies for running apps

Note: If the developer wants to install qemu from the source code, please refer to Dockerfile.

# for Debian/Ubuntu
sudo apt-get install qemu-system
# for macos
brew install qemu

Notice: The version of qemu should be no less than 8.2.0.

Other systems, arch and version please refer to Qemu Download

3. Build & Run

# Clone the base repository
./scripts/get_deps.sh
# Run riscv64 example
make ARCH=riscv64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=riscv64 defconfig
make ARCH=riscv64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run x86_64 example
make ARCH=x86_64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=x86_64 defconfig
make ARCH=x86_64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run aarch64 example
make ARCH=aarch64 AX_TESTCASE=nimbos user_apps
make ARCH=aarch64 defconfig
make ARCH=aarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run Loongarch64 example
make ARCH=loongarch64 AX_TESTCASE=nimbos user_apps
make ARCH=loongarch64 defconfig
make ARCH=loongarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run another example (libc testcases)
make ARCH=riscv64 AX_TESTCASE=libc user_apps
make ARCH=riscv64 defconfig
# When running libc testcases, you need to enable `fp_simd` feature.
make ARCH=riscv64 AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run

4. Commands Explanation

# Clone the base repository
./scripts/get_deps.sh
# Build user applications
make ARCH=<arch> AX_TESTCASE=<testcases> user_apps
# Build kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> build
# Run kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> run

Where testcases are shown under the apps/ folder.

<arch> should be one of riscv64, aarch64, x86_64, loongarch64.

<log> should be one of off, error, warn, info, debug, trace.

More arguments and targets can be found in Makefile.

For example, to run the nimbos testcases on qemu-system-x86_64 with log level info:

make ARCH=x86_64 LOG=info AX_TESTCASE=nimbos run

Note: Arguments like NET, BLK, and GRAPHIC enable devices in QEMU, which take effect only at runtime, not at build time. More features can be found in the Cargo.toml of arceos.

Development with Visual Studio Code

Since ArceOS relies on special build scripts and some environment variables, this usually causes rust-analyzer to prompt some annoying errors. You may want to put the following configuration into .vscode/settings.json (ie workspace settings):

{
"rust-analyzer.cargo.extraEnv": {
"AX_CONFIG_PATH": "${workspaceFolder}/.axconfig.toml"
}
}

Test for oscomp testcases

We can run testcases of the OS competition with StarryOS. Guidence can be found in Starry-Tutorial.

And you can run the testcases with the following commands:

# Clone the base repository
./scripts/get_deps.sh
# run the testcases of oscomp on x86_64
$ make oscomp_run ARCH=x86_64 # If it reports an error: -accel kvm: failed to initialize kvm: Permission denied, please add `ACCEL=n` argument.# run the testcases of oscomp on riscv64
$ make oscomp_run ARCH=riscv64
# run the testcases of oscomp on aarch64
$ make oscomp_run ARCH=aarch64
# run the testcases of oscomp on loongarch64
$ make oscomp_run ARCH=loongarch64

To run more testcases from oscomp, you can refer to the oscomp README.

How to add new testcases

To allow the kernel to run user-written test cases, temporary test cases can be created.

If you want to add source codes of the testcases, you can refer to the libc testcases and add your source codes in the c testcase folder, and append the testcase_list with your testcase name. Then you can run the testcases with the following commands:

make AX_TESTCASE=libc user_apps ARCH=$(YOUR_ARCH)
make AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run ARCH=$(YOUR_ARCH)

If you want to add executable file directly, the specific steps are as follows:

  1. Create a temporary test case folder

    cd apps && mkdir custom &&cd custom
  2. Create a Makefile in the current directory and fill in the following content:

    all: build
    build:
    clean:
    rm -rf *.out

    The reason for creating an empty build Makefile is that when Starry packages test case images, it will first execute the test case's build program by default. However, since our temporary test case does not currently have a defined build program, make all does not need to perform any operations.

  3. Copy your executable file into the current directory.

  4. Create a testcase_list file in the current directory and add the relative path of the executable file that needs to be executed. Note that this path should be relative to apps/custom (i.e., the current directory). In our example, the content should be:

    hello
  5. Return to the project root directory and run the following command:

    sudo ./build_img.sh -fs ext4 -file apps/custom
    cp disk.img .arceos/disk.img
    make defconfig
    make AX_TESTCASE=custom ARCH=x86_64 BLK=y NET=y FEATURES=fp_simd,lwext4_rs LOG=off ACCEL=n run

    This completes the execution of the custom test case.

About

基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/

Topics

Resources

Stars

20 stars

Watchers

2 watching

Forks

Releases

Packages

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 - oscomp/starry-next: 基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/ · GitHub
Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Repository files navigation

Ask DeepWiki

StarryOS

NO LONGER MAINTAINED. You can check for the latest stable maintenance version in https://github.com/Starry-OS/StarryOS.

CI

A monolithic kernel based on ArceOS.

Quick Start

Build and Run through Docker

Install Docker in your system.

Then build all dependencies through provided dockerfile:

./scripts/get_deps.sh
cd .arceos
docker build -t starry -f Dockerfile .

Create a container and build/run app:

# back to the root directory of the projectcd ..
docker run --privileged --rm -it -v $(pwd):/starry -w /starry starry bash
# Now build/run app in the container
make user_apps
make defconfig
make run

Manually Build and Run

1. Install Build Dependencies

cargo install cargo-binutils axconfig-gen
sudo apt install libclang-dev cmake dosfstools build-essential

Download & install musl toolchains:

# download
wget https://musl.cc/aarch64-linux-musl-cross.tgz
wget https://musl.cc/riscv64-linux-musl-cross.tgz
wget https://musl.cc/x86_64-linux-musl-cross.tgz
wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz
# install
tar zxf aarch64-linux-musl-cross.tgz
tar zxf riscv64-linux-musl-cross.tgz
tar zxf x86_64-linux-musl-cross.tgz
tar zxf loongarch64-linux-musl-cross.tgz
# exec below command in bash OR add below info in ~/.bashrcexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH

2. Dependencies for running apps

Note: If the developer wants to install qemu from the source code, please refer to Dockerfile.

# for Debian/Ubuntu
sudo apt-get install qemu-system
# for macos
brew install qemu

Notice: The version of qemu should be no less than 8.2.0.

Other systems, arch and version please refer to Qemu Download

3. Build & Run

# Clone the base repository
./scripts/get_deps.sh
# Run riscv64 example
make ARCH=riscv64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=riscv64 defconfig
make ARCH=riscv64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run x86_64 example
make ARCH=x86_64 AX_TESTCASE=nimbos user_apps
# When running on a new architecture, you need to generate the configuration file again.
make ARCH=x86_64 defconfig
make ARCH=x86_64 AX_TESTCASE=nimbos BLK=y NET=y ACCEL=n run
# Run aarch64 example
make ARCH=aarch64 AX_TESTCASE=nimbos user_apps
make ARCH=aarch64 defconfig
make ARCH=aarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run Loongarch64 example
make ARCH=loongarch64 AX_TESTCASE=nimbos user_apps
make ARCH=loongarch64 defconfig
make ARCH=loongarch64 AX_TESTCASE=nimbos BLK=y NET=y FEATURES=fp_simd ACCEL=n run
# Run another example (libc testcases)
make ARCH=riscv64 AX_TESTCASE=libc user_apps
make ARCH=riscv64 defconfig
# When running libc testcases, you need to enable `fp_simd` feature.
make ARCH=riscv64 AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run

4. Commands Explanation

# Clone the base repository
./scripts/get_deps.sh
# Build user applications
make ARCH=<arch> AX_TESTCASE=<testcases> user_apps
# Build kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> build
# Run kernel
make ARCH=<arch> LOG=<log> AX_TESTCASE=<testcases> run

Where testcases are shown under the apps/ folder.

<arch> should be one of riscv64, aarch64, x86_64, loongarch64.

<log> should be one of off, error, warn, info, debug, trace.

More arguments and targets can be found in Makefile.

For example, to run the nimbos testcases on qemu-system-x86_64 with log level info:

make ARCH=x86_64 LOG=info AX_TESTCASE=nimbos run

Note: Arguments like NET, BLK, and GRAPHIC enable devices in QEMU, which take effect only at runtime, not at build time. More features can be found in the Cargo.toml of arceos.

Development with Visual Studio Code

Since ArceOS relies on special build scripts and some environment variables, this usually causes rust-analyzer to prompt some annoying errors. You may want to put the following configuration into .vscode/settings.json (ie workspace settings):

{
"rust-analyzer.cargo.extraEnv": {
"AX_CONFIG_PATH": "${workspaceFolder}/.axconfig.toml"
}
}

Test for oscomp testcases

We can run testcases of the OS competition with StarryOS. Guidence can be found in Starry-Tutorial.

And you can run the testcases with the following commands:

# Clone the base repository
./scripts/get_deps.sh
# run the testcases of oscomp on x86_64
$ make oscomp_run ARCH=x86_64 # If it reports an error: -accel kvm: failed to initialize kvm: Permission denied, please add `ACCEL=n` argument.# run the testcases of oscomp on riscv64
$ make oscomp_run ARCH=riscv64
# run the testcases of oscomp on aarch64
$ make oscomp_run ARCH=aarch64
# run the testcases of oscomp on loongarch64
$ make oscomp_run ARCH=loongarch64

To run more testcases from oscomp, you can refer to the oscomp README.

How to add new testcases

To allow the kernel to run user-written test cases, temporary test cases can be created.

If you want to add source codes of the testcases, you can refer to the libc testcases and add your source codes in the c testcase folder, and append the testcase_list with your testcase name. Then you can run the testcases with the following commands:

make AX_TESTCASE=libc user_apps ARCH=$(YOUR_ARCH)
make AX_TESTCASE=libc BLK=y NET=y FEATURES=fp_simd ACCEL=n run ARCH=$(YOUR_ARCH)

If you want to add executable file directly, the specific steps are as follows:

  1. Create a temporary test case folder

    cd apps && mkdir custom &&cd custom
  2. Create a Makefile in the current directory and fill in the following content:

    all: build
    build:
    clean:
    rm -rf *.out

    The reason for creating an empty build Makefile is that when Starry packages test case images, it will first execute the test case's build program by default. However, since our temporary test case does not currently have a defined build program, make all does not need to perform any operations.

  3. Copy your executable file into the current directory.

  4. Create a testcase_list file in the current directory and add the relative path of the executable file that needs to be executed. Note that this path should be relative to apps/custom (i.e., the current directory). In our example, the content should be:

    hello
  5. Return to the project root directory and run the following command:

    sudo ./build_img.sh -fs ext4 -file apps/custom
    cp disk.img .arceos/disk.img
    make defconfig
    make AX_TESTCASE=custom ARCH=x86_64 BLK=y NET=y FEATURES=fp_simd,lwext4_rs LOG=off ACCEL=n run

    This completes the execution of the custom test case.

About

基于arceos unikernel的轻量组件化宏内核 starry-next, 位列支持linux app的宏内核排行榜:https://learningos.cn/oscomptest-grading , starry-next指导书:https://azure-stars.github.io/Starry-Tutorial-Book , 内核(unikernel-->monolithic kernel-->hypervisor)组件化设计学习视频:https://opencamp.cn/os2edu/camp/2025spring/stage/3 , starry-next所基于并调用的arceos crates列表 https://oscomp.github.io/arceos/

Topics

Resources

Stars

20 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages