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.
NovaOS currently includes:
- UART initialization and logging
- Delay and sleep primitives
- Exception level transitions across EL2, EL1, and EL0
- GPIO control and interrupt handling
- Peripheral mailbox communication
- Framebuffer drawing primitives
- Heap memory allocation
- MMU initialization and translation table setup
Work in progress:
- SVC instruction handling
- Basic UART console improvements
- Multi-application management
Planned next:
- Multi-core support
- Dynamic clock speed management
- Kernel-independent applications
- Multiprocessing improvements
src/- kernel source, architecture code, peripherals, interrupts, and runtimeworkspace/- supporting crates such asheapandnova_errortools/- build, simulation, SD image generation, and deployment scriptsfirmware_files/- Raspberry Pi firmware files copied to SD or TFTPlink.ld- linker script for the kernel image
You will need:
- Rust nightly toolchain (
rust-toolchain.tomlpinsnightly) - Rust target
aarch64-unknown-none llvm-objcopyfor generatingkernel8.imgqemu-system-aarch64for emulationmtools(mformat,mcopy) for SD image generation
Install the Rust target if needed:
rustup target add aarch64-unknown-noneDebug image:
cd tools
./build_debug.shRelease image:
cd tools
./build_release.shBoth scripts produce a kernel8.img under target/aarch64-unknown-none/<profile>/.
- Generate an SD image with firmware files:
cd tools
./generate_sd_card.sh- Start the emulator:
cd tools
./start_simulator.shFor debug mode with the GDB stub enabled (-S -s):
cd tools
./start_simulator_debug.shUse the TFTP workflow to deploy to a Raspberry Pi:
- Copy
.env.exampleto.envand fill in your values:REMOTE_USERREMOTE_HOSTTFTP_PATHBUILD_PATHBINARY_NAMEKERNEL_NAME
- Run:
cd tools
./deply_to_hw.sh- This is an educational kernel project and is actively evolving.
- Interfaces and boot flow may change as features are added.
