LFD450 Embedded Linux Entwicklung
Classroom Schulung | Deutsch | Anspruch
Schulungsdauer: 4 Tage
Ziele
In diesem Kurs lernen Sie die Techniken, die für Entwicklung von embedded Linux Geräten notwendig sind.
Dabei lernen Sie u.a.:
- Linux Kernel Architektur, mit Schwerpunkt auf den essentiellen Punkten für die Adaption des Kernels auf eine embedded Plattform.
- Techniken für die Bestimmtung der korrekten Größe des Systems für die Projektanforderungen
- Eine Vielzahl der zur Verfügung stehenden Ressourcen für die Erstellung einer Cross-Entwicklungsumgebung für Embedded-Systeme
- Die verfügbaren Optionen für die Bibliotheken und Application User-Spaces hinsichtlich der Anforderungen der Embedded-Systme
Die vermittelten Schulungsinhalte gelten für alle großen Linux-Distributionen.
Zielgruppe
- Erfahrene Entwickler
- Programmierer und Ingenieure
Voraussetzungen
- Vertrautheit mit Linux-Dienstprogrammen
- Kenntnisse in der C-Programmierung
- Erfahrung in der Linux- oder Unix-Entwicklung
Agenda
Einführung
- Die Linux Foundation
- Urheberrecht und keine vertraulichen Informationen
- Schulungen der Linux Foundation
- Zertifizierungsprogramme und digitale Auszeichnungen
- Linux-Distributionen
- Plattformen
- Vorbereitung Ihres Systems
- Änderungen in Linux
- Dokumentation und Links
Vorbereitungen
- Linux-Distributionen
- Installation der virtuellen Maschine
- Verfahren
Wie man in OSS-Projekten arbeitet
- Überblick, wie man richtig beiträgt
- Wissen, woher der Code kommt: DCO und CLA
- Nah am Mainline bleiben für Sicherheit und Qualität
- Herausfinden, welches Problem Sie lösen möchten
- Betreuer und ihre Arbeitsabläufe und Methoden identifizieren
- Frühzeitig Feedback einholen und offen arbeiten
- Schrittweise Beiträge leisten, keine großen Code-Dumps
- Geduldig sein, langfristige Beziehungen entwickeln, hilfreich sein
Eingebettete und Echtzeit-Systemkonzepte
- Grundlegende Konzepte
- Schutzmotivationen
- off the Shelf (OTS)
- Echtzeit-Betriebssysteme
- Echtzeit-Linux
- Unterstützung für benutzerdefinierte Hardware
- Ressourcen
Cross-Entwicklungsumgebungen: Ziele und Bedürfnisse
- Einführung
- Warum ist es schwierig?
- Projektzielüberlegungen
Kbuild-System
- Einführung
- Kbuild-Makefiles
- Kconfig-Grundlagen
- Kconfig durchsuchen
Cross-Entwicklungstoolchain
- Der Compiler-Triplet
- Eingebauter Cross-Compiler für Linux-Distributionen
- Linaro
- CodeSourcery
- crosstool-ng
- Buildroot
- OpenEmbedded
- Yocto-Projekt
- Clang
QEMU
- Was ist QEMU?
- Warum QEMU verwenden?
- Emulierte Architekturen
- Image-Formate
Booten eines Zielentwicklungsboards von uSD
- Warum verwenden wir uSD-Karten?
- Software auf eine uSD-Karte bekommen
- Von Flash booten
- Warum die Verwendung von uSD-Karten eine schlechte Idee ist?
Booten eines Zielentwicklungsboards über Ethernet
- Verwendung von virtueller Hardware
- Ein einfacherer Weg zu entwickeln
- Der Boot-Prozess mit TFTP und NFSroot
Bootloader und U-Boot
- Bootcode-Stufen
- Einige GPL-BIOSes
- Einige GPL-Bootloader
- Das U-Boot
- U-Boot-Kommandozeile
- U-Boot-Umgebung
Kernel-Konfiguration, -Kompilierung, -Booten
- Konfiguration des Kernels für das Entwicklungsboard
Gerätetreiber
- Gerätetypen
- Geräte Nodes
- Zeichentreiber
Device Trees
- Was sind Device Trees?
- Was Device Trees tun und was sie nicht tun
- Device Tree-Syntax
- Device Tree-Durchgang
- Device Tree-Bindungen
- Device Tree-Unterstützung in Bootloadern
- Verwendung von Device Tree-Daten in Treibern
- Koexistenz und Konvertierung alter Treiber
Ziel-Dateisystem-Packaging
- Ziele des eingebetteten Dateisystems
- Verzeichnisse: ein Überblick
- Typen von eingebetteten Dateisystemen
Root-Dateisystem-Auswahl
- SysV init vs. BusyBox init
- udev vs. BusyBox mdev
- Systemd
- Auswahl der C-Library
Konfiguration von uClibc
- Konfiguration von uClibc für NFS
Eine weitere alternative C-Bibliothek: musl
- Was ist musl?
- Konfiguration von BuildRoot für musl
BusyBox-Dienstprogrammsuite erstellen
- Grundlegende Funktionsweise
- Integration mit Buildroot
Kernel-Überwachung und -Debugging
- Tracing und Profiling
- Ftrace, Trace-Cmd, Kernelshark
- Perf
- Verwendung von perf
- sysctl
- SysRq-Taste
- oops-Meldungen
- Kernel-Debugger
- debugfs
Richtige Größe
- Oft benötigte eingebettete Komponenten
- Bestandsaufnahme der Kernelgrößen
Speichertechnologie-Geräte (Flash-Speicher-Dateisysteme)
- Was sind MTD-Geräte?
- NAND vs. NOR vs. eMMC
- Treiber- und Benutzer-Module
- Flash-Dateisysteme
Komprimierte Dateisysteme
- SquashFS
- Einsatz in einer MTD-Partition
- Labore
System-Upgrades
- Wann müssen wir aktualisieren?
- Update-Strategien
- Vorgefertigte Upgrade-Systeme
Echtzeit-Erweiterungen
- Vorhersagbarkeit und Präemption und Sperren
- PREEMPT RT-Projekt
- Echtzeit-Checkliste
Ziele
In diesem Kurs lernen Sie die Techniken, die für Entwicklung von embedded Linux Geräten notwendig sind.
Dabei lernen Sie u.a.:
- Linux Kernel Architektur, mit Schwerpunkt auf den essentiellen Punkten für die Adaption des Kernels auf eine embedded Plattform.
- Techniken für die Bestimmtung der korrekten Größe des Systems für die Projektanforderungen
- Eine Vielzahl der zur Verfügung stehenden Ressourcen für die Erstellung einer Cross-Entwicklungsumgebung für Embedded-Systeme
- Die verfügbaren Optionen für die Bibliotheken und Application User-Spaces hinsichtlich der Anforderungen der Embedded-Systme
Die vermittelten Schulungsinhalte gelten für alle großen Linux-Distributionen.
Zielgruppe
- Erfahrene Entwickler
- Programmierer und Ingenieure
Voraussetzungen
- Vertrautheit mit Linux-Dienstprogrammen
- Kenntnisse in der C-Programmierung
- Erfahrung in der Linux- oder Unix-Entwicklung
Agenda
Einführung
- Die Linux Foundation
- Urheberrecht und keine vertraulichen Informationen
- Schulungen der Linux Foundation
- Zertifizierungsprogramme und digitale Auszeichnungen
- Linux-Distributionen
- Plattformen
- Vorbereitung Ihres Systems
- Änderungen in Linux
- Dokumentation und Links
Vorbereitungen
- Linux-Distributionen
- Installation der virtuellen Maschine
- Verfahren
Wie man in OSS-Projekten arbeitet
- Überblick, wie man richtig beiträgt
- Wissen, woher der Code kommt: DCO und CLA
- Nah am Mainline bleiben für Sicherheit und Qualität
- Herausfinden, welches Problem Sie lösen möchten
- Betreuer und ihre Arbeitsabläufe und Methoden identifizieren
- Frühzeitig Feedback einholen und offen arbeiten
- Schrittweise Beiträge leisten, keine großen Code-Dumps
- Geduldig sein, langfristige Beziehungen entwickeln, hilfreich sein
Eingebettete und Echtzeit-Systemkonzepte
- Grundlegende Konzepte
- Schutzmotivationen
- off the Shelf (OTS)
- Echtzeit-Betriebssysteme
- Echtzeit-Linux
- Unterstützung für benutzerdefinierte Hardware
- Ressourcen
Cross-Entwicklungsumgebungen: Ziele und Bedürfnisse
- Einführung
- Warum ist es schwierig?
- Projektzielüberlegungen
Kbuild-System
- Einführung
- Kbuild-Makefiles
- Kconfig-Grundlagen
- Kconfig durchsuchen
Cross-Entwicklungstoolchain
- Der Compiler-Triplet
- Eingebauter Cross-Compiler für Linux-Distributionen
- Linaro
- CodeSourcery
- crosstool-ng
- Buildroot
- OpenEmbedded
- Yocto-Projekt
- Clang
QEMU
- Was ist QEMU?
- Warum QEMU verwenden?
- Emulierte Architekturen
- Image-Formate
Booten eines Zielentwicklungsboards von uSD
- Warum verwenden wir uSD-Karten?
- Software auf eine uSD-Karte bekommen
- Von Flash booten
- Warum die Verwendung von uSD-Karten eine schlechte Idee ist?
Booten eines Zielentwicklungsboards über Ethernet
- Verwendung von virtueller Hardware
- Ein einfacherer Weg zu entwickeln
- Der Boot-Prozess mit TFTP und NFSroot
Bootloader und U-Boot
- Bootcode-Stufen
- Einige GPL-BIOSes
- Einige GPL-Bootloader
- Das U-Boot
- U-Boot-Kommandozeile
- U-Boot-Umgebung
Kernel-Konfiguration, -Kompilierung, -Booten
- Konfiguration des Kernels für das Entwicklungsboard
Gerätetreiber
- Gerätetypen
- Geräte Nodes
- Zeichentreiber
Device Trees
- Was sind Device Trees?
- Was Device Trees tun und was sie nicht tun
- Device Tree-Syntax
- Device Tree-Durchgang
- Device Tree-Bindungen
- Device Tree-Unterstützung in Bootloadern
- Verwendung von Device Tree-Daten in Treibern
- Koexistenz und Konvertierung alter Treiber
Ziel-Dateisystem-Packaging
- Ziele des eingebetteten Dateisystems
- Verzeichnisse: ein Überblick
- Typen von eingebetteten Dateisystemen
Root-Dateisystem-Auswahl
- SysV init vs. BusyBox init
- udev vs. BusyBox mdev
- Systemd
- Auswahl der C-Library
Konfiguration von uClibc
- Konfiguration von uClibc für NFS
Eine weitere alternative C-Bibliothek: musl
- Was ist musl?
- Konfiguration von BuildRoot für musl
BusyBox-Dienstprogrammsuite erstellen
- Grundlegende Funktionsweise
- Integration mit Buildroot
Kernel-Überwachung und -Debugging
- Tracing und Profiling
- Ftrace, Trace-Cmd, Kernelshark
- Perf
- Verwendung von perf
- sysctl
- SysRq-Taste
- oops-Meldungen
- Kernel-Debugger
- debugfs
Richtige Größe
- Oft benötigte eingebettete Komponenten
- Bestandsaufnahme der Kernelgrößen
Speichertechnologie-Geräte (Flash-Speicher-Dateisysteme)
- Was sind MTD-Geräte?
- NAND vs. NOR vs. eMMC
- Treiber- und Benutzer-Module
- Flash-Dateisysteme
Komprimierte Dateisysteme
- SquashFS
- Einsatz in einer MTD-Partition
- Labore
System-Upgrades
- Wann müssen wir aktualisieren?
- Update-Strategien
- Vorgefertigte Upgrade-Systeme
Echtzeit-Erweiterungen
- Vorhersagbarkeit und Präemption und Sperren
- PREEMPT RT-Projekt
- Echtzeit-Checkliste