Eingebettetes Linux und Entwicklungsmethoden Informatik-Seminar Prof. Dr. Ulrich Hoffmann Prof. Dr. Uwe Schmidt Wintersemester Malte S. Stretz
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux ● Was ist Embedded Linux?
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux ● Was ist Embedded Linux? Ein Betriebssystem, angepasst für den Betrieb als Embedded System, basierend auf Linux. ➔ Was ist ein Embedded System? ➔ Was ist Linux? ➔ Was ist überhaupt ein Betriebssystem? ➔ Vor- und Nachteile von Linux ➔ Embedded Development mit Linux
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Systems (Theorie) ● Was ist ein Embedded System? ● Kombination aus einer Embedded (Hardware) Plattform und hierfür angepasster Software ● Nicht exakt/einheitlich definiert ● Fließender Übergang zu Appliances und Thin Clients ● Mögliche Merkmale ● Niedrige Hardwareanforderungen ● Hardware-nahe bzw. -spezifische Software ● Betriebssystem optional ● Echtzeitfähigkeit optional ● Spezifischer Einsatzzweck (Router, Storage, Kommunikation, Steuerung, etc.) ● Blackbox-Verhalten dem Anwender gegenüber ● Vom Anwender nur bedingt erweiterbar
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz ● Faustregel: Man arbeitet mit einem Embedded System, wenn... ●... die Software speziell an eine bestimmte Hardware-Architektur und - Umgebung angepasst wird. ●... diese auf einen bestimmten, begrenzten Einsatzzweck zugeschnitten ist. Embedded Systems (Theorie)
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Systems (Beispiele)
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Systems (Praxis) ● Prozessor ● Typen: µP, µC, DSP, FPGA, ASIC ● Architektur ● Desktop/Server: x86, PPC, SPARC, MIPS ● Embedded: 65816, 65C02, 68HC08, 68HC11, 68k, 8051, ARM, AVR, AVR32, Blackfin, C167, Coldfire, COP8, eZ8, eZ80, FR-V, H8, HT48, M16C, M32C, MIPS, MSP430, PIC, PPC, R8C, SHARC, ST6, SuperH, TLCS-47, TLCS-870, TLCS-900, Tricore, V850, x86, XE8000, Z80,... ● Reduzierte Rechenleistung ● Byteorder (Little oder Big Endian) ● FPU optional ● MMU optional
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Systems (Praxis) ● Arbeitsspeicher ● Typen: (S)DRAM, (F)SRAM ● Limitierte Größe ● Mehrere Speicher möglich ● Oder gar keine ● Nichtflüchtiger Speicher ● Typen: Flash, EEPROM, Festplatten ● Limitierte Größe ● Geringe Geschwindigkeit ● Falls überhaupt vorhanden
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Systems (Praxis) ● Schnittstellen ● EIA/RS-232, EIA/RS-485,... ● IEEE (Ethernet), IEEE (WLAN),... ● I²C/TWI, SPI,... ● CAN, IEC 61158,... ● Zusätzliche Hardware ● Crypto-, Compression-Chips
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Linux (Begriffsklärung) ● Mehrdeutig bzw. ungenau ● Ein Kernel ● Ein komplettes Betriebssystem bzw. eine Distribution, basierend auf dem Linux- Kernel ● Meist kombiniert mit Software aus dem GNU Projekt ● Das GNU system existiert 1983 ● Linux erst seit 1991 ● Im Embedded Bereich jedoch oft mit Alternativen ● „Busybox/Linux“? „GNU/Linux“
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Linux (Geschichte) ● Inspiriert von Unix/Minix ● Kurze Versionsgeschichte ● Aug.1991:0.01 ● Mär.1994:1.0 ● Jun.1996:2.0.0 ● Jan.1999:2.2.0 ● Aug.1999: ● Jan.2001:2.4.0 ● Mär.2003: ● Dez.2003:2.6.0 ● Feb.2004: ● Aug. 2006: ● Nov.2008: ● Nov.2008:
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz ● Allgemeiner Aufbau eines Betriebssystems ● Kernelspace ● Laufzeitumgebung des Kernel ● Ein Adressraum ● Verwaltet Hardware- Resourcen ● Verwaltet Prozesse im Userspace ● Userspace ● Laufzeitumgebung der Applikationen ● Adressraum pro Prozess ● Konfiguriert Kernel, Hardware Linux (Allgemein) Hardware Kernelspace Userspace Betriebssystem
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Linux (Kernel) ● Der Linux-Kernel ● Monolithisch ● Die meisten Dienste laufen im Kernelspace, in einem Adressraum ● Gegenkonzept: Mikrokernel ● Tendenz: Mehr Logik im Userspace (udev, FUSE, CRDA, etc.) ● Modular ● Module/Dienste (Scheduler, Treiber, Dateisysteme, etc.) sind unabhängig voneinander und können ausgetauscht werden Hardware Kernelspace Userspace Prozess- verwaltung Speicher- verwaltung Interprozesskommunikation Gerätetreiber Netzwerk- stack Dateisystem- stack
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Linux (Kernel) ● Ursprünglich entwickelt für den Intel (x86-32) ● Open Source (GPLv2) ● Anpassungen möglich ● Neue Prozessor-Architekturen ● Angepasstes Memory Management ● Angepasster Scheduler ● Schlankerer Kernel ● Statischer Kernel ● Derivate/Patches ● uClinux ● RTLinux, RTAI, RT-preempt ●... Kernelspace
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Linux (Schichten) ● Schichtenmodell ● Zwei Privilegstufen ● Zugriff auf Kernel via System Calls ● Ursprünglich nur x86 ● Kontextwechsel durch Interrupt 0x80 bzw. VDSO ● Zwei architekturabhängige Schnittstellen ● Weitere Abstraktions-schicht zur Steigerung der Portabilität Hardware Userspace Kernelspace System Calls Hardware Access (Ring 0) (Ring 3) portabel High-Level APIs
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Standard Linux (Userspace) ● High-Level APIs ● Kernel ● Devices ● Sockets ● libc ● GNU libc ● Userland ● GNU system ● Daemons ● udev, HAL, syslog, dhcpcd, D- Bus, NM, Avahi,... ● GUI ● X.Org ● Windowmanager Userspace Kernelspace System Calls High-Level APIs libc Devices Userland X Server Daemons WM Bibliotheken (Gtk, Qt,...) Desktop Environment (KDE, GNOME) Applikationen Betriebssystem
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux (Userspace) ● Modularer Aufbau erleichtert Portierung/Anpassung ● Einfache, portierbare, unabhängige Module mit klaren Schnittstellen ● Einfach? Portierbar? Klar? ● Code gewinnt ● Standards folgen Implementierungen ● Module sind austauschbar ● Diverse Alternativen ● Oft optional ● Meist Open Source ● Anpassungen möglich Userspace High-Level APIs libc Devices Userland X Server Daemons WM Bibliotheken (Gtk, Qt,...) Desktop Environment (KDE, GNOME) Applikationen KISS: Keep It Simple and Stupid.
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux (Userspace) ● Alternativen zur GNU libc ● uClibc ● dietlibc ● newlib ● (klibc) Userspace High-Level APIs libc Devices Userland X Server Daemons WM Bibliotheken Applikationen
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux (Userspace) ● Alternativen zum GNU system ● Busybox ● Single-Binary ● embutils ●...? Userspace High-Level APIs libc Devices Userland X Server Daemons WM Bibliotheken Applikationen
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux (Userspace) ● Alternativen zu Daemons ● udev ● Statische Device Nodes ● HAL ● Statische Device Informationen ● NetworkManager ● Semistatische Netzwerkkonfiguration ● Apache ● lighttpd, thttpd, fnord, mini_httpd,... ● OpenSSH ● Dropbear Userspace High-Level APIs libc Devices Userland X Server Daemons WM Bibliotheken Applikationen
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux (Userspace) ● Alternative X Server ● KDrive ● TinyX ● SmallX ● NanoX ● XDirectFB ●... ● Alternativen zu X ● DirectFB ● SDL ● GtkFB ● Qtopia/Qt Extended ●... Userspace High-Level APIs libc Devices Userland X Server Daemons WM Bibliotheken Applikationen
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux (Userspace) ● Der Vollständigkeit halber ● Angepasste Applikationen ● Angepasste Bibliotheken Userspace High-Level APIs libc Devices Userland X Server Daemons WM Bibliotheken Applikationen
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Linux ● Minimalanforderungen ● 4 MiB ROM ● 8 MiB RAM ● Minimalstanforderungen ● ca. die Hälfte Userspace Kernelspace High-Level APIs libc Devices UserlandDaemons Hardware
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Vorteile
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Vorteile ● Fast alle Features bereits vorhanden ● IP-Stack, USB, Bluetooth, iSCSI, I²C, HIDs, GUI- Frameworks... ● Embedded Distributionen ● Open Source-Lizenz ● Quellcode verfügbar ● Keine Lizenzgebühren ● Unabhängig von anderen Firmen ● Standardisiert... quasi ● POSIX, SUS, LSB, FHS ● Verschiedene Gremien ● Entwickler ● Kein Spezialwissen ● Kernel: C ● Userspace: ● C, C++ ● Perl, Python ● Packaging ● Frontend: ● PHP ● C, C++ ● Support ● Kostenlos (Community) ● Kostenpflichtig
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Nachteile ● Open Source (GPLv2) ● Lizenzbestimmungen müssen eingehalten werden! ● Aber: Die GPL hört sich schlimmer an als sie ist ● Kein stabiles Kernel-ABI ● Keine stabile interne API ● Entwickler ● Arbeitsweise anpassen ● Evtl. Neue Entwicklungsumgebungen ● Manager ●...
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Development ● Architekturen stimmen nicht überein ● Binaries sind Architektur-spezifisch Host x86 Target ARM
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Development ● Architekturen stimmen nicht überein ● Lösung 1: Entwickeln und Debuggen auf dem Host ● Problem: Keine Realumgebung Host x86 Target ARM
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Development ● Architekturen stimmen nicht überein ● Lösung 2: Entwickeln und Debuggen remote auf dem Target ● SSH über USB-Netzwerk ● Problem: Compiler sehr langsam ● Problem: Evtl. nicht genug Hardware Host x86 Target ARM
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Development ● Architekturen stimmen nicht überein ● Lösung 3: Entwickeln auf dem Host, debuggen remote auf dem Target ● Problem: Compiler erstellt falsche Binaries ● Lösung: Cross-compiling Host x86 Target ARM
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Embedded Development ● Architekturen stimmen nicht überein ● Lösung 4: Entwickeln in einer virtuellen Maschine auf dem Host
Eingebettetes Linux und Entwicklungsmethoden Malte S. Stretz Tipps zu Open Source ● Lizenzen beachten ● ● Forks considered harmful ● Der Wartungsaufwand kann immens werden ● Treiber im Kernel werden an API-Änderungen angepasst ● Coding Style einhalten ● Macht das spätere Einreichen von Patches einfacher ● Arbeitsweise anpassen ● Open Source-Projekte ticken anders ● Ein dickes Fell hilft ● Nicht immer ist jede Mail so gemeint wie sie klingt
Ende Danke für die Aufmerksamkeit