Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ks0n/goOSe
A minimal Kernel written in Rust
https://github.com/ks0n/goOSe
goose hacktoberfest kernel rust
Last synced: 1 day ago
JSON representation
A minimal Kernel written in Rust
- Host: GitHub
- URL: https://github.com/ks0n/goOSe
- Owner: ks0n
- Created: 2020-03-25T18:44:43.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-10-21T17:10:38.000Z (22 days ago)
- Last Synced: 2024-10-21T22:39:18.318Z (22 days ago)
- Topics: goose, hacktoberfest, kernel, rust
- Language: Rust
- Homepage:
- Size: 744 KB
- Stars: 43
- Watchers: 3
- Forks: 3
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# goose
A micro Kernel written in Rust. The goal is to have a small number of syscall
with a strong emphasis on IPC## Roadmap
- [ ] Virtual Memory Manager (in progress)
- [ ] Basic in-kernel filesystem
- [ ] Device-tree handling
- [x] In-kernel ELF loader
- [ ] Userland process (in progress)
- [ ] IPC implementation
- [ ] Drivers
- [ ] Driver API
- [ ] Kernel API## Project structure
The project is divided in 2 components, the kernel and the drivers. Most of the
drivers runs in userland, but some are required to run in kernel just to
provide the basic kernel functionalities (UART, interrupt hardware, ...)
:warning: **At the moment userland drivers are not implemented**## Try it out
Choose your desired board:
- Qemu RISC-V (virt) --> `riscv_qemuvirt`
- Qemu AArch64 (virt) --> `aarch64_qemuvirt`Then just run:
```console
$ cargo run
```For qemu target it will launch Qemu. For other targets the hope is to flash them instead
### Requirement
- A rust nightly toolchain
- Clang compiler (for tests)#### Nix
If you use Nix you can run `nix develop` to get a shell with everything needed
to test GoOSe### Build
#### Board project
Go to a board project (ex. riscv_qemuvirt) and then:
```console
$ cargo build
```#### Kernel, hal, ...
When building, you need to specify which target triplet to use with
`--target `. Here is the list of triplet to use depending on the
targeted architecture:
- RISC-V --> `riscv64gc-unknown-none-elf`
- AArch64 --> `aarch64-unknown-none`Go to the component folder and then:
```console
$ cargo build --target
```### Tests
GoOSe also comes with unit tests that run directly on hardware and output the
result over serial. When using Qemu, you can also have an exit code != 0 on
failure.```console
$ make -C kernel/fixtures
...
$ cargo tests --bin --target
...
```
:warning: **Tests might be slow to run as GoOSe is not really optimized. You can
append `--release` to the previous cargo command line to boost performance but
please be aware that some test might pass in debug and not in release. Feel
free to open an issue if you encounter such a case**