Kapitel 9 von 15nullos.de

So sieht's innen aus

Vom Einschalten bis zum Prompt – und wer mit wem redet.

Der Start

UEFI nbBootloader nkKernel Prompt >

nb – der Bootloader

Eine kleine UEFI-Anwendung (boot/nb.c, ohne libc). Sie fragt den Bildschirm ab (GOP), liest \nullos\nk.elf von der Startpartition, legt die Teile des Kernels an ihre Adressen, holt die Speicherkarte, verabschiedet sich von UEFI und springt in den Kernel. Alles Wichtige bekommt der Kernel in einer Struktur mit: Speicher, Bildschirm, ACPI.

nk – der Kernel

Portables C in kernel/, alles Maschinenabhängige in arch/x86_64/. Er läuft in der oberen Hälfte des Adressraums, Programme bekommen die ganze untere. Was er kann:

Mehrere Kerne, Schreiben auf Platten: kommt noch Welche Hardware geht: Treiber.

Die Schichten

Werkzeuge · Shell s · Compiler cc libc – eigene C-Bibliothek Systemaufrufe – 62 Stück, der Vertrag Kernel nk – portables C arch/ – x86_64 (später ARM64, RISC-V …)

Systemaufrufe

Absichtlich klein: 62 Aufrufe (alle umgesetzt und getestet), davon 16 für Sockets, festgeschrieben in docs/syscalls.md und include/nullos/sys.h. Auf x86_64 per syscall, Nummer in rax, Argumente wie bei Linux. Fehler kommen als negative Zahl zurück. Nummern werden nie umgedeutet, nur ergänzt.

Programme sind statische ELF64-Dateien, ohne Bibliotheken zur Laufzeit. Später kommt noch ein schneller Ring für viele Aufträge auf einmal dazu.

Werkzeuge schreiben gegen eine kleine ABI

Damit hunderte Werkzeuge gleichzeitig entstehen konnten, obwohl der Kernel noch nicht fertig ist, schreiben alle nur gegen eine knappe Liste von C-Funktionen (docs/abi.md): Strings, Speicher, Dateien, Ordner, Zeit, Prozesse. Dieselbe Quelle läuft auf dem Mac und unverändert auf nullos.

libc – die eigene C-Bibliothek

Von Grund auf neu (musl und PDCLib nur als Lesestoff). Ein portabler Teil – Zeichenketten, malloc, stdio, printf, Zeit, Mathe – und darunter eine dünne Schicht von rund 70 Funktionen zum Kern. Davon gibt es zwei: eine für nullos und eine für macOS, die ganz ohne Apples libc auskommt (Systemaufrufe direkt).

cc – der eigene C-Compiler

hallo.c Präprozessor+ Parser x86_64ARM64RISC-V Assembler Linker ELF

Ein C11-Compiler in C11, komplett mit eigenem Assembler und eigenem ELF-Linker. Die großen Momente:

Codeerzeugung gibt's für x86_64, ARM64 und RISC-V 64 (die beiden letzten getestet in QEMU). RISC-V 32 für die kleinen ESP32 und Xtensa sollen folgen. kommt noch