← FAQ
FAQ

Opstartstick en bootloader

FAQ › EUZOS Desktop › Opstartstick en bootloader · English

Wat is het?

EUZOS start vanaf een FAT32-volume met een vaste indeling: een eigen UEFI-bootloader (\EFI\BOOT\BOOTX64.EFI op x86-64, BOOTAA64.EFI op ARM64) die de kernel (\EOS\KX64.ELF, of \EOS\KAA64.ELF op ARM64) plus alle bestanden in \EOS\FW\ (firmware en instellingen) in het geheugen laadt en ernaar springt. Dat volume is een USB-stick (gemaakt met make image) of, na een installatie, de EFI-systeempartitie (ESP) van de interne schijf. De kernel noemt het volume waarvan hij gestart is het opstartvolume; de consoleopdrachten zeggen voor beide nog stick.

Als EUZOS van een USB-stick start, komt eerst een keuzescherm: EUZOS proberen of Installeren op deze pc. Wie bij het aanzetten I ingedrukt houdt, slaat de keuze over en gaat meteen naar de installatie. Een proefkernel kan één keer gestart worden (try) en daarna vastgezet worden (commit).

Hoe doe ik…?

Hoe maak ik een EUZOS-stick?

Op de ontwikkel-Mac: make image (EUZOS Desktop, testbuild) schrijft het image met de bootloader, de kernel, de programma's, de firmware en een ondertekend releasemanifest (\EOS\MANIFEST.TXT + \EOS\MANIFEST.SIG). Zonder dat ondertekende manifest start de stick wel, maar kan hij niet installeren (dat zegt het keuzescherm). Zie docs/INSTALLING.md, "Where the files come from". Een draaiende EUZOS kan ook een nieuwe stick schrijven vanaf een release op het netwerk: install <url> <schijf> (zie Installatieprogramma).

Wat zie ik als de stick opstart?

  1. De bootloader schrijft regels die beginnen met [EUZOS-boot] (beeldmodus, ACPI, welke kernel hij laadde) en tekent gekleurde balken bovenaan.
  2. De kernel toont het opstartscherm: het EUZOS-logo met een rustige animatie en een statusregel. Esc toont de opstarttekst; nogmaals Esc (of een andere toets) brengt het opstartscherm terug. Een foutregel of een panic toont de tekst meteen.
  3. Gestart van een USB-stick (alleen x86-64): het keuzescherm "Welkom bij EUZOS" met EUZOS proberen ("Van de stick; er verandert niets op deze pc") en Installeren op deze pc ("Op de interne schijf; alles wat erop staat wordt gewist"). Na 10 seconden zonder keuze wordt het proberen; een tik, klik of pijltjestoets stopt het aftellen.
  4. Proberen gaat verder naar het gewone inlogscherm.

Hoe ga ik meteen naar de installatie (de I-toets)?

Houd I (of i) ingedrukt bij het aanzetten. De bootloader wacht er niet op: hij kijkt alleen naar wat er al in de toetsenbordbuffer van de firmware staat (hoogstens 64 toetsen), vlak voordat hij de firmware verlaat. Staat er een I in, dan geeft hij de vlag BOOT_INSTALL door aan de kernel, die het keuzescherm overslaat en de installatie opent bij de stap Schijf. Zonder I start de pc net zo snel als voorheen.

Waarom zit het keuzescherm in de kernel en niet in de bootloader?

Het moet met een vinger werken (de Panasonic CF-33 en FZ-G1 hebben alleen een aanraakscherm, en hun UEFI kent geen aanraking), het moet grafisch zijn in alle talen en beide thema's, en het heeft het schermtoetsenbord nodig. Dat bestaat allemaal alleen in de kernel. De bootloader geeft alleen de I-toets door.

Hoe zet ik het keuzescherm uit?

Zet choice=no (oud keuze=nee) in \EOS\FW\INSTALL.TXT op de stick (bijvoorbeeld een teststick die altijd moet doorstarten). Het scherm komt ook niet bij het starten van de interne schijf, op ARM64, of op een installatiestick (automatic=yes, oud automatisch=ja, zie Installatieprogramma).

Sinds 27-10-2026 schrijft EUZOS Engelse namen voor configuratiebestanden, sleutels, waarden en bevestigingswoorden (bijvoorbeeld WIPE-…, environment= in PROFILE.TXT); de oude Nederlandse namen (hier oud genoemd) worden nog gelezen en geaccepteerd (docs/ENGLISH.md).

Waarom start mijn pc de stick terwijl EUZOS op de SSD staat?

Na een installatie staat de interne schijf eerst in de UEFI-BootOrder, dus de firmware start de SSD, ook als er een stick in zit. Daarom zoekt de bootloader op de interne schijf naar een EUZOS-stick op USB (met \EFI\BOOT\BOOTX64.EFI, \EOS\KX64.ELF en \EOS\MANIFEST.TXT); vindt hij er een, dan start hij de bootloader van de stick (LoadImage/StartImage) en start de stick alsof de firmware hem gekozen had. Zet dit uit met stick=no (oude waarde stick=nee) in \EOS\FW\BOOT.TXT (oude naam OPSTART.TXT wordt nog gelezen) op de interne schijf.

Hoe zie ik van welk volume EUZOS gestart is?

stick toont de USB-opslagapparaten, daarna het opstartvolume (USB-stick of interne SATA/NVMe-schijf), zijn sector- en clustergrootte, hoe het gekozen is (de GUID van de opstartpartitie van de bootloader, of het label EUZOS bij een oude bootloader), en de groottes van EOS/KX64.ELF, EOS/KX64TRY.ELF en EOS/TRY.TXT.

Hoe test ik een nieuwe kernel zonder risico?

  1. Zet de nieuwe kernel op het opstartvolume als \EOS\KX64TRY.ELF (via SSH: ssh euzos 'put EOS/KX64TRY.ELF' < kernel; het Mac-script tools/trial.sh bouwt, uploadt en doet de rest).
  2. try: schrijft het markeerbestand \EOS\TRY.TXT en herstart.
  3. De bootloader ziet TRY.TXT, verwijdert het eerst, en start de proefkernel één keer. Hangt of crasht die kernel, dan neemt de volgende start weer de vastgezette kernel.
  4. Werkt de proefkernel: commit (uitgevoerd vanuit de proefkernel).

Een proefkernel die een panic krijgt, een fatale uitzondering, of een lock die 20 seconden vastzit, schrijft een verslag naar \EOS\HANG.TXT en herstart vanzelf in de vastgezette kernel; de volgende kernel zet HANG.TXT in zijn log en verwijdert het.

Wat controleert commit?

Dat KX64TRY.ELF een geldige kernel voor deze machine is (ELF64, little-endian, positieonafhankelijk, juiste architectuur, minstens 64 KiB), en, bij een build met een andere build-ID dan dev, dat de proefkernel de kernel is die nu draait. Daarna kopieert hij de huidige KX64.ELF naar KX64OLD.ELF, schrijft de proefkernel over KX64.ELF en leest die terug.

Wat als de vastgezette kernel niet laadt?

De bootloader probeert de kernels in volgorde: (de proefkernel, één keer, als TRY.TXT er was) → KX64.ELF → KX64OLD.ELF (de reservekopie van commit). De eerste die te lezen en te laden is, wint; een kapot bestand geeft een melding, geen crash. Laadt er geen: "no usable kernel on the stick".

Hoe zet ik een bestand op het opstartvolume of verwijder ik er een?

  • fetch <url> <pad>: haal op via HTTPS en schrijf alleen als <url>.sig een geldige handtekening is met de sleutel in \EOS\FW\SIGNPUB.TXT, en de versie niet ouder is dan die in \EOS\FW\FETCH.TXT (bescherming tegen terugrollen; de oude HAAL.TXT wordt nog gelezen, en per naam telt de hoogste versie van de twee).
  • Via SSH: put <pad> met de gegevens op stdin; dit controleert alleen de padregel hieronder, geen handtekening (zie Console).
  • stick wipe <pad> verwijdert een bestand.

Schrijven mag alleen binnen \EOS\ en nooit rechtstreeks naar de vastgezette kernels KX64.ELF/KAA64.ELF (alleen commit vervangt die); \EFI\ wordt nooit aangeraakt, zodat de stick altijd blijft starten.

Hoe onderzoek ik een pc die blijft hangen bij het opstarten?

Zet \EOS\FW\BOOTDIAG.TXT op de stick (een leeg bestand is goed). De bootloader tekent dan een kolom gekleurde blokjes per stap, kan andere manieren proberen om de firmware te verlaten (ebs=), wachten voor de sprong (pause=) en na N seconden herstarten als teken van leven (reboot=). Maak foto's van het scherm. Zie docs/BOOT-DIAGNOSTICS.md.

Hoe krijg ik altijd de console in plaats van het opstart- en inlogscherm?

Zet console in \EOS\FW\SCREEN.TXT. Dan is er geen opstartscherm en geen inlogscherm (zie Console).

Details

Stappen van de bootloader

Uit boot/src/main.rs:

  1. Eerst \EOS\FW\BOOTDIAG.TXT lezen (diagnosemodus).
  2. De UEFI-opstartvermelding maken voor een vers geïnstalleerde interne schijf als het markeerbestand \EOS\FW\UEFIBOOT.TXT er is (standaard als allereerste stap).
  3. De framebuffer opvragen (GOP); de beeldmodus alleen wijzigen als de huidige onbruikbaar is of er een echt grotere is (tot 1920x1200).
  4. De ACPI-RSDP en de device tree vinden.
  5. TRY.TXT: verwijderen, en als er een proefkernel is, die één keer starten.
  6. Elk bestand in \EOS\FW\ (geen submappen) in het geheugen laden; een ontbrekende map is geen fout. Grenzen: 64 bestanden, 32 MiB per bestand, 256 MiB samen (zie Bestanden uit \EOS\FW\).
  7. De SMBIOS-tabel kopiëren (het apparaatmodel, voor DriverEnricher).
  8. De kernel-ELF laden (proef → vastgezet → reserve).
  9. De I-toets uit de toetsenbordbuffer lezen.
  10. De geheugenkaart ophalen, ExitBootServices, en naar de kernel springen met een BootInfo (vlaggen, kernelnaam, GUID van de opstartpartitie, bestanden, framebuffer).

De opstartvermelding na een installatie

Het installatieprogramma schrijft \EOS\FW\UEFIBOOT.TXT met de partitie-GUID op de nieuwe ESP. Bij elke start zoekt de bootloader op interne schijven (SATA of NVMe in het apparaatpad, nooit USB) naar dat bestand. Klopt de GUID, dan hergebruikt of maakt hij een Boot####-vermelding voor \EFI\BOOT\BOOTX64.EFI op die partitie, zet hem eerst in BootOrder, leest BootOrder terug en verwijdert pas dan het markeerbestand. Mislukt er iets, dan blijft het markeerbestand staan en probeert de volgende start het opnieuw.

Opstartvlaggen voor de kernel

VlagWaardeBetekenis
BOOT_TRIAL1de proefkernel is gestart (TRY.TXT)
BOOT_FALLBACK2de reservekopie KX64OLD.ELF is gestart
BOOT_ENTRY_CREATED4de UEFI-opstartvermelding is gemaakt
BOOT_ENTRY_FAILED8het maken van de opstartvermelding is mislukt
BOOT_DIAG16BOOTDIAG.TXT was aanwezig
BOOT_INSTALL32de I-toets werd ingedrukt: begin bij de installatie
BOOT_ONE_CORE16384de S-toets werd ingedrukt: deze start één kern (docs/SMP.md, "Rescue")
BOOT_FILES_EXT64de volledige bestandslijst (tot 64) gaat mee naast de 16 vaste plaatsen
BOOT_FILES_TRUNCATED128de bootloader heeft bestanden uit \EOS\FW\ overgeslagen

Bestanden uit \EOS\FW\

De bootloader geeft hoogstens 64 bestanden door van elk hoogstens 32 MiB en samen 256 MiB (libs/bootinfo: MAX_FILES, MAX_FILE_SIZE, MAX_FILES_TOTAL); tot 27-10-2026 was dat 16 bestanden van 16 MiB, en wat erboven zat viel stil weg. Nu krijgt een overgeslagen bestand (te veel, te groot, totaal vol, onleesbaar, of geen 8.3-ASCII-naam) een regel [EUZOS-boot] SKIPPED firmware file <naam> ... op het scherm van de bootloader, en meldt de kernel WARNING : the bootloader skipped N file(s) from \EOS\FW\. Instellingenbestanden die in de lijst ontbreken (SSHD, AUTHKEYS, HOSTKEY, PCKEY, LANG, NETWORK, FIREWALL, WORKPLC) leest de kernel dan van het opstartvolume (settings_file::boot_file_or_volume).

Oud en nieuw door elkaar (de indeling van BootInfo groeit alleen aan het eind; de versie blijft 6 en de uitbreiding wordt aangegeven met de vlag BOOT_FILES_EXT):

BootloaderKernelResultaat
nieuwnieuwtot 64 bestanden; overgeslagen bestanden gemeld
oud (16 bestanden)nieuwde 16 die de oude bootloader doorgeeft; is zijn lijst vol, dan waarschuwt de kernel en leest hij ontbrekende instellingenbestanden van het opstartvolume
nieuwoudde oude kernel ziet de eerste 16 bestanden (de rest blijft ongebruikt in het geheugen), zoals voorheen
oudoudongewijzigd

De juiste stick kiezen

Met meerdere sticks erin opent de kernel de partitie waarvan de bootloader de GPT-GUID doorgaf. Een interne schijf wordt alleen via die GUID als opstartvolume gebruikt; de vergrendeling van de driver staat dan alleen schrijven binnen die partitie toe, nooit de GPT of de rest van de schijf.

Naslag

Consoleopdrachten

OpdrachtArgumentenWat het doet
stick–USB-opslagapparaten, opstartvolume, hoe het gekozen is, groottes van KX64.ELF, KX64TRY.ELF, TRY.TXT
stick hash<pad>grootte en SHA-256 van een bestand op het opstartvolume
stick wipe<pad>een bestand verwijderen (alleen binnen \EOS\, nooit de vastgezette kernels); verborgen aliassen stick delete en oud stick wis
try–\EOS\TRY.TXT schrijven (vereist \EOS\KX64TRY.ELF) en één keer herstarten in de proefkernel
commit–de draaiende proefkernel wordt de vastgezette kernel; de oude blijft als KX64OLD.ELF
fetch<url> <pad>ophalen via HTTPS, <url>.sig (Ed25519) en de versie controleren, dan op het opstartvolume schrijven
fetch manifest<url> [verify]het ondertekende MANIFEST.TXT van een release tonen; verify haalt ook elk bestand op en controleert het, zonder te schrijven (verborgen aliassen check, uit een oudere help-tekst, en oud controleer)
reboot–herstarten (nood: Ctrl+Alt+Esc 3 s vasthouden); oude alias herstart
put (alleen SSH)<pad> (gegevens op stdin)een bestand op het opstartvolume schrijven (dezelfde padregel: alleen \EOS\, niet de vastgezette kernels; geen controle van een handtekening)

Oude alias: haal = fetch.

Functies en modules

Functie / moduleRol
boot/src/main.rs::efi_mainingang van de bootloader: de stappen hierboven
boot/src/main.rs::try_onceTRY.TXT verwijderen en over de proefstart beslissen
boot/src/main.rs::install_keyI/i zoeken in de toetsenbordbuffer van de firmware
boot/src/main.rs::load_firmware_diralle bestanden van \EOS\FW\ laden
boot/src/boot_entry.rs::createUEFI-vermelding Boot#### en BootOrder voor een geïnstalleerde interne schijf
boot/src/priority.rsvanaf de interne schijf: een EUZOS-stick op USB voorrang geven
euzos_bootinfo::bootdiag::parseBOOTDIAG.TXT inlezen
kernel::boot_volume::with_volumehet opstartvolume openen (via de partitie-GUID)
kernel::boot_volume::writablede schrijfregel (alleen \EOS\, niet de vastgezette kernels)
kernel::boot_volume::prepare_trytry
kernel::boot_volume::commitcommit
kernel::boot_volume::commandstick
kernel::boot_screenhet opstartscherm (Esc wisselt naar de opstarttekst)
kernel::setup_choice::must_choosekomt het keuzescherm?
kernel::setup_choice::immediatelywerd I ingedrukt (BOOT_INSTALL)?
kernel::setup_choice::showhet keuzescherm tonen (of meteen de stap Schijf)
euzos_ui::installationschermlogica van het keuzescherm en de installatie (COUNTDOWN_S = 10)
kernel::fetch::commandfetch
kernel::watchdogwaakhond voor vastzittende locks; een proefkernel schrijft HANG.TXT en herstart

Configuratiebestanden

Allemaal in \EOS\FW\ op het opstartvolume, tenzij anders vermeld.

BestandSleutelWaardenBetekenis
INSTALL.TXTchoice (oud keuze)no (oud nee)geen keuzescherm op deze stick
INSTALL.TXTautomatic (oud automatisch)yes (oud ja)installatiestick: het grafische installatieprogramma start vanzelf (geen keuzescherm)
INSTALL.TXTmanifesthttps://…/MANIFEST.TXTadres van de release voor het installatieprogramma
BOOT.TXT (interne schijf; oude naam OPSTART.TXT wordt nog gelezen)stickno (oud nee)een EUZOS-stick geen voorrang geven boven de interne schijf
BOOTDIAG.TXTebs0–7hoe de firmware te verlaten (0 standaard, 1 eenvoudig, 2 Linux-stijl, 3 minimaal, 4 minimaal + CLI, 5 geen SetMode, 6 LoaderData, 7 geen opstartvermelding)
BOOTDIAG.TXTrebootseconden (max. 600)na N s herstarten als teken van leven
BOOTDIAG.TXTpause (oud pauze)ms (max. 10000)wachten voor de sprong naar de kernel
SCREEN.TXTconsole–geen opstartscherm en geen inlogscherm
SIGNPUB.TXT–publieke sleutelEd25519-sleutel voor fetch, manifesten en app-pakketten
FETCH.TXT (oude naam HAAL.TXT wordt nog gelezen)–regels NAAM VERSIEhoogste geaccepteerde handtekeningversie per bestand (tegen terugrollen)
UEFIBOOT.TXT–partitie-GUIDmarkeerbestand: de UEFI-opstartvermelding maken (geschreven door het installatieprogramma)
\EOS\TRY.TXT–1markeerbestand: de proefkernel één keer starten (geschreven door try)
\EOS\HANG.TXT–tekstverslag van een proefkernel die vastliep

Sinds 27-10-2026 schrijft EUZOS Engelse namen voor configuratiebestanden, sleutels, waarden en bevestigingswoorden (bijvoorbeeld WIPE-…, environment= in PROFILE.TXT); de oude Nederlandse namen (hier oud genoemd) worden nog gelezen en geaccepteerd (docs/ENGLISH.md).

Bestanden op het opstartvolume

PadWat
\EFI\BOOT\BOOTX64.EFI / BOOTAA64.EFIde bootloader
\EOS\KX64.ELF / KAA64.ELFvastgezette kernel
\EOS\KX64TRY.ELF / KAA64TRY.ELFproefkernel
\EOS\KX64OLD.ELF / KAA64OLD.ELFreservekopie gemaakt door commit
\EOS\MANIFEST.TXT, \EOS\MANIFEST.SIGondertekend releasemanifest (pad, grootte, SHA-256 per bestand)
\EOS\BIN\<NAAM>.ELFprogramma's (run <naam>)
\EOS\FW\firmware en instellingen, geladen door de bootloader

Protocolberichten en formaten

  • Handtekeningbestand <naam>.sig (72 bytes): versie van 8 bytes (Unix-tijd van ondertekenen) + Ed25519-handtekening over de bestandsnaam, de versie en de inhoud (euzos_crypto::ed25519::download_message).
  • Opnieuw proberen bij ophalen: na een netwerkfout tot drie pogingen per bestand (2 s, daarna 5 s pauze), elk met een eigen TLS-verbinding; nooit na een weigering (handtekening, SHA-256, grootte, versie, 404).
  • Log van de bootloader: regels die beginnen met [EUZOS-boot] op het scherm en de seriële poort.

Zie ook