Embedded Linux - uss-defiant.de
Transcript of Embedded Linux - uss-defiant.de
Embedded Linuxim Automotivebereich
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– Vorstellung Unicontrolâ– Verwendete Hardwareâ– Embedded Entwicklungsumgebungenâ– Bauen eines Crosscompilersâ– Kernel, Treiber und Bootloaderâ– Bibliotheken und Toolsâ– Lizenzierungâ– Applikationsentwicklungâ– NFS vs. Flashenâ– Debuggen auf dem Target
Gliederung
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■mittelständisches Unternehmen■ca. 30 Mitarbeiter■Zulieferer für Siemens VDO u.a.■Automotivebereich und Schiffskommunikation■Kombiinstrumente und Infotainment■eigene Projekte: DKI, Mediadatenerfassung, Unilogger
Vorstellung Unicontrol
Unicontrol Systemtechnik GmbHSachsenburger Weg 34OT DittersbachD-09669 FrankenbergTel.: 037206 / 8873 - 0
http://www.unicontrol.de
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
So fing alles an... das Digitale Kombiinstrument
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– DKI:â—† MPC5200â—† Coral Pâ—† Basisplatine
Verwendete Hardware
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– Unilogger:â—† MPC5200â—† integrierter
Grafikchipâ—† Basisplatine
Verwendete Hardware
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– GHS, WindRiverâ– Integrity, VxWorks, QNX, WinCE, OSEKâ– SysGo, MontaVista, Denxâ– Multi 2000, Eclipse, make, gccâ– glibc, uClibcâ– Hardware-Emulator/-Debuggerâ– Netzwerk (NFS)â– Flashenâ– eigene Entwicklungsumgebung
Embedded Entwicklungsumgebungen
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– historisch gewachsenâ– spezielle Anforderungen:
â—† mehrere Targetsâ—† soll fĂĽr PC und Target bauenâ—† alles in Versionsverwaltung
â– Realisierung:â—† System aus Konfigurationsdateien und -variablen
(platforms, projects, configs)â—† Trennung in Kernel, Tools+Libs und eigene
Software (generische + spezielle Anteile)
â– compilieren mit gcc + make
Eigene Entwicklungsumgebung
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– buildroot daily snapshot aus Subversion(oder als fertiges Paket)
â– Patches einpflegen (z.B. gcc-Bugs bei C++-UnterstĂĽtzungauf PowerPC)
â– make menuconfig
Bauen eines Crosscompilers I
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■Wichtig: Zielpfad einstellen!■gcc benutzt den Pfad unter bestimmten Umständen■sonst Header an falscher Stelle gesucht
Bauen eines Crosscompilers II
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– Architektur, Pfade, Versionenâ– gcc, binutils, Kernel, uClibcâ– gcc 4.1.1, uClibc Snapshot
Bauen eines Crosscompilers III
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■zusätzlich können Busybox u.a. Utils eingebunden werden■bei uns wird Busybox später gebaut
Bauen eines Crosscompilers IV
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■Start mit make■baut in angegebenes Verzeichnis■lädt alle benötigten Pakete herunter und baut sie■bei Fehlern am besten von vorn anfangen :-)
(zumindest auf PowerPC)â– am Ende liegt im Zielverzeichnis der fertig gebaute
Compiler mit der uClibc
Bauen eines Crosscompilers V
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– aktuellster Kernel (2.6.20 aus git)â– vor allem wegen UnterstĂĽtzung von Embedded
OpenFirmwareâ– Architektur: powerpc (frĂĽher: ppc)â– Einbinden der Patches von den Maintainern fĂĽr
die Prozessorfamilie MPC52xxâ– eigene Anpassungen (inkl. Bugreports)â– make menuconfigâ– make uImage
Kernel, Treiber und Bootloader I
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– Grafiktreiber Fujitsu Coral P (auch von Denx undALT Software (OpenGL) unterstĂĽtzt)
â– CAN-Treiber mit Transportprotokoll alsoptionales Modul
â– Diagnosetreiber (ĂĽber Transportprotokoll)â– GPIO-Treiberâ– GPL-Lizenzierung (bis auf wenige Ausnahmen)â– mit eigenem Buildsystem gebaut
Kernel, Treiber und Bootloader II
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– U-Boot Snapshot (git) oder fertiges Paketâ– Hauptentwicklung bei Denx, Anteil von Secret Labâ– unterstĂĽtzt Embedded OpenFirmware
Kernel, Treiber und Bootloader III
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– eigene Anpassungen an unsere Hardware ďż˝ GPLâ– UnterstĂĽtzung des Coral make boardname_config (uc5200,
basiert auf tqm5200)■make erzeugt uboot.bin■Flashen mit U-Boot � Henne-Ei-Problem■problematisch, wenn Flashen fehlschlägt■auch per JTAG - JTAG-Tools (openwince) von Unicontrol
auf HW portiert (Prozessor + Pinbelegung Flashanbindung)
Kernel, Treiber und Bootloader IV
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■Pakete runterladen oder Snapshot■Patches einpflegen (Busybox z.B. tftp)■bei uns automatisch (ähnlich zu buildroot)■Busybox: make menuconfig
.config speichern und in Zukunft benutzenâ– sonst:
./configure --host=powerpc-unknown-linux --target=host--prefix=...; make && make install(eigentlich powerpc-uclibc-linux, aber viele configureserkennen das nicht richtig und brechen ab)
■aufpassen bei benutzten Headerfiles!■am Ende erhält man Bibliotheken und Tools
Bibliotheken und Tools
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■Dilemma: Applikationssoftware soll nicht veröffentlichtwerden (Know-How, Sicherheitsbedenken)
â– Konsequenz: GPL-Bibliotheken scheiden ausâ– GPL-Tools und LGPL-Bibliotheken weitgehend
unproblematisch■aber: Nutzer muss Möglichkeit haben, im System diese
Bibliotheken/Tools auszutauschen■schwierig bei Embedded Systemen■theoretisch besteht bei uns diese Möglichkeit, allerdings wird
Zugriff auf Flash aus SicherheitsgrĂĽnden unterbundenâ– im Kernel bestimmte Funktionen nur fĂĽr GPL-Treiber
verfĂĽgbar ďż˝ wir benutzen GPL
Lizenzierung
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– ...um dem Target einen Sinn zu geben
â– Unicontrol-Entwicklungen:â—† DKI - Digitales Kombiinstrument
✦ generische (fahrzeugunabhängige) Anteile✦ fahrzeug- / projektabhängige Anteile
◆ UDAG - Universelles Datenerfassungsgerät✦ Förderantrag aufbauend auf Machbarkeitsstudie „Unilogger“✦ Linux auf dem Target✦ Konfigurationsapplikation mit C# auf Windows✦ selbe Codebasis für beide (C++, Boost)
ďż˝ beide benutzen dasselbe Buildsystem
Applikationsentwicklung
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■endgültige Version:◆ Schreiben in ROM oder Flash � „Flashen“◆ unabhängig vom Entwicklungsrechner
■zur Entwicklung:◆ Laden in RAM per Debugger/Emulator (JTAG)◆ Netzwerk-Filesystem, z.B. NFS◆ abhängig vom Entwicklungsrechner
NFS vs. Flashen I
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– in /etc/exports Verzeichnis freigeben:/tftproot/ *(rw,no_root_squash,async,nohide)
â– make nfs kopiert alles nach /tftproot/TARGET/â– selbe Verzeichnisstruktur wie auf Targetâ– Kernel als Rootpath mitgeben
(bei uns im U-Boot durchKonfigurationsvariablen)
â– Kernel per TFTP gebootet(selbes Verzeichnis wieNFS): nfsboot im U-Boot(eigene Anpassung)
NFS vs. Flashen II
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■make flash_image baut Images aus allen benötigten Teilen■mehrere Images, digital signiert:
â—† OFDTB (OpenFirmware DeviceTree Binary)â—† Kernel, RootFS, OptFSâ—† Splashscreen (U-Boot), Designs (VarFS)
â– Flashen ĂĽber verschiedene Methoden:â—† CAN (per Diagnose ĂĽber TP)â—† Netzwerk (von Applikation auch ĂĽber MenĂĽ)â—† JTAG, seriell, ...
â– Image im U-Boot ĂĽber ramboot gestartet (automatisch nachTimeout)
■Timeout auf 0 setzbar, schaut nach Tastendruck, später GPIO
NFS vs. Flashen III
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
■Zugriff auf HW:◆ seriell (minicom)◆ Netzwerk zum Aufstecken (telnet)◆ JTAG (zusätzliche HW)
■Kernel-Debugging:◆ kdb (direkt im Kernel mit eigener Oberfläche)◆ kgdb (Kernelpatch, Connect mit gdb)
â– Applikation evtl. fĂĽr Host compilieren und dort debuggenâ– bei den Tools auch gdb fĂĽr Target ďż˝ Debugging auf Targetâ– aber: Binaries zu groĂź ďż˝ besser: Remote-Debugging
(z.B. mit -O3 und strip 6,7MB, mit -g -ggdb3 ca. 120MB)â– gdb + gdbserver mit buildroot gebaut (massiv gepatcht)
Debuggen auf dem Target I
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– Target:â—† gdbserver /dev/ttyS0|host:port
(host: erlaubter Client, wird nicht unbedingt geprüft)◆ per seriell problematisch, wenn Konsole die belegt◆ mögliche Szenarien:
✦ gdbserver seriell, Konsole Netzwerk✦ gdbserver Netwerk, Konsole seriell✦ beide Netzwerk✦ beide seriell auf verschiedenen seriellen Interfaces
Debuggen auf dem Target II
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– Host:â—† GDB aufrufen:
powerpc-linux-gdb binary (mit Debugsymbolen)gdb> target remote /dev/ttyS0|host:portgdb> cont (nicht run!)
◆ gdb (aus Toolchain!) läuft auf Host, aber verarbeitet Symbolevom Target (strip ebenso)
◆ auf Target und Host muss Binary nicht dasselbe sein, nurAbarbeitungsreihenfolge � gestripptes Binary auf Targetmöglich
Debuggen auf dem Target III
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– DDD:â—† Aufruf im gdb in Skript verlagern:
# cat target-debugtarget remote host:port
â—† ddd mit diesem Skript aufrufen:ddd -x target-debug --debugger \/opt/toolchains/ppc-4.1.1-2/bin/powerpc-linux-gdb binary
â—† ddd-Konsole durch Output nahezu unbrauchbarâ—† Backtrace ebensoâ—† deswegen gdb auf Kommandozeile vorzuziehen
â– Alternativen?â—† kdbg (KDE), aber kann kein Remote-Debugging
Debuggen auf dem Target IV
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
Embedded Linux im Automotivebereich
Jan Horbach, Unicontrol Systemtechnik GmbH – Chemnitzer Linux-Tage 2007 – 3./4. März 2007
â– WeiterfĂĽhrende Links:
â—† http://www.unicontrol.deâ—† http://www.digitales-kombiinstrument.de
â—† http://www.linuxdevices.comâ—† http://www.busybox.netâ—† http://uclibc.orgâ—† http://u-boot.sourceforge.netâ—† http://openwince.sourceforge.net
Vielen Dank fĂĽr Ihre AufmerksamkeitUnicontrol Systemtechnik GmbHSachsenburger Weg 34OT DittersbachD-09669 FrankenbergTel.: 037206 / 8873 - 0
http://www.unicontrol.de