Neptune kernel
Find a file
2025-09-02 01:59:24 +02:00
kern Badrand pseudo random number generator, emphasis on pseudo 2025-09-02 01:59:24 +02:00
.clang-format Clang-format update 2025-08-16 14:47:10 +02:00
.clangd clangd: .clangd file that seems to make clangd behave 2025-06-26 04:04:34 +02:00
.gitignore Ignore toolchain 2025-09-01 22:22:40 +02:00
config.h NCPU to 4 2025-08-27 22:07:38 +02:00
Makefile Badrand pseudo random number generator, emphasis on pseudo 2025-09-02 01:59:24 +02:00
README.md Readme: include a quick start section, describe directory outline 2025-09-02 01:25:47 +02:00

Neptune Kernel

Inspired by xv6

For a quick reference on RISC-V assembly:

Some low-level string format routines borrowed from mini-printf

Directory outline

The planned directory outline is as follows:

root
├── kern           # General kernel sources
│   ├── libkern    # Kernel specific library routines
│   ├── memory     # Memory related code (kalloc, buddy and friends)
│   └── arch       # Architecture specific functionality
├── libc           # Userspace C library
└── user           # Userspace programs

Quick Start

make get_toolchain # Dont worry, is will land locally inside project directory
make -j$(nproc)
make qemu

The project can be cleaned with:

make clean     # Wipes .o, .d, .elf
make distclean # Wipes the above, but also removes toolchain

Toolchains:


A word on terminology: Although the official x86 term is exception, xv6 uses the term trap, largely because it was the term used by the PDP11/40 and therefore is the conventional Unix term.

Notes/Misc

Register Name Privilege Level Description
mstatus Machine Status Register Machine Holds global interrupt enable, previous privilege mode, etc.
mtvec Machine Trap-Vector Base Machine Holds the base address of the trap handler (exception/interrupt entry).
mepc Machine Exception PC Machine Stores the program counter at the time of the last trap.
mcause Machine Cause Register Machine Indicates the cause of the last trap (interrupt or exception).
satp Supervisor Address Translation and Protection Supervisor Controls page table base address and mode (e.g., Sv39, Sv48).
sstatus Supervisor Status Register Supervisor Like mstatus, but accessible from supervisor mode.
stvec Supervisor Trap-Vector Base Supervisor Like mtvec, but for supervisor mode traps.
sepc Supervisor Exception PC Supervisor Like mepc, but for supervisor mode.
scause Supervisor Cause Register Supervisor Like mcause, but for supervisor mode traps.
sscratch Supervisor Scratch Supervisor Can be used to store temporary state across traps in supervisor mode.
mscratch Machine Scratch Machine Like sscratch, but in machine mode.
mcycle Machine Cycle Counter Machine Counts the number of cycles executed.
mtime Machine Timer Register Machine (via memory-mapped) Used for timing and scheduling (not a CSR, but a memory-mapped register).
mip Machine Interrupt Pending Machine Indicates pending interrupts.
mie Machine Interrupt Enable Machine Controls which interrupts are enabled.

Libc Implementations

uClibc musl libc dietlibc

Comparison of C/POSIX standard library implementations for Linux (by musl author)