NDIS · Linux-Kernel · RTOS · Echtzeitoptimierung

Treiber, Systemsoftware und Echtzeitplattformen

Plattformübergreifende Treiberentwicklung für Industriegeräte und die Plattformen, auf denen sie laufen. NDIS-Miniport-Treiber und NDIS-Intermediate-Treiber, Linux-Kernel-Treiber, RTOS-Portierung und Optimierung von Echtzeitplattformen.

Zielgruppe

Für wen wir arbeiten

  • Maschinenbauer

    Ihre Maschine läuft auf einem Standardbetriebssystem und muss trotzdem die spezifizierte Zykluszeit einhalten, mit einer Optimierung, die auf Ihrer Hardware gemessen ist.

  • Gerätehersteller

    Ihr Gerät braucht hostseitige Treiber für jedes Betriebssystem Ihrer Kunden, entwickelt und gepflegt als gemeinsame Treiberfamilie und nicht als drei getrennte Portierungen.

  • Softwareanbieter

    Wir schreiben und pflegen die Treiber und die Middleware, auf denen Ihre Plattform aufsetzt, von Kernel-Mode-Treibern und dem Paketpfad bis zur Middleware-Schicht. Unser Team arbeitet ständig auf dieser Ebene.

Leistungsumfang

Was wir tun

  1. 01

    Treiberentwicklung für Windows

    Wir entwickeln NDIS-Miniport- und NDIS-Intermediate-Treiber sowie Kernel-Mode-Treiber für Geräte, die keine Netzwerkkarten sind.

  2. 02

    Linux-Kernel-Treiber

    Wir entwickeln Netzwerktreiber für den Linux-Kernel sowie Geräte- und Plattformtreiber für USB-Geräte mit Bulk-Transfer sowie für serielle, Netzwerk- und hybride Hardware mit angebundenem FPGA.

  3. 03

    Optimierung von Echtzeitplattformen

    Wir optimieren Echtzeit-Linux für Industriegeräte, gemessen unter Last und nicht im Leerlauf, und übergeben die Konfiguration zusammen mit dem Messbericht zu Latenz und Jitter.

  4. 04

    RTOS-Treiber und Plattformintegration

    Wir entwickeln, portieren und integrieren Treiber für FreeRTOS, eCos, Zephyr, micro-C/OS und SYS/BIOS TI-RTOS, einschließlich der Anpassungen an Interrupts, DMA und Speichermodell, die ein Wechsel zwischen diesen Betriebssystemen verlangt.

  5. 05

    Migration der Windows-Plattform

    Für Maschinenbauer, deren Plattform aus dem Support gefallen ist, migrieren wir auf Windows IoT Enterprise LTSC und konfigurieren die Funktionen zur Systemhärtung.

  6. 06

    Middleware und Verfügbarkeit

    Wir entwickeln industrielle Middleware für Windows und Linux und Redundanz für hochverfügbare Steuerungen, wo ein einzelner Knoten nicht ausreicht.

Technik

Betriebssysteme und Ergebnisse

Windows
NDIS-Miniport · NDIS-Intermediate · Kernel-Mode-Treiber · Windows IoT Enterprise LTSC · Unified Write Filter · Shell Launcher · Assigned Access · Device Guard
Linux und RTOS
Netzwerk-, Geräte- und Plattformtreiber im Kernel · Echtzeit-Linux-Optimierung · AF_XDP-Empfang ohne Kopieren · qdiscs ETF und taprio · FreeRTOS · eCos · Zephyr · micro-C/OS · SYS/BIOS TI-RTOS
Was Sie erhalten
Treiberquellen mit Build- und Signierumgebung · Optimierungskonfiguration mit Messprotokoll · Bericht zu Latenz und Jitter unter Last · Validierungsprotokoll der Plattform · Migrationsplan, wenn eine Betriebssystemversion gewechselt hat

Was umfasst plattformübergreifende Treiberentwicklung für Industriegeräte?

Plattformübergreifende Treiberentwicklung für Industriegeräte umfasst die Middleware und die Betriebssysteme, auf denen sie laufen.

Dazu gehören Treiber auf beiden Seiten der Kernel-Grenze, der Paket- oder Transferpfad unter einem Protokollstack, das Scheduler- und Interruptverhalten, das den Jitter bestimmt, und die Middleware darüber. Eine typische Echtzeit-Linux-Optimierung, die wir liefern, fährt einen Netzwerkzyklus von 80 µs bei 20 µs Jitter mit einem eigenen NIC-Treiber. Typische Projekte sehen so aus:

  • Ein Windows-Treiber. Entwicklung eines NDIS-Miniport-Treibers, wenn das Gerät der Adapter ist, eines Intermediate-Treibers, wenn es über einem Adapter liegen muss, oder eines Kernel-Mode-Treibers für ein Gerät, das keine Netzwerkkarte ist.
  • Ein Linux-Kernel-Treiber. Entwicklung von Netzwerktreibern für den Linux-Kernel oder von Geräte- und Plattformtreibern für USB-Geräte mit Bulk-Transfer sowie für serielle, Netzwerk- und hybride Hardware mit angebundenem FPGA.
  • Echtzeitoptimierung und Validierung. Optimierung und Validierung von Echtzeitplattformen, gemessen unter Last, mit Konfiguration und Messwerten in einer Übergabe.
  • Eine RTOS-Portierung. Portierung von Treibern auf FreeRTOS, Entwicklung unter eCos, Arbeit an Zephyr, micro-C/OS oder SYS/BIOS TI-RTOS, meist nach einer Plattformmigration.
  • Eine Plattformmigration. Migration auf Windows IoT Enterprise LTSC für einen Maschinenbauer, dessen Version aus dem Support gefallen ist.
  • Redundanz. Redundanz für hochverfügbare Steuerungen, wenn ein Knotenausfall überstanden werden muss; ihn zu erkennen reicht nicht.

Der Unterschied zum typischen Umfang bei Embedded-Systemen: Die Seite zu Embedded-Systemen behandelt die Software auf dem eigenen Chip des Geräts, diese Leistung die Software, mit der der Host mit dem Gerät spricht. Viele Produkte brauchen beides, und oft erledigen dieselben Ingenieure beides, es bleiben aber getrennte Disziplinen mit eigener Entwicklung und eigenen Fehlerbildern.

Der Weg eines empfangenen Pakets zweimal gezeichnet: unter Windows durch die NIC, mit DPC- und IRQL-Warteschlangen auf dem Schritt in den NDIS-Miniport, dann der optionale Intermediate-Treiber und der Protokolltreiber bis zur Anwendung; unter Linux durch NIC, Kernel-Treiber, NAPI und Softirq und die Socket-Schicht, mit einem AF_XDP-Pfad ohne Kopieren, der die Socket-Schicht umgeht

Der Weg eines empfangenen Pakets durch die Netzwerkstacks von Windows und Linux.

Kann Windows eine Echtzeit-Deadline halten?

Nicht in dem Sinn, in dem die Frage meist gemeint ist, und eine differenzierte Antwort hilft mehr.

Windows arbeitet standardmäßig mit einem Takt von 15,6 ms, der sich bis auf 1 ms herunter konfigurieren lässt. Das ist die Timer-Auflösung, nicht die Zykluszeit, und beides sind verschiedene Größen. Ein durchgerechnetes Beispiel: Die reine Windows-Plattform von openPOWERLINK dokumentiert für einen reinen Software-Stack einen erreichbaren Zyklus oberhalb von 10 ms. Diese 10 ms sind keine Untergrenze, die der Timer setzt. Sie ergeben sich aus der Netzgröße und der PDO-Konfiguration:

ZyklusGehaltene Knoten
Etwa 1 msEiner oder zwei
5 msDrei bis fünf
10 msZehn oder mehr, mit umfangreichen TPDO- und RPDO-Konfigurationen

Es ist also ein Kriterium, das von den Entwurfsvorgaben abhängt, und keine feste Grenze.

Gelöst wird das mit einer hybriden Architektur. Der Kommunikationscontroller wandert ganz aus Windows heraus auf Hardware ohne Betriebssystem, hier ein FPGA mit einem Softprozessor, und Windows tastet die Netzdaten je nach Netzgröße mit 1 ms bis 5 ms ab, während der Determinismus in der Hardware bleibt. Im selben openPOWERLINK-Beispiel erreicht die Windows-Plattform mit einer externen Lösung aus NDIS-Miniport über PCIe 250 µs, gegenüber mehr als 10 ms als reine Software. Das ist ein Ergebnis einer Open-Source-Implementierung mit veröffentlichten Zahlen, hier als Bestätigung der Architektur angeführt.

Welche NDIS-Treiberklasse passt zu meinem Netzwerkgerät?

Das hängt davon ab, ob der Adapter fest zugeordnet oder geteilt ist, und die beiden Klassen tauschen Determinismus gegen Flexibilität.

  • Ein Miniport-Treiber steuert den physischen Adapter direkt. Er ist die bessere Wahl, wenn feste Echtzeitleistung verlangt ist, denn jede weitere Schicht im Pfad ist eine weitere Warteschlange, die Ihren Frame aufhalten kann.
  • Ein Intermediate-Treiber ist an seiner oberen Kante ein Protokolltreiber und an seiner unteren ein virtueller Miniport und liegt über einem echten Miniport. So können mehrere Anwendungen einen Adapter teilen, und das ist die richtige Wahl, wenn Virtualisierung verlangt ist.

Wir liefern beide Klassen.

Ein Protokollstack auf einem Miniport-Treiber, der einen fest zugeordneten Adapter direkt steuert, daneben zwei Protokollstacks von Anwendungen, die sich einen Adapter über einen Intermediate-Treiber teilen, der über dem vorhandenen Miniport liegt

Ein Miniport an einem fest zugeordneten Adapter und ein Intermediate-Treiber an einem geteilten.

Was gehört zur Migration einer Windows-Plattform?

Eine Windows-Migration besteht vor allem darin, den Neuaufbau der Systemhärtung zu planen, nicht darin, die Anwendung zu portieren.

Ein Maschinenbauer, der noch auf einer abgekündigten Windows-IoT-Version ausliefert, hat diese Plattform meist, weil sie noch funktioniert. Sie bekommt aber keine Sicherheitsupdates mehr und fällt womöglich bei der Beschaffungsprüfung eines Kunden durch. Ein geplanter Ausstieg bedeutet die Migration auf Windows IoT Enterprise LTSC, und dort sind die Daten das Argument: Die Version 2021 wird bis 2032 unterstützt, die Version 2024 bis 2034. Das eigentliche Ziel der Migration ist selten die Anwendung. Es ist die Konfiguration zur Systemhärtung, mit der sich die alte Maschine wie ein geschlossenes Gerät verhielt, also Unified Write Filter, Shell Launcher, Assigned Access, Keyboard Filter, Device Guard und Credential Guard, dazu die Laufwerksverschlüsselung, wenn das Gerät Kundendaten speichert. Diese Konfiguration wird für die neue Version neu aufgebaut.

Links blass die alte, abgekündigte Version, in der Mitte die Konfiguration zur Systemhärtung mit Unified Write Filter, Shell Launcher, Assigned Access, Keyboard Filter, Device Guard, Credential Guard und Laufwerksverschlüsselung, rechts die neue LTSC-Version mit der für sie neu aufgebauten Konfiguration

Die Konfiguration zur Systemhärtung, von der alten Version auf die neue LTSC-Version neu aufgebaut.

Worin unterscheidet sich Echtzeit-Linux von Windows?

Der Unterschied liegt in der Architektur: Windows stellt verzögerte Arbeit in Warteschlangen und unterbricht nach Priorität, Echtzeit-Linux verkürzt seine nicht unterbrechbaren Abschnitte.

Unter Windows liegt das Verhalten, das über den Determinismus entscheidet, in den Warteschlangen für Deferred Procedure Calls und auf Interruptebene und darin, wie ein Thread mit hoher Priorität andere unterbrechen darf. Den Paketpfad beider Systeme zeigt die Grafik im ersten Abschnitt dieser Seite. Echtzeit-Linux geht dasselbe Problem an, indem es die nicht unterbrechbaren kritischen Abschnitte des Kernels verkürzt. Besser wird dadurch die Latenz im ungünstigsten Fall unter Last; der durchschnittliche Durchsatz kann dafür etwas sinken. Der von uns gemessene Jitter auf einer optimierten Echtzeitplattform liegt unter Last unter 20 µs, und die fortlaufenden Tests der OSADL QA Farm unter Last durch Timer, Speicher, Netz und Dateisystem bestätigen öffentlich Ergebnisse dieser Klasse. Die beiden Richtungen des Datenpfads werden unterschiedlich optimiert. Auf der Empfangsseite heißt Optimierung, auf einen Mechanismus ohne Kopieren wie AF_XDP umzusteigen oder, wo Hardware oder Betriebssystem das nicht unterstützen, auf Polling wie bei DPDK, wobei Optimierung gegen Portabilität steht. Auf der Sendeseite sind drei Mechanismen in Gebrauch: Launch Time auf Intel i210 und i225, zeitbasierte Ablaufsteuerung nach IEEE 802.1Qbv und die Linux-qdiscs ETF und taprio, die sie ansteuern. Die Arbeit am Determinismus oberhalb dieser Ebene, also Qbv-Zeitpläne, Benchmarks und Prüfung Hop für Hop, behandelt die Seite zu Echtzeit-Ethernet.

Was gehört zur Portierung eines Treibers auf ein RTOS?

Dieselben Aufgaben wie bei einem Betriebssystemtreiber werden gegen die HAL eines Herstellers gelöst statt gegen ein Treibermodell des Kernels.

Die eigentliche Gerätesteuerung lässt sich gut wiederverwenden. Vier Dinge lassen sich nicht übernehmen:

  1. Das Speichermodell wird statisch statt dynamisch.
  2. Die Interruptbehandlung wird chipspezifisch.
  3. Die Behandlung der DMA-Deskriptoren wird gegen die HAL neu geschrieben.
  4. Eine Änderung verlangt einen vollständigen Neubau und Neustart, wo sich ein Kernel-Modul im Betrieb neu laden ließe.

Der Tausch ist ausgeglichen. Es gibt keinen Aufwand für die Kompatibilität mit Kernel-Versionen, was über die Lebensdauer eines Produkts echte Einsparung ist, dafür eine Bindung an die HAL des Herstellers, was echte Kosten sind.

FAQ

Häufige Fragen

Wer übernimmt plattformübergreifende Treiberentwicklung für Industriegeräte?
Wir. Ein Gerät, das unter Windows, Linux und einem RTOS richtig funktioniert, mit NDIS-Miniport- und -Intermediate-Treibern, Netzwerk- und Gerätetreibern für den Linux-Kernel, RTOS-Portierung und der Echtzeitoptimierung darunter. Eine typische Echtzeit-Linux-Optimierung, die wir liefern, fährt einen Netzwerkzyklus von 80 µs bei 20 µs Jitter mit einem eigenen NIC-Treiber.
Welches Betriebssystem passt zu einem industriellen Echtzeitprodukt?
Das hängt von der Deadline ab, und oft lässt sich mit beiden arbeiten. Wo der Determinismus knapp ist, hat sich bewährt, den zeitkritischen Pfad vom Standardbetriebssystem auf ein FPGA oder einen eigenen Controller zu verlagern und Windows oder Linux alles ohne Deadline zu überlassen.
Veröffentlichen Sie einen Latenzvergleich zwischen Windows und Linux?
Nein. Ein einzelner direkter Vergleichswert lässt sich schlecht übertragen, weil das Ergebnis viel stärker von Hardware, Treiber und Optimierung abhängt als vom Namen des Betriebssystems. Echtzeiterweiterungen für Windows sind aktuelle Produkte, eine Windows-Plattform lässt sich also deterministisch machen. Wir veröffentlichen unsere eigenen Messwerte und beschreiben den Unterschied architektonisch.
Was unterscheidet das von Ihren Leistungen für Embedded-Systeme?
Beides überschneidet sich, verlangt aber verschiedene Disziplinen. Embedded-Systeme betreffen die eigene Software des Geräts auf dessen eigenem Chip. Diese Leistung betrifft die Software des Host-Betriebssystems, also Treiber, Kernel-Pfad und Scheduler.
Wir sind noch auf einer abgekündigten Windows-IoT-Version. Ist das dringend?
Veraltet ist es, dringend nicht. Windows 10 IoT Enterprise LTSC 2021 wird bis 2032 unterstützt und Windows 11 IoT Enterprise LTSC 2024 bis 2034, eine jetzt geplante Migration verschafft also ein Jahrzehnt. Wer sie jetzt einplant, solange die Version noch unterstützt wird, macht daraus ein geplantes Upgrade.
Was kostet Treiberentwicklung, und wie lange dauert sie?
Ein NDIS-Treiber für Windows, ein Linux-Kernel-Treiber und eine Echtzeitoptimierung sind verschiedene Aufgaben auf verschiedenen Plattformen, eine einzige Zahl träfe auf keine davon zu. Wir schätzen den Aufwand bei der Anfrage, anhand der Geräteklasse und der Plattformen, die Ihre Kunden verlangen.
Können Sie einen außerhalb des Kernels gepflegten Linux-Treiber über Kernel-Versionen hinweg kompatibel halten?
Ja, und das sind die laufenden Kosten dieser Treiberklasse. Ein außerhalb gepflegter Treiber (out-of-tree) muss für jeden Ziel-Kernel neu gebaut und manchmal überarbeitet werden. Deshalb gehört das Verfolgen der Kernel-Versionen bei uns zur Langzeitbetreuung.
Optimieren Sie PREEMPT_RT für unsere Hardware oder allgemein?
Für Ihre Hardware. PREEMPT_RT setzt die Obergrenze des Erreichbaren, die tatsächliche Latenz im ungünstigsten Fall kommt aber vom Interrupt-Controller Ihrer Plattform, ihrem DMA-Verhalten und den anderen Peripheriegeräten am selben Bus. Die Optimierung wird deshalb auf Ihrer Hardware unter Ihrer Last gemessen und nicht aus einer allgemeinen Konfiguration übernommen.
Was passiert beim Wechsel von einer Windows-IoT-LTSC-Version zur nächsten?
Die Konfiguration zur Systemhärtung wird für die neue Version neu aufgebaut und nicht übernommen, weil Unified Write Filter, Shell Launcher, Assigned Access und die übrigen Funktionen je Version neu konfiguriert werden. Außerdem sind die Treiber zu prüfen, denn ein Treiber, der für eine Version signiert und getestet wurde, ist ohne erneute Validierung auf der nächsten nicht gesichert.
Normen und Quellen
  • Microsoft Learn – NDIS-Treiberklassen, Timer-Auflösung und die Lebenszyklusdaten von Windows IoT Enterprise LTSC
  • openPOWERLINK, Dokumentation der Windows-Plattform – die erreichbaren Zykluszeiten eines reinen Software-Stacks im Vergleich zu einer Lösung mit NDIS-Miniport über PCIe
  • OSADL QA Farm – fortlaufende Latenzmessung von Echtzeit-Linux unter Last durch Timer, Speicher, Netz und Dateisystem
  • IEEE 802.1Qbv – zeitbasierte Ablaufsteuerung, die genormte Form des Launch-Time-Mechanismus, den diese Treiber ansteuern
Weiterlesen

Sollen wir das für Ihr Produkt einschätzen?

Lesen Sie zuerst unsere technischen Notizen oder sprechen Sie direkt mit dem Team, das die Arbeit übernimmt.