Embedded-Linux

Mit dem Einsatz von SoCs hat das Thema Embedded-Linux eine neue Bedeutung gewonnen. Noch nie zuvor ließen sich so mächtige Systeme mit so wenig Aufwand realisieren.

Wir setzen Linux nicht nur auf unseren Embedded-Systemen ein, sondern arbeiten seit 12 Jahren auch auf Server und Workstation mit Linux.

Der Umgang mit Linuxstellt für uns somit kein "Spezial-Know-How" dar sondern gehört ins Reich der täglich angewendeten Allgemeinbildung.

Unsere Leistungen im Überblick

  • Aufsetzen von Yocto basierten Linux-Systemen
  • Erweitern der Linux-Systeme um BSP-Layer
  • Entwicklung von Kundenspezifischen Kernel-Treibern
  • Entwicklung von Kundenspezifischen Konsolen-Applikationen
  • Entwicklung von Kundenspezifischen Embedded-Qt-Applikationen

Unsere Erfahrungen

Wir haben nun bereits für einige Embedded-Systeme ein Linux-System aufgesetzt bzw.Linux-Systeme anderer Hersteller für unsere Anforderungen angepasst und in unsere Projekte integriert. 

In allen Projekten haben wir eigene Linux-Kernel-Treiber und und Linux-Applikationen entwickelt. Im Folgenden ein repräsentativer Auszug:

Yocto

Ein open source-Projekt, das Werkzeuge zum Bau von Linux-Systemen zur Verfügung stellt. Es basiert auf Layern und Rezepten und ist beliebig erweterbar.

Wir bauen inzwischen alle unsere Linux-Systeme mit Yocto und haben auch zahlreiche Rezepte zur Ergänzung und Einbindung eigener Programme oder FPGA-Bit-Files geschrieben.

Die verwendete Distribution ist Poky, die zugrunde liegenden Yocto-Releases sind Krogoth, Pyro und Rocko.

u-boot

Der u-boot ist ein speziell auf Unix-Systeme wie Linux zugeschnittener Loader und findet in Embedded-Systemen fast durchgehend Verwendung.

Wir haben bereits mehrfach u-boot-Systeme an bestehende Hardware angepaßt.

PCI-Kernel-Treiber

Für mehrere Embedded-Systeme haben wir PCI- bzw. PCIe-Kernel-Treiber entwickelt, um den eigenen FPGA in ein Embedded-Linux zu integrieren.

Dabei wurden ein bis mehrere BARs für die Konfiguration von FPGA-Einheiten sowie ein bis mehrere DMA-Kanäle implementiert.

FPGA-Kernel-Treiber

Für Xilinx- und Altera/Intel-SoC-Systeme haben wir mehrere Treiber entwickelt, um die Funktionalitäten der FPGAs in das Linux-System zu integrieren.

Die Anbindung der FPGA-Logik an die Prozessor-Systeme basierte dabei über AXI-Interconnect-Topologien. 

Die Konfiguration der FPGAs erfolgte über AXI-Lite, die DMA-Transfers über AXI-Master seitens des FPGAs, teils direkt oder über einen Level 3-Interconnect in den DDR-Speicher des Prozessors.

Framebuffer-Kernel-Treiber

In mehreren Projekten haben wir Framebuffer-Treiber für die Bildausgabe entwickelt. Dabei wurden die folgenden Hardware-Komponenten ins Linux-System integriert:

  • ein Silicon Motion SM501-Chip in ein Embedded-Linux, welches auf einem TQM501-Prozessor-Modul von TQ-Components läuft
  • ein eigener Framebuffer-Pfad mit DisplayPort-Ausgang im FPGA eines Arria10-SoC von Altera/Intel
  • ein eigener Framebuffer-Pfad mit VGA-Ausgang im FPGA eines  CycloneV-SoC von Altera/Intel
Kernel-Devices

Die Kommunikation mit dem Userspace erfolgt neben ioctl-Kommandos über Kernel-Devices. Alle unsere Treiber werden über Kernel-Devices angesprochen und stellen zu transferierende Daten über diese zur Verfügung.

v4l-Kernel-Treiber

Für ein Arria10-SoC aben wir ein v4l2-Kernel-Treiber entwickelt, welcher die Übertragung einer Vorschau eines DisplayPort-Eingangs vom FPGA in den Prozessor-Speicher steuert und die Bilder über das v4l-Interface zur Verfügung stellt.

Der Video-Stream wird über gstreamer einem Qt5-Video-Widget zugeführt, dessen Applikation auf einem X11 basierten LXDE-Desktop ausgeführt wird.

Ethernet-Treiber

Für mehrere SoC basierte Projekte haben wir ein bis sechzehn im FPGA implementierte Ethernet-Kanäle in das Netzwerk-Subsystem des Linux-Systems integriert. Über die Ethernet-Kanäle wurde sowohl gesendet als auch empfangen.

Ethernet

In den meisten unserer Projekte läuft auf dem Embedded-Linux-System ein Dienstprogram, welches auf einem Ethernet-Port (meistens UDP, aber auch TCP) Daten empfängt und versendet.

X11, X11vnc

In einigen Projekten kam ein X11-Server auf dem Embedded-Linux zum Einsatz, dessen Bild mittels X11vnc-Server und VNC-Protokoll über das Ethernet-Netzwerk an einen PC übertragen wurde.

Die Linux-Systeme wurden von uns mit entsprechend referenzierten Rezepten erweitert.

Desktop: LXDE

In einigen Projekten kam ein X11 basierte LXDE-Deskops zum Einsatz.

Die Linux-Systeme wurden von uns mit entsprechend zugebundenen Rezepten erweitert.

Desktop: SATO

Wir haben den SATO-Desktop für ein Projekt evaluiert. Er passte jedoch nicht in unser Konzept.

Das Linux-System wurden von uns mit entsprechend zugebundenen Rezepten erweitert.

Desktop: XFCE

Wir haben den XFCE-Desktop für ein Projekt evaluiert. Er passte jedoch nicht in unser Konzept.

Das Linux-System wurden von uns mit entsprechend zugebundenen Rezepten erweitert.

Qt4, Qt5

Auf dem Desktop im täglichen Einsatz und gelegentlich auch auf Embedded-Systemen. Für einige Projekte haben wir qt4 bzw. qt5 als X11-Variante in Embedded-Systeme integriert.

Das Linux-System wurden von uns mit entsprechend zugebundenen Rezepten erweitert.

Werfen Sie ruhig auch einen Blick auf unsere Projekt-Referenzen.