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)
16.05.2023
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
16.05.2023
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
16.05.2023
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
16.05.2023
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
cmdline
aus Bootmanager Config)
16.05.2023
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
16.05.2023
5. Boot Process
10
Userspace Init #
init
ist zuständig für den weiteren Start des Systems- heute häufig
systemd
welches als init und auch Service Management dient
16.05.2023
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
16.05.2023
5. Boot Process
12
Abfolge #
- ROM Loader
- SPL (Secondary Program Loader)
- ... auch häufig
Preloader
genannt.
- ... auch häufig
- U-Boot
- Linux Kernel
- User Space
16.05.2023
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
16.05.2023
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
16.05.2023
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.txt
angegebene Device Tree Overlays für opt. Peripherie (*.dto
)
- Startet den Kernel mit der
cmdline
auscmdline.txt
- Kernel entpackt sich und mountet RFS und startet
/sbin/init
16.05.2023
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
ssh
Datei in auf Bootpartition - ... oder per
raspi-config
im Betrieb bei Raspberry Pi OS
- via leere
16.05.2023
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/init
wird gestartet
16.05.2023
5. Boot Process
19
Cyclone V: Layout des Flash #
- Aus Application Note
- Was ist der Nachteil von RAW Mode?
16.05.2023
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
16.05.2023
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
)
16.05.2023
5. Boot Process
22
u-boot-with-spl.sfp #
- Paket
u-boot
+SPL
- Bei andren Plattformen z.T. zwei separate Files
16.05.2023
5. Boot Process
24
Kernel Commandline #
console=ttyS0,115200 root=/dev/mmcblk0p1 rw rootwait init=/sbin/init
16.05.2023
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
menuconfig
konfigurierbar.
16.05.2023
5. Boot Process
26
Features #
- relativ kleines executable (~
1.5 MB
mit glibc) - in fast allen schlanken Linux Distributionen für Embedded Systems dabei.
- in PC Distros im initrd dabei
16.05.2023
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 (
shell
Script) 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
16.05.2023
5. Boot Process
28
Busybox Init #
/sbin/init
interpretiert/etc/inittab
sysinit
Einträge werden beim Start asugeführt zwecks- mounten der einträge in
/etc/fstab
und Hostname setzen - Systemdienste starten über Eintrag in
::sysinit:/etc/init.d/rcS
rcS
führt Startscripts in/etc/init.d/S*
mit Argumentstart
aus.- ... um Syslog Daemon, Netzwerk, SSH Daemon, ... zu starten.
- mounten der einträge in
shutdown
Einträge werden via::shutdown:/etc/init.d/rcK
ausgeführt (umgekehrte Reihenfolge)- mit Argument
stop
.
- mit Argument
respawn
startet das angegebene Programm erneut, sobald dieses endet- manuelles starten / stoppen mit aufruf in
/etc/init.d/S*
undstart
/stop
als Argument.
16.05.2023
5. Boot Process
29
Programme Periodisch ausführen #
- mittels Busybox
crond
- interpretiert
/var/spool/cron/crontabs/<uid>
crond
selbst z.B. in/etc/inittab
starten
16.05.2023
5. Boot Process
30
Init System auf Host #
systemctl
- Steuerprogram für Systemdsystemctl list-units
systemctl list-unit-files | grep enabled
- ls
/etc/systemd/system/*
sudo systemctl enable --now ...
journalctl
Journal betrachten.
16.05.2023
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.target
16.05.2023
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.
16.05.2023
5. Boot Process
34
glibc #
Library für Interaktion mit dem Linux Kernel
open, read, write, malloc, printf, getaddrinfo, dlopen
pthread_create, crypt, login, exit
16.05.2023