asterinas/docs/src/osdk/guide/create-project.md

128 lines
2.9 KiB
Markdown
Raw Normal View History

# Creating an OS Project
2024-02-27 09:30:26 +00:00
2024-03-01 03:23:47 +00:00
OSDK can be used to create a new kernel project
or a new library project.
A kernel project defines the entry point of the kernel
and can be run with QEMU.
A library project can provide certain OS functionalities
and be imported by other OSes.
2024-02-27 09:30:26 +00:00
## Creating a new kernel project
2024-03-01 03:23:47 +00:00
Creating a new kernel project is simple.
You only need to execute the following command:
2024-02-27 09:30:26 +00:00
```bash
2024-03-22 05:50:45 +00:00
cargo osdk new --type kernel myos
2024-02-27 09:30:26 +00:00
```
## Creating a new library project
Creating a new library project requires just one command:
```bash
cargo osdk new mylib
```
## Generated files
2024-03-01 03:23:47 +00:00
Next, we will introduce
the contents of the generated project in detail.
If you don't wish to delve into the details,
you can skip the following sections.
2024-02-27 09:30:26 +00:00
### Overview
2024-03-01 03:23:47 +00:00
The generated directory
for both the kernel project and library project
contains the following contents:
2024-02-27 09:30:26 +00:00
```text
myos/
2024-03-11 07:21:23 +00:00
├── Cargo.toml
├── OSDK.toml
├── rust-toolchain.toml
└── src/
└── lib.rs
2024-02-27 09:30:26 +00:00
```
### `src/lib.rs`
#### Kernel project
2024-03-01 03:23:47 +00:00
The `src/lib.rs` file contains the code for a simple kernel.
The function marked with the `#[aster_main]` macro
is considered the kernel entry point by OSDK.
The kernel
will print `Hello world from the guest kernel!`to the console
and then abort.
2024-02-27 09:30:26 +00:00
2024-03-01 03:23:47 +00:00
There is also a code snippet that demonstrates
how to write kernel mode unit tests.
It follows a similar code pattern as user mode unit tests.
The test module is marked with the `#[cfg(ktest)]` macro,
and each test case is marked with `#[ktest]`.
2024-02-27 09:30:26 +00:00
```rust
2024-03-01 03:23:47 +00:00
{{#include ../../../../osdk/src/commands/new/kernel.template}}
2024-02-27 09:30:26 +00:00
```
#### Library project
2024-03-01 03:23:47 +00:00
The `src/lib.rs` of library project only contains
a simple kernel mode unit test.
2024-02-27 09:30:26 +00:00
```rust
2024-03-01 03:23:47 +00:00
{{#include ../../../../osdk/src/commands/new/lib.template}}
2024-02-27 09:30:26 +00:00
```
### `Cargo.toml`
2024-03-01 03:23:47 +00:00
The `Cargo.toml` file is the Rust project manifest.
In addition to the contents of a normal Rust project,
OSDK will add the dependencies of the Asterinas framework to the file.
The dependency version may change over time.
2024-02-27 09:30:26 +00:00
```toml
[dependencies.aster_frame]
git = "https://github.com/asterinas/asterinas"
branch = "main"
[dependencies.ktest]
git = "https://github.com/asterinas/asterinas"
branch = "main"
```
### `OSDK.toml`
2024-03-01 03:23:47 +00:00
The `OSDK.toml` file is a manifest
that defines the exact behavior of OSDK.
By default, it contains the following contents.
It includes settings on how to start QEMU to run a kernel.
The meaning of each key can be found
in the [manifest documentation](../reference/manifest.md).
Please avoid changing the default settings
unless you know what you are doing.
2024-02-27 09:30:26 +00:00
```toml
[boot]
ovmf = "/usr/share/OVMF"
[qemu]
machine = "q35"
args = [
"--no-reboot",
"-m 2G",
"-nographic",
"-serial chardev:mux",
"-monitor chardev:mux",
"-chardev stdio,id=mux,mux=on,signal=off",
"-display none",
"-device isa-debug-exit,iobase=0xf4,iosize=0x04",
]
```
### `rust-toolchain.toml`
2024-03-01 03:23:47 +00:00
The Rust toolchain for the kernel.
It aligns with the toolchain of the Asterinas framework.