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.