mirror of
https://github.com/iceHtwoO/novaOS.git
synced 2026-09-26 19:17:13 +00:00
docs: update README.md
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
KERNEL_NAME=kernel8.img
|
KERNEL_NAME=kernel8.img
|
||||||
BUILD_PATH=target/aarch64-unknown-none/release
|
BUILD_PATH=target/aarch64-unknown-none/release
|
||||||
BINARY_NAME=BINARY_NAME
|
BINARY_NAME=nova
|
||||||
TFTP_PATH=/srv/tftp
|
TFTP_PATH=/srv/tftp
|
||||||
REMOTE_USER=TFTP_HOST_USER
|
REMOTE_USER=TFTP_HOST_USER
|
||||||
REMOTE_HOST=TFTP_HOST_IP
|
REMOTE_HOST=TFTP_HOST_IP
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
MIT NON-AI License
|
||||||
|
|
||||||
|
Copyright (c) 2026, Alexander Neuhäuser
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of the software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions.
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
In addition, the following restrictions apply:
|
||||||
|
|
||||||
|
1. The Software and any modifications made to it may not be used for the purpose of training or improving machine learning algorithms,
|
||||||
|
including but not limited to artificial intelligence, natural language processing, or data mining. This condition applies to any derivatives,
|
||||||
|
modifications, or updates based on the Software code. Any usage of the Software in an AI-training dataset is considered a breach of this License.
|
||||||
|
|
||||||
|
2. The Software may not be included in any dataset used for training or improving machine learning algorithms,
|
||||||
|
including but not limited to artificial intelligence, natural language processing, or data mining.
|
||||||
|
|
||||||
|
3. Any person or organization found to be in violation of these restrictions will be subject to legal action and may be held liable
|
||||||
|
for any damages resulting from such use.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||||
|
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
@@ -1,22 +1,120 @@
|
|||||||
# NovaOS
|
# NovaOS
|
||||||
|
|
||||||
NovaOS is a expository project where I build a kernel from scratch for a Raspberry PI 3 B+.
|

|
||||||
|
|
||||||
## Features
|
NovaOS is a hobby operating system kernel written in Rust for the Raspberry Pi 3 B+.
|
||||||
|
It is built as a learning project for low-level systems programming, bare-metal boot flow, and kernel development.
|
||||||
|
|
||||||
- Delay and sleep ✓
|
## At A Glance
|
||||||
- UART ✓
|
|
||||||
- Switching ELs ✓
|
NovaOS currently includes:
|
||||||
- GPIOs ✓
|
|
||||||
- GPIO Interrupts ✓
|
- UART initialization and logging
|
||||||
- Communicate with peripherals via mailboxes ✓
|
- Delay and sleep primitives
|
||||||
- Frame Buffer ✓
|
- Exception level transitions across EL2, EL1, and EL0
|
||||||
- Heap Memory allocation ✓
|
- GPIO control and interrupt handling
|
||||||
- MMU ✓
|
- Peripheral mailbox communication
|
||||||
- SVC instructions ~
|
- Framebuffer drawing primitives
|
||||||
- Basic Console over UART ~
|
- Heap memory allocation
|
||||||
- Multi Applications ~
|
- MMU initialization and translation table setup
|
||||||
- Multi Core
|
|
||||||
- Dynamic clock speed
|
Work in progress:
|
||||||
- Kernel Independent Applications
|
|
||||||
- Multiprocessing
|
- SVC instruction handling
|
||||||
|
- Basic UART console improvements
|
||||||
|
- Multi-application management
|
||||||
|
|
||||||
|
Planned next:
|
||||||
|
|
||||||
|
- Multi-core support
|
||||||
|
- Dynamic clock speed management
|
||||||
|
- Kernel-independent applications
|
||||||
|
- Multiprocessing improvements
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
- `src/` - kernel source, architecture code, peripherals, interrupts, and runtime
|
||||||
|
- `workspace/` - supporting crates such as `heap` and `nova_error`
|
||||||
|
- `tools/` - build, simulation, SD image generation, and deployment scripts
|
||||||
|
- `firmware_files/` - Raspberry Pi firmware files copied to SD or TFTP
|
||||||
|
- `link.ld` - linker script for the kernel image
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
You will need:
|
||||||
|
|
||||||
|
- Rust nightly toolchain (`rust-toolchain.toml` pins `nightly`)
|
||||||
|
- Rust target `aarch64-unknown-none`
|
||||||
|
- `llvm-objcopy` for generating `kernel8.img`
|
||||||
|
- `qemu-system-aarch64` for emulation
|
||||||
|
- `mtools` (`mformat`, `mcopy`) for SD image generation
|
||||||
|
|
||||||
|
Install the Rust target if needed:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rustup target add aarch64-unknown-none
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Debug image:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tools
|
||||||
|
./build_debug.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Release image:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tools
|
||||||
|
./build_release.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Both scripts produce a `kernel8.img` under `target/aarch64-unknown-none/<profile>/`.
|
||||||
|
|
||||||
|
## Run In QEMU
|
||||||
|
|
||||||
|
1. Generate an SD image with firmware files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tools
|
||||||
|
./generate_sd_card.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Start the emulator:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tools
|
||||||
|
./start_simulator.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
For debug mode with the GDB stub enabled (`-S -s`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tools
|
||||||
|
./start_simulator_debug.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deploy To Hardware
|
||||||
|
|
||||||
|
Use the TFTP workflow to deploy to a Raspberry Pi:
|
||||||
|
|
||||||
|
1. Copy `.env.example` to `.env` and fill in your values:
|
||||||
|
- `REMOTE_USER`
|
||||||
|
- `REMOTE_HOST`
|
||||||
|
- `TFTP_PATH`
|
||||||
|
- `BUILD_PATH`
|
||||||
|
- `BINARY_NAME`
|
||||||
|
- `KERNEL_NAME`
|
||||||
|
2. Run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tools
|
||||||
|
./deply_to_hw.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- This is an educational kernel project and is actively evolving.
|
||||||
|
- Interfaces and boot flow may change as features are added.
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
Reference in New Issue
Block a user