Appearance
5. Boot Process
2
Installationsvarianten für Embedded Linux Systeme
- "Normale" Linux Distros (für Zielplatform-Architektur)
- Vorteile
- Breites Angebot Software (auch als Binary)
- Einfaches nachinstallieren von Paketen
- Nachteile
- RFS nicht readonly (Problematisch wegen Stromausfall)
- oft keine Rolling Releases (LTS oft wenige Jahre)
05.03.2024
5. Boot Process
4
Vorteile Buildframeworks
- Spezifische Auswahl und punktuell viele Alternativen von Software
- Hohe Sicherheit gegen Stromausfall, Systemabsturz (Readonly Partition)
- Eigene Projekte in Buildprozess integrierbar
- Yocto: optional Package Management
- selber verwaltetes Repository
05.03.2024
5. Boot Process
5
Nachteile Buildframeworks
- Keine automatische Security Updates
- Eigenverantwortung
- Yocto: Hohe komplexität und erforder Einarbeitung
- Package Management ist DIY
- z.B. System Updates mit A/B Partition und Recovery
05.03.2024
5. Boot Process
7
Bootvorgang beim PC
- Bootloader EFI / UEFI oder BIOS Flash
- Power on Selftest
- Init der erforderlichen Hardware
- Boot Device ermitteln
- Bootmanager laden
- Varianten
- UEFI lädt den Bootmanager immer aus einer separaten
EFI-Partition - legacy BIOS: lädt den Bootloader aus MBR
- UEFI-Firmware / BIOS beinhalten
ACPI(Advanced Config und Power Interface) während dem ganzen Betrieb
- UEFI lädt den Bootmanager immer aus einer separaten
05.03.2024
5. Boot Process
8
Bootmanager
GRUB2- lädt Kernel Image
- lädt Initial RAM Disk Image (
initrd/initramfs/boot/initrd.img) ins DRAM - startet das Kernel Image (mit Kernel
cmdlineaus Bootmanager Config)
05.03.2024
5. Boot Process
9
Linux-Kernel start
- Kernel dekomprimiert sich (selber) und initialisiert dannach CPU und Memory Management
- Startet alle statisch gelinkten Treiber (Memory, CPU Verwaltung, Console)
- Falls eine Initramdisk im RAM ist, wird diese temporär gemountet
- ... und alle zum RFS benötigten Disk+FS Treiber geladen
- RFS wird gemountet nach
/entsprechendcmdline - Start des ersten Usermode Prozesses aus dem RFS:
/sbin/init
05.03.2024
5. Boot Process
10
Userspace Init
initist zuständig für den weiteren Start des Systems- heute häufig
systemdwelches als init und auch Service Management dient
05.03.2024
5. Boot Process
11
Generell
- Kein UEFI oder BIOS
- ... statt dessen ein minimalister ROM Bootloader (auf SoC oder SPI Flash)
- RFS ist auf einem Flash-Datenträger
- SD, eMMC, ...
- ... oder alternativ auf einer "Initial Ramdisk", welche vom Flash ins RAM geladen wird.
- Bootmanager ist oft ausserhalb einer Partition an einem offset im Flashspeicher
- ... daher lässt man beim Flash oft die ersten paar Megabyte Partitionsfrei
05.03.2024
5. Boot Process
12
Abfolge
- ROM Loader
- SPL (Secondary Program Loader)
- ... auch häufig
Preloadergenannt.
- ... auch häufig
- U-Boot
- Linux Kernel
- User Space
05.03.2024
5. Boot Process
13
ROM Loader
- Je nach Hersteller des SoC
- Häufig Boot Flags via Pins
- gewisse auf Ground für Medium selection
- typischerweise von MMC / eMMC / Block Device
05.03.2024
5. Boot Process
14
GPU auf dem CM2711
- initialisiert das DRAM
- lädt den Bootloader ins externe DRAM
- beim Raspi 4B + CM4 ist der Bootloader als Binary auf dem SPI-Flash
- auf älteren Versionen auf der Bootpartition
bootcode.bin.
- lädt die GPU Firmware (
start*.elf/fixup*.dat) ab SD-Karte für init von- 2D/3D Grafik
- Kamera
- Codecs
05.03.2024
5. Boot Process
15
Bootloader
- lädt und interpretiert
config.txt(FAT Partition). - lädt Kernel image
kernel*.img- abhängig von
config.txt
- abhängig von
- lädt den Device Tree Blob
*.dtb- worin die HW Parameter definiert sind (Adressen, IRQ/DMA, Clock Config, ...)
- und in
config.txtangegebene Device Tree Overlays für opt. Peripherie (*.dto)
- Startet den Kernel mit der
cmdlineauscmdline.txt - Kernel entpackt sich und mountet RFS und startet
/sbin/init
05.03.2024
5. Boot Process
16
Weitere Config für Boot
https://www.raspberrypi.org/documentation/configuration/boot_folder.md
https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md
Rasp 4B / CM4
- Boot ab USB
- TFTP Boot für Kernel Image
rpi-eeprom-config
SSH Daemon
- via leere
sshDatei in auf Bootpartition - ... oder per
raspi-configim Betrieb bei Raspberry Pi OS
- via leere
05.03.2024
5. Boot Process
17
Boot ab TFTP + NFS
- Bootloader bezieht IP-Adresse sowie Bootserver Params per DHCP
- Bootloader lädt entsprechend per TFTP das Kernelimage und den Devicetreeblob sowie
cmdline.txt. - Kernel startet mit
cmdline - Kernel mountet RFS via NFS
root=/dev/nfs nfsroot=10.42.0.211:/nfs/client1,vers=4.1,proto=tcp rw ip=dhcp rootwait /sbin/initwird gestartet
05.03.2024
5. Boot Process
19
05.03.2024
5. Boot Process
20
u-boot Bootloader
- Typischer Bootloader für Embedded Systems
- Open Source
- angeleht and den Linux Kernel
- ... HAL, Treiber,
dtb
- Teil des Board Support Packages
- Entwickelt von Denx DE
05.03.2024
5. Boot Process
21
Secondary Program Loader (SPL)
- Teil von u-boot
- Initialisieren der HW
- Insbesondere laden des DRAM.
- Muss ins SRAM passen!
- Auch First Stage Bootloader genannt (etwas ungünstug wegen
Secondary)
05.03.2024
5. Boot Process
22
u-boot-with-spl.sfp
- Paket
u-boot+SPL - Bei andren Plattformen z.T. zwei separate Files
05.03.2024
5. Boot Process
24
Kernel Commandline
console=ttyS0,115200 root=/dev/mmcblk0p1 rw rootwait init=/sbin/init
05.03.2024
5. Boot Process
25
Schlanker Userspace + Init
- Busybox hat zahlreiche GNU User Space Commands
- ... diese sind in der Regel recht eingeschränkt
- ... und bloss symlinks zu
busybox. - Mit
menuconfigkonfigurierbar.
05.03.2024
5. Boot Process
26
Features
- relativ kleines executable (~
1.5 MBmit glibc) - in fast allen schlanken Linux Distributionen für Embedded Systems dabei.
- in PC Distros im initrd dabei
05.03.2024
5. Boot Process
27
Varianten von Init
- SysVinit - POSIX-konform (Unix System V Release 4, Linux BSD)
- Startet / Stoppt anhand Runlevel alle benötigten System-Dienste in einer geordneten Reihenfolge
- jeder Dienst hat ein Init-Script (
shellScript) in/etc/init.d/
- Busybox init (bestandteil von Busybox)
- nur Grundfunktionalität von SysVinit (keine Runlevels)
- Systemd - auf aktuellen Desktop Linux Systemen
- schneller systemstart dank parallelisierung
- Event driven
- viele Features
- ... immer noch umstritten (bloat)
- abwärtskompatibel
05.03.2024
5. Boot Process
28
Busybox Init
/sbin/initinterpretiert/etc/inittabsysinitEinträge werden beim Start asugeführt zwecks- mounten der einträge in
/etc/fstabund Hostname setzen - Systemdienste starten über Eintrag in
::sysinit:/etc/init.d/rcS rcSführt Startscripts in/etc/init.d/S*mit Argumentstartaus.- ... um Syslog Daemon, Netzwerk, SSH Daemon, ... zu starten.
- mounten der einträge in
shutdownEinträge werden via::shutdown:/etc/init.d/rcKausgeführt (umgekehrte Reihenfolge)- mit Argument
stop.
- mit Argument
respawnstartet das angegebene Programm erneut, sobald dieses endet- manuelles starten / stoppen mit aufruf in
/etc/init.d/S*undstart/stopals Argument.
05.03.2024
5. Boot Process
29
Programme Periodisch ausführen
- mittels Busybox
crond - interpretiert
/var/spool/cron/crontabs/<uid> crondselbst z.B. in/etc/inittabstarten
05.03.2024
5. Boot Process
30
Init System auf Host
systemctl- Steuerprogram für Systemdsystemctl list-unitssystemctl list-unit-files | grep enabled- ls
/etc/systemd/system/* sudo systemctl enable --now ...journalctlJournal betrachten.
05.03.2024
5. Boot Process
31
Eigenen Daemon schreiben
# /home/pi/mein-python-daemon/mein-python-daemon.service
[Unit]
Description=Test 1Wire Fenstersensor Service
After=multi-user.target
[Service]
Type=simple
ExecStart=/home/pi/alarm-1wire/start_1wire.sh
ExecReload=/bin/kill -HUP $MAINPID
#Restart=always
[Install]
WantedBy=multi-user.target05.03.2024
5. Boot Process
33
Buildroot Architektur
- Open Source Tools / Apps
- ... + eigene Apps
- Makefiles / Config
- = RFS + Kernel + Bootloader
- Verglichen mit Yocto viel einfacher zu konfigurieren und verstehen.
05.03.2024
5. Boot Process
34
glibc
Library für Interaktion mit dem Linux Kernel
open, read, write, malloc, printf, getaddrinfo, dlopen
pthread_create, crypt, login, exit05.03.2024

