Release des Linux-Kernels 5.16

Nach zwei Monaten Entwicklung präsentierte Linus Torvalds das Release des Linux-Kernels 5.16. Zu den bemerkenswertesten Änderungen gehören: der Systemaufruf futex_waitv zur Verbesserung der Windows-Spiel-Performance in Wine, Fehlerverfolgung im Dateisystem über fanotify, das Konzept der Folios im Speichermanagement, Unterstützung der AMX-Prozessoranweisungen, die Möglichkeit der Speicherreservierung für Netzwerksockets, Unterstützung der Klassifikation von Paketen in netfilter in der Egress-Phase sowie der Einsatz des DAMON-Subsystems zur proaktiven Entfernung ungenutzter Speicherbereiche und Verbesserungen bei der Verarbeitung von Überlastungen bei hohem Schreibvolumen, sowie die Unterstützung von Multi-Drive-Festplatten.

In die neue Version wurden 15.415 Korrekturen von 2.105 Entwicklern aufgenommen, die Patchgröße beträgt 45 MB (Änderungen betreffen 12.023 Dateien, 685.198 Codezeilen wurden hinzugefügt und 263.867 Zeilen entfernt). Rund 44 % aller in 5.16 präsentierten Änderungen beziehen sich auf Gerätetreiber, etwa 16 % betreffen Aktualisierungen des Architektur-spezifischen Codes, 16 % sind mit dem Netzwerk-Stack verbunden, 4 % mit Dateisystemen und 4 % mit internen Kernel-Subsystemen.

Wesentliche Neuerungen im Kern 5.16:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Im fanotify-Mechanismus wurden Funktionen zur Überwachung des Zustands des Dateisystems und zur Verfolgung von Fehlern hinzugefügt. Informationen über Fehler werden durch einen neuen Ereignistyp — FAN_FS_ERROR — übermittelt, der in den User-Space-Monitoring-Systemen abgefangen werden kann, um den Administrator schnell zu informieren oder Wiederherstellungsprozesse zu starten. Bei einer kaskadierenden Reihe von Fehlern gewährleistet fanotify die Zustellung einer Meldung über den ersten Fehler zusammen mit einer Gesamtsumme der Probleme, um die anschließende Analyse der Ausfallursachen zu erleichtern. Die Unterstützung zur Verfolgung von Fehlern ist derzeit nur für das Ext4-Dateisystem implementiert.
    • Die Verarbeitung von Schreibüberlastungen (write congestion) wurde verbessert. Diese Überlastungen treten auf, wenn das Volumen der Schreiboperationen die Kapazität des Speichermediums übersteigt und das System gezwungen ist, Schreibanfragen vorübergehend zu blockieren, bis die bereits getätigten Anfragen abgeschlossen sind. In der neuen Version wurde der Mechanismus des Kerns vollständig überarbeitet, der zur Erfassung von Informationen über das Auftreten von Überlastungen und die Blockierung von Aufgaben verwendet wird, da in der alten Implementierung Probleme bei der Synchronisierung der Verarbeitung von Schreibüberlastungen mit dem Auslagern von Speicherseiten in den Swap-Bereich bei unzureichendem Arbeitsspeicher im System auftraten.
    • Btrfs unterstützt die Technologie der Gerätezonierung (Zoned Namespace), die in Festplatten oder NVMe-SSDs verwendet wird, um den Speicherplatz in Zonen zu unterteilen. Diese Zonen bestehen aus Gruppen von Blöcken oder Sektoren, in die Daten nur sequenziell hinzugefügt werden dürfen, wobei die gesamte Gruppe von Blöcken aktualisiert wird. Zusätzlich wurden kleine Verbesserungen beim Inode-Logging vorgenommen, die eine Steigerung der Durchsatzrate im dbench-Test um 3 % und eine Reduzierung der Latenz um 11 % ermöglichten. Der Mechanismus für das Verzeichnis-Logging wurde überarbeitet, wobei die Anzahl der Suchvorgänge und Sperren im Baum zur Effizienzsteigerung reduziert wurde. Das Einfügen von Elementen in die btree-Struktur im Batch-Modus wurde beschleunigt (die Zeit für Masseneinfügungen verkürzte sich um 4 %, die für Löschvorgänge um 12 %). Eine eingeschränkte Unterstützung für die Komprimierung beim Schreiben unvollständiger Seiten wurde hinzugefügt, sowie die Möglichkeit zur Defragmentierung von Unterseiten (subpage). Vorbereitungen wurden getroffen, um die Unterstützung der zweiten Version des Protokolls für den Befehl „send“ zu aktivieren.
    • Im XFS-Dateisystem wurde der Speicherbedarf durch die Verwendung separater Slab-Caches für häufig verwendete Elemente und die Reduzierung bestimmter Datenstrukturen verringert.
    • Im Ext4-Dateisystem wurden lediglich Fehlerkorrekturen und eine genauere Berechnung der Parameter für die verzögerte Initialisierung der Inode-Tabelle vorgenommen.
    • Auf der Ebene der Blockgeräte wurden Optimierungen implementiert, die die Effizienz der Zuordnung von Operationen zu CPU-Kernen erheblich steigern.
    • Es wurde eine erste Unterstützung für Festplatten mit mehreren unabhängigen Antrieben (Multi-Actuator) hinzugefügt, die es ermöglichen, gleichzeitig auf mehrere Sektoren in verschiedenen Bereichen der magnetischen Platte zuzugreifen.
    • Ein neuer ioctl-Befehl CDROM_TIMED_MEDIA_CHANGE wurde hinzugefügt, um Ereignisse des Medienwechsels im optischen Laufwerk zu erkennen.
    • Im EROFS-Dateisystem (Enhanced Read-Only File System) wurde die Möglichkeit hinzugefügt, über mehrere Speichereinheiten zu arbeiten. Verschiedene Geräte können in einem 32-Bit-Adressraum von Blöcken abgebildet werden. Außerdem wurde die Unterstützung für die Kompression mit dem LZMA-Algorithmus hinzugefügt.
    • Im F2FS wurden Mount-Optionen hinzugefügt, um die Fragmentierung von Dateien beim Speichern im Speicher zu steuern (z. B. zur Fehlersuche bei den Optimierungen für fragmentierte Speicher).
    • In CEPH sind standardmäßig die Operationen zum Erstellen und Löschen von Verzeichnissen im asynchronen Modus aktiviert (um das alte Verhalten wiederherzustellen, sollte beim Mounten das Flag '-o wsync' verwendet werden). Das Tracking von Metriken für Operationen zum Kopieren externer Objekte wurde hinzugefügt.
    • CIFS hat den Mount-Parameter tcpnodelay hinzugefügt, bei dem für den Netzwerksocket der Modus tcp_sock_set_nodelay aktiviert wird, der das Warten auf das Füllen der Warteschlange im TCP-Stack deaktiviert. Unterstützung für verschachtelte DFS-Links (Distributed File System) beim Remounting wurde hinzugefügt.
    • Unterstützung für das Beenden von Anfragen an Blockgeräte im Batch-Modus wurde hinzugefügt. Tests der Änderung zeigten eine Steigerung der Intensität von zufälligen Lesevorgängen von Optane-Speichermedien von 6,1 auf 6,6 Millionen IOPS auf einem CPU-Kern.
  • Speicher und Systemdienste
    • Ein neuer Systemaufruf futex_waitv wurde hinzugefügt, der es ermöglicht, den Zustand mehrerer Futexes mit einem einzigen Systemaufruf zu überwachen. Diese Funktionalität erinnert an die in Windows verfügbare Funktion WaitForMultipleObjects, deren Emulation über futex_waitv nützlich sein kann, um die Leistung von unter Wine oder Proton ausgeführten Windows-Spielen zu verbessern. Darüber hinaus kann das gleichzeitige Warten auf Futexe auch zur Optimierung der Leistung nativer Linux-Spiele verwendet werden.
    • Das Konzept der Seitenfolianten (page folios) wurde implementiert, dessen Verwendung in bestimmten Subsystemen des Kernels eine schnellere Speicherverwaltung unter typischen Lasten ermöglichen wird. Der Hauptspeicherverwaltungssubsystem im Kernel und die Implementierung des Seiten-Cache sind bereits auf Folien umgestellt, und in Zukunft ist eine Übertragung der Dateisysteme geplant. Zukünftig wird auch die Unterstützung von mehrseitigen Folien im Kernel hinzugefügt.

      Folianten ähneln zusammengefassten Speicherseiten (compound pages), zeichnen sich jedoch durch eine verbesserte Semantik und eine klarere Arbeitsorganisation aus. Für das Management des Systemspeichers wird der verfügbare RAM in Speicherseiten unterteilt, deren Größe von der Architektur abhängt, aber auf x86-Systemen in Kilobytes gemessen wird (gewöhnlich 4096 Bytes). Moderne Systeme verfügen über Dutzende von Gigabyte RAM, was die Speicherverwaltung aufgrund der Notwendigkeit, eine riesige Anzahl von Speicherseiten zu bearbeiten, erschwert. Um die Anzahl der Seiten zu reduzieren, wurde im Kernel zuvor das Konzept der zusammengefassten Seiten (compound pages) umgesetzt, mit Strukturen, die mehr als eine physische Speicherseite umfassen. Allerdings ließ die API zur Manipulation von zusammengefassten Seiten zu wünschen übrig und führte zu zusätzlichen Overheadkosten.

    • Der Task-Planer hat einen Handler erhalten, der die Cache-Klusterung in der CPU berücksichtigt. In einigen Prozessoren, wie dem Kunpeng 920 (ARM) und dem Intel Jacobsville (x86), kann eine bestimmte Anzahl von CPU-Kernen, typischerweise 4, den L3 oder L2 Cache kombinieren. Die Berücksichtigung solcher Topologien kann die Effizienz der Aufgabenverteilung auf die CPU-Kerne im Task-Planer erheblich steigern, da das Verschieben von Aufgaben innerhalb eines CPU-Clusters die Speicherzugriffsbandbreite erhöht und die Cache-Konkurenz verringert.
    • Die Unterstützung für AMX-Befehle (Advanced Matrix Extensions) wurde hinzugefügt, die in den kommenden Intel Xeon Scalable Server-Prozessoren unter dem Codenamen Sapphire Rapids implementiert werden. AMX bietet neue konfigurierbare TMM-Register „TILE“ und Befehle zur Datenmanipulation in diesen Registern, wie TMUL (Tile Matrix MULtiply) für die Matrixmultiplikation.
    • Es wurden mehrere neue Funktionen implementiert, die auf dem im letzten Release eingeführten DAMON (Data Access MONitor) basieren. Dieser ermöglicht das Tracking des Zugriffs auf Daten im Arbeitsspeicher in Bezug auf den ausgewählten Prozess im Benutzerspace. Beispielsweise kann das Subsystem analysieren, auf welche spezifischen Speicherbereiche der Prozess während seiner gesamten Laufzeit zugegriffen hat und welche Bereiche ungenutzt geblieben sind.
      • DAMON_RECLAIM zur Identifizierung und Auslagerung von Speicherbereichen, auf die nicht zugegriffen wurde. Der Mechanismus kann verwendet werden, um proaktiv weich Seiten im Speicher auszulagern, wenn sich der freie Speicher dem Ende zuneigt.
      • DAMOS (Data Access Monitoring-based Operation Schemes) zur Anwendung vorgegebener Operationen wie madvise(), um zusätzlichen freien Speicher in den Speicherbereichen eines Prozesses freizugeben, für die eine bestimmte Zugriffsfrequenz auf den Speicher aufgezeichnet wird. Die Parameter von DAMOS können über debugfs konfiguriert werden.
      • Möglichkeit zur Überwachung des physischen Adressraums im Speicher (zuvor konnten nur virtuelle Adressen verfolgt werden).
    • Die Implementierung des zstd-Komprimierungsalgorithmus wurde auf Version 1.4.10 aktualisiert, was zu einer merklichen Leistungssteigerung der verschiedenen Kernunterstützungssysteme geführt hat, in denen die Komprimierung eingesetzt wird (z. B. wurde die Entpackgeschwindigkeit des Kernimages um 35 % erhöht, die Leistungsfähigkeit der Entpackung komprimierter Daten in Btrfs und SquashFS stieg um 15 %, und bei ZRAM um 30 %). Zuvor wurde im Kernel eine separate Implementierung von zstd verwendet, die auf Version 1.3.1 basierte, die vor mehr als drei Jahren veröffentlicht wurde und viele wichtige Optimierungen nicht enthielt. Neben der Aktualisierung auf die neueste Version erleichtert der hinzugefügte Patch auch die Synchronisation mit dem Upstream-Branch von zstd, was die direkte Generierung von Code zur Integration in den Kernel aus dem Hauptrepository von zstd ermöglicht. In Zukunft ist geplant, den zstd-Code im Kernel mit der Veröffentlichung neuer Versionen der zstd-Bibliothek zu aktualisieren.
    • Eine umfassende Reihe von Verbesserungen wurde im eBPF-Unterstützungssystem eingeführt. Es wurde die Möglichkeit hinzugefügt, Funktionen von Kernelmodulen aus BPF-Programmen aufzurufen. Zudem wurde die Funktion bpf_trace_vprintk() implementiert, die im Gegensatz zu bpf_trace_printk() eine Ausgabe von mehr als drei Argumenten auf einmal ermöglicht. Eine neue Datenspeicherstruktur (BPF-Map) namens Bloom-Filter wurde hinzugefügt, die eine probabilistische Datenstruktur bietet, um die Existenz eines Elements in einer Menge festzustellen. Ein neuer Attributtyp BTF_KIND_TAG wurde eingeführt, der in BPF-Programmen verwendet werden kann, um Tags mit Funktionsparametern zu verknüpfen, was die Fehlersuche in Benutzerprogrammen vereinfacht. In libbpf wurde die Erstellung eigener Sektionen .rodata.* und .data.* ermöglicht, die Unterstützung für Uprobe- und Kprobe-Tracing-Ereignisse implementiert und eine API zum Kopieren aller BTF-Typen von einem Objekt zu einem anderen bereitgestellt. Die Unterstützung von AF_XDP wurde aus libbpf in die separate Bibliothek libxdp übertragen. Für die MIPS-Architektur wurde ein JIT-Compiler für die BPF-virtuelle Maschine realisiert.
    • Für die ARM64-Architektur wurde die Unterstützung für ARMv8.6-Erweiterungen für Timer implementiert, die unter anderem die Selbstsynchronisation der systemregistrierten Ansichten ohne Verwendung von ISB-Instruktionen ermöglichen.
    • Für die PA-RISC-Architektur wurde die Möglichkeit implementiert, den KFENCE-Mechanismus zur Erkennung von Speicherkorrekturfehlern zu verwenden, und die Unterstützung für den KCSAN-Race-Condition-Detektor wurde hinzugefügt.
    • Es wurde die Möglichkeit geschaffen, Berechtigungen für tracefs auf Benutzerebene und Gruppenebene anzupassen. Beispielsweise kann der Zugriff auf die Trace-Tools nun ausschließlich bestimmten Gruppenmitgliedern gestattet werden.
  • Virtualisierung und Sicherheit
    • In den Subsystemen io_uring und Device-Mapper wurde die Unterstützung für die Generierung von Audit-Ereignissen implementiert. In io_uring kann der Zugriff nun über LSM-Module gesteuert werden. Zudem wurde die Möglichkeit für das Auditing des Systemaufrufs openat2() hinzugefügt.
    • Der Kernel-Code wurde vollständig von den durchgehenden Case-Ausdrücken in Switch-Anweisungen befreit (ohne Return oder Break nach jedem Case-Block). Bei der Kernel-Erstellung kann nun der Modus „-Wimplicit-fallthrough“ verwendet werden.
    • Änderungen zur Verschärfung der Grenzkontrollen bei der Ausführung der memcpy()-Funktion wurden eingeführt.
    • Im Interface für asynchrone Ein-/Ausgabe io_uring wurde die Möglichkeit implementiert, Sicherheitsrichtlinien, die durch SELinux- und Smack-Module definiert sind, auf Ein-/Ausgabeoperationen anzuwenden.
    • Im IMA (Integrity Measurement Architecture)-Subsystem, das es externen Diensten ermöglicht, den Zustand der Kernel-Subsysteme zu überprüfen, um deren Authentizität sicherzustellen, wurde die Möglichkeit implementiert, Regeln basierend auf der Gruppen-ID (GID) anzuwenden, zu der die Datei gehört oder in die der Benutzer, der auf die Datei zugreift, gehört.
    • Einige erweiterte Schutzmechanismen des seccomp() gegen Spectre-Klassent attacks sind standardmäßig deaktiviert, da sie als überflüssig erachtet wurden und die Sicherheit nicht wesentlich erhöhten, während sie die Leistung negativ beeinflussten. Die Anwendung von Retpoline-Schutz wurde überprüft.
    • Die Implementierung des cryptoloop-Mechanismus wurde entfernt, da dm-crypt, das 2004 eingeführt wurde, diese Funktion ersetzt hat und bei Bedarf dieselben Algorithmen unterstützt.
    • Standardmäßig ist der unprivilegierte Zugriff auf das eBPF-Subsystem verboten. Diese Änderung wurde vorgenommen, um zu verhindern, dass BPF-Programme zum Umgehen von Schutzmaßnahmen gegen Kanalangriffe verwendet werden. Bei Bedarf kann der Administrator die Verwendung von eBPF durch unprivilegierte Benutzer erneut aktivieren.
    • Der Hypervisor ACRN, der für Echtzeitanwendungen und den Einsatz in kritischen Systemen entwickelt wurde, unterstützt nun die Erstellung/Löschung virtueller Geräte und die Durchleitung von MMIO-Geräten.
    • Der Krypto-Engine wurde die Unterstützung für KPP (Key-agreement Protocol Primitives) hinzugefügt, die die Logik für die Entwicklung von Treibern für Kryptosysteme vereinfachen.
    • Für den Hypervisor Hyper-V wurde der Isolationsmodus implementiert, virtuellen Maschinender die Verschlüsselung des Inhalts des Speichers ermöglicht.
    • Im Hypervisor KVM Unterstützung für die RISC-V-Architektur wurde hinzugefügt. Es besteht nun die Möglichkeit, VMs innerhalb einer Host-Umgebung zu migrieren, die mit AMD SEV und SEV-ES Erweiterungen betrieben werden. Ein API für die Live-Migration von Gastsystemen, die mit AMD SEV (Secure Encrypted Virtualization) verschlüsselt werden, wurde hinzugefügt.
    • Für die PowerPC-Architektur ist standardmäßig der STRIC_KERNEL_RWX-Modus aktiviert, der die gleichzeitige Schreib- und Ausführbarkeit von Speicherseiten blockiert.
    • Auf 32-Bit-x86-Systemen wurde die Unterstützung für Memory Hotplug, die über ein Jahr lang inaktiv war, eingestellt.
    • Die Bibliothek liblockdep wurde aus dem Kernel entfernt und wird nun separat vom Kernel gepflegt.
  • Netzwerksubsystem
    • Für Sockets wurde die neue Option SO_RESERVE_MEM eingeführt, mit der eine bestimmte Menge an Speicher reserviert werden kann, die stets für den Socket verfügbar bleibt und nicht entzogen wird. Die Verwendung dieser Option erhöht die Leistung, indem die Anzahl der Speicherzuweisungen und -freigaben im Netzwerk-Stack reduziert wird, insbesondere unter Bedingungen von Speichermangel im System.
    • Die Unterstützung für das Protokoll zur automatischen Tunnelung von Multicast-Traffic (Automatic Multicast Tunneling, RFC 7450) wurde hinzugefügt, das die Lieferung von Multicast-Traffic aus Multicast-fähigen Netzwerken an Empfänger in Netzwerken ohne Multicast ermöglicht. Das Protokoll arbeitet durch Kapselung in UDP-Paketen.
    • Die Kapselung von IOAM-Daten (In-situ Operations, Administration, and Maintenance) in Transitpaketen wurde verbessert.
    • Die Möglichkeit zur Verwaltung der Energieverbrauchsmodi von Sendern und Empfängern wurde der ethtool netlink API hinzugefügt.
    • Im netfilter-Subsystem wurde die Möglichkeit zur Klassifizierung von Paketen auf der Egress-Ebene implementiert, d.h. in der Phase, in der der Treiber ein Paket vom Netzwerk-Stack des Kernels empfängt. In nftables wurde die Unterstützung für entsprechende Filter in Version 1.0.1 hinzugefügt. Im netfilter wurde die Möglichkeit ergänzt, interne Header und Daten für UDP und TCP (inner header / payload) zuzuordnen und zu ändern, die nach dem Transport-Header (transport header) kommen.
    • Es wurden neue Sysctl-Parameter arp_evict_nocarrier und ndisc_evict_nocarrier hinzugefügt. Bei Aktivierung dieser Parameter wird der ARP-Cache und die ndisc-Tabelle (Neighbor Discovery) im Falle eines Verbindungsabbruchs (NOCARRIER) geleert.
    • Im Mechanismus zur Verwaltung von Netzwerkwarteschlangen fq_codel (Controlled Delay) wurden die Modi Low Latency, Low Loss und Scalable Throughput (L4S) hinzugefügt.
  • Ausrüstung
    • Im Treiber amdgpu wurde erste Unterstützung für die Spezifikation DP 2.0 (DisplayPort 2.0) und die Möglichkeit des Tunnelns von DisplayPort über USB4 implementiert. Für die APU Cyan Skillfish (ausgestattet mit GPU Navi 1x) wurde Unterstützung für Display-Controller hinzugefügt. Die Unterstützung für die APU Yellow Carp (mobile Prozessoren Ryzen 6000 „Rembrandt“) wurde erweitert.
    • Im i915-Treiber wurde die Unterstützung für Intel Alderlake S-Chips stabilisiert und die Unterstützung für die Intel PXP-Technologie (Protected Xe Path) implementiert, die einen hardwaregeschützten Grafiksitzung auf Systemen mit Intel Xe-Chips ermöglicht.
    • Im nouveau-Treiber wurden Fehlerbehebungen durchgeführt und der Code-Stil verbessert.
    • Es wurde Unterstützung für x86-kompatible CPUs Vortex (Vortex86MX) hinzugefügt. Linux lief bereits früher auf solchen Prozessoren, jedoch war eine klare Identifizierung dieser CPUs erforderlich, um die Schutzmaßnahmen gegen Spectre-/Meltdown-Angriffe zu deaktivieren, die für diese Chips nicht anwendbar sind.
    • Die anfängliche Unterstützung für x86-Plattformen wie Surface Pro 8 und Surface Laptop Studio wurde hinzugefügt.
    • Ein Treiber zur Unterstützung von Audiocontrollern, die in APU AMD Yellow Carp, Van Gogh verwendet werden, wurde hinzugefügt. Zudem wurde die Unterstützung für die Audio-Systeme und Codecs Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 und RK3568 implementiert.
    • Der Treiber ishtp_eclite wurde hinzugefügt, um auf die integrierten Intel PSE (Programmable Service Engine) Controller über das ISHTP-Protokoll (Integrated Sensor Hub Transport Protocol) zuzugreifen, beispielsweise um Daten über den Akku, die Temperatur und Informationen im Zusammenhang mit UCSI (USB Type-C Connector System Software Interface) zu erhalten.
    • Ein Treiber für Nintendo Switch-Spielecontroller wurde hinzugefügt, der die Switch Pro- und Joy-Con-Geräte unterstützt. Die Unterstützung für Wacom Intuos BT-Tablets (CTL-4100WL/CTL-6100WL) und die Apple 2021 Magic Keyboard wurde hinzugefügt. Die Unterstützung für Sony PlayStation DualSense-Controller wurde verbessert. Unterstützung für die seitlichen Maustasten der Xiaomi Mi wurde hinzugefügt.
    • Der RT89-Treiber mit Unterstützung für drahtlose Realtek 802.11ax-Chips sowie Treiber für Ethernet-Adapter Asix AX88796C-SPI und Realtek RTL8365MB-VC-Switches wurde hinzugefügt.
    • Für die Apple M1-Chips wurden Treiber für PCI und PASemi i2c hinzugefügt.
    • Unterstützung für ARM SoC, Geräte und Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s, Mi Mix, Mi 5s Plus und Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 und Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566, RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02 wurde hinzugefügt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster