Linux

Überblick über Linux-Komponenten und Treiberentwicklungen, die wir in Embedded-Systemen umgesetzt haben.

Yocto

We have used the Yocto Project to create and customize embedded Linux images.

We have both set up Yocto projects from scratch and adapted existing ones.

• Developed board support packages (BSPs) for custom hardware
• Created and maintained project-specific Yocto layers
• Integrated kernel drivers and userspace applications
• Created custom recipes and images
• Automated build processes

Experience with OpenEmbedded, the meta-freescale (FSL) layer, and desktop environments such as LXDE and Sato.

Yocto

Wir haben das Yocto-Projekt zur Erstellung und Anpassung von Embedded-Linux-Images eingesetzt.

Dabei haben wir sowohl Yocto-Projekte von Grund auf neu aufgesetzt als auch bestehende Projekte angepasst und erweitert.

Board Support Packages (BSPs) für kundenspezifische Hardware entwickelt
• projektspezifische Yocto-Layer erstellt und gepflegt
Kernel-Treiber und Userspace-Anwendungen integriert
• eigene Rezepte und Images erstellt
• Build-Prozesse automatisiert

Erfahrung mit OpenEmbedded, dem meta-freescale (FSL) Layer sowie Desktop-Umgebungen wie LXDE und Sato.

Ethernet

Ethernet-Treiber

Auf einem FPGA-SoC haben wir 16 × 1G- und 4 × 10G-Ethernet-Ports implementiert, die über AXI und einen internen Switch im FPGA mit dem Prozessorsystem verbunden sind.

Zur Integration in das Embedded-Linux-System haben wir einen Ethernet-Treiber entwickelt, der alle Ports an das Netzwerk-Subsystem anbindet.

Ethernet-Userspace

Wir haben Ethernet in verschiedene Linux-Userspace-Anwendungen integriert und sowohl FPGA-basierte als auch das prozessorseitige Ethernet eines SoC genutzt.

Video for Linux (V4L)-Treiber

Auf einem FPGA-SoC wird ein Videostream über DisplayPort in das FPGA eingespeist und parallel auf einem Linux-System dargestellt.

Hierzu haben wir die FPGA-Logik sowie einen V4L-Treiber entwickelt, der die Anbindung an das Linux-Videosubsystem ermöglicht und den Videostream für Anwendungen im Userspace bereitstellt.

Getestet wurde der Treiber unter anderem mit der Camera-Beispielanwendung des Qt-Frameworks.

Framebuffer-Treiber

Auf einem FPGA-SoC wurde die grafische Benutzeroberfläche über einen DisplayPort-Ausgang ausgegeben.

Hierzu haben wir die FPGA-Logik sowie einen Linux-Framebuffer-Treiber entwickelt, der die Anbindung der Displayausgabe an das Betriebssystem ermöglicht.

FPGA-Register- und DMA-Treiber

In FPGA-basierten Systemen haben wir Linux-Kernel-Treiber zur Anbindung der FPGA-Logik an das Prozessorsystem umgesetzt.

Diese ermöglichen den Zugriff auf Register über AXI-Lite (unter Verwendung eigener IP-Cores) sowie die Hochgeschwindigkeits-Datenübertragung über AXI/DMA mit selbst entwickelten AXI-Mastern. Darüber hinaus wurden Speicher-Mapping, Interrupt-Handling und die Kommunikation zwischen FPGA und Userspace realisiert.

PCIe-Kartentreiber

Für PCI- und PCIe-basierte Systeme haben wir Linux-Kernel-Treiber zur Anbindung entsprechender Hardware umgesetzt.

Diese umfassen die Geräteinitialisierung, Speicher-Mapping, Interrupt-Handling sowie die DMA-basierte Datenübertragung mit hohen Datenraten zwischen Hardware und Userspace.

DisplayPort-Treiber

Für DisplayPort haben wir einen Linux-Treiber zur Anbindung eines DisplayPort-IP-Cores an das Embedded-Linux-System umgesetzt.

Die ursprünglich für einen Softcore-Prozessor vorgesehene Ansteuerung wurde dabei durch eine direkte Anbindung über AXI-Lite an das Prozessorsystem ersetzt und in einen Linux-Treiber überführt.

Der Treiber umfasst das Link-Training, die Hot-Plug-Erkennung, das EDID-Handling sowie die Konfiguration der Schnittstelle.

IPC (RPMsg)

Für die Interprozesskommunikation zwischen Host und Co-Prozessor haben wir unter Embedded-Linux einen IPC-Treiber auf Basis von RPMsg umgesetzt.

Dabei haben wir bestehende Beispiele angepasst und auf den vorhandenen Kommunikationskanälen aufgebaut.

In der konkreten Anwendung kommuniziert ein Linux-Userspace-Programm mit einem auf FreeRTOS basierenden M4-Core eines i.MX8-SoC.