Linux 5.16-Kernel-Release

Nach zweimonatiger Entwicklungszeit präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 5.16. Zu den bemerkenswertesten Änderungen gehören: der Systemaufruf futex_waitv zur Verbesserung der Leistung von Windows-Spielen in Wine, Fehlerverfolgung im FS über Fanotify, das Konzept von Folios im Speicherverwaltungssystem, Unterstützung für AMX-Prozessoranweisungen, die Möglichkeit, Speicher für zu reservieren Netzwerk-Sockets, Unterstützung der Paketklassifizierung in der Phase des „Ausgangs“ des Netzfilters, Verwendung des DAMON-Subsystems zur proaktiven Entfernung ungenutzter Speicherbereiche, verbesserte Handhabung von Überlastungen bei einem großen Volumen an Schreibvorgängen, Unterstützung für Festplatten mit mehreren Laufwerken.

Die neue Version enthält 15415 Fixes von 2105 Entwicklern, die Patchgröße beträgt 45 MB (die Änderungen betrafen 12023 Dateien, 685198 Codezeilen wurden hinzugefügt, 263867 Zeilen wurden gelöscht). Etwa 44 % aller in 5.16 eingeführten Änderungen beziehen sich auf Gerätetreiber, etwa 16 % der Änderungen beziehen sich auf die Aktualisierung von Code, der für Hardwarearchitekturen spezifisch ist, 16 % beziehen sich auf den Netzwerkstapel, 4 % beziehen sich auf Dateisysteme und 4 % beziehen sich auf beziehen sich auf interne Kernel-Subsysteme.

Wichtige Neuerungen im Kernel 5.16:

  • Festplattensubsystem, E/A und Dateisysteme
    • Dem Fanotify-Mechanismus wurden Tools hinzugefügt, um den Status des Dateisystems zu überwachen und das Auftreten von Fehlern zu verfolgen. Informationen über Fehler werden mithilfe einer neuen Art von Ereignissen übermittelt – FAN_FS_ERROR, die in Überwachungssystemen, die im Benutzerbereich laufen, abgefangen werden können, um den Administrator umgehend zu informieren oder Wiederherstellungsprozesse zu starten. Wenn eine Reihe von Fehlern kaskadiert auftritt, stellt fanotify sicher, dass die erste Fehlermeldung zusammen mit einem allgemeinen Problemzähler übermittelt wird, um die anschließende Analyse der Fehlerursache zu vereinfachen. Die Unterstützung der Fehlerverfolgung ist derzeit nur für das Ext4-Dateisystem implementiert.
    • Verbesserte Handhabung von Schreibüberlastungen, die auftreten, wenn das Volumen der Schreibvorgänge den Durchsatz des Laufwerks übersteigt und das System gezwungen ist, die Schreibanforderungen eines Prozesses zu blockieren, bis die bereits übermittelten Anforderungen abgeschlossen sind. In der neuen Version wurde der Kernel-Mechanismus zum Erhalten von Informationen über das Auftreten von Überlastung und Blockierung von Aufgaben komplett neu gestaltet, da es in der alten Implementierung Probleme bei der Kopplung der Verarbeitung von Schreibüberlastungen mit der Verschiebung von Speicherseiten in den Swap gab Abschnitt, wenn nicht genügend Speicher im System vorhanden ist.
    • Btrfs implementiert die Unterstützung der Geräte-Zoning-Technologie (Zoned Namespace), die in Festplatten oder NVMe-SSDs verwendet wird, um den Speicherplatz in Zonen zu unterteilen, die Gruppen von Blöcken oder Sektoren bilden, in denen nur sequenzielles Hinzufügen von Daten zulässig ist, wodurch die gesamte Gruppe aktualisiert wird Blöcke. Darüber hinaus wurden kleinere Optimierungen am Inode-Logging vorgenommen, wodurch der Durchsatz im Dbench-Test um 3 % gesteigert und die Latenz um 11 % reduziert wurde. Der Verzeichnisprotokollierungsmechanismus wurde neu gestaltet, wobei die Anzahl der Such- und Blockierungsvorgänge im Baum reduziert wurde, um die Effizienz zu steigern. Das Einfügen von Elementen in die Btree-Struktur im Batch-Modus wurde beschleunigt (die Zeit für das Masseneinfügen von Elementen wurde um 4 % und das Löschen um 12 % verkürzt). Eingeschränkte Unterstützung für die Verwendung der Komprimierung beim Schreiben von Teilseiten sowie die Möglichkeit zur Defragmentierung von Unterseiten hinzugefügt. Es wurden Vorbereitungen getroffen, um die Unterstützung der zweiten Version des Protokolls für den „send“-Befehl zu ermöglichen.
    • Das XFS-Dateisystem reduziert den Speicherverbrauch, indem es separate Slab-Caches für häufig verwendete Elemente verwendet und einige Datenstrukturen reduziert.
    • Im Ext4-Dateisystem werden nur Fehlerbehebungen und eine genauere Berechnung der Lazy-Initialisierungsparameter der Inode-Tabelle erwähnt.
    • Auf Blockgeräteebene wurden Optimierungen implementiert, um die Effizienz der Verknüpfung von Vorgängen mit CPU-Kernen deutlich zu steigern.
    • Anfängliche Unterstützung für Festplatten mit mehreren unabhängigen Laufwerken (Multi-Aktuator) hinzugefügt, wodurch der gleichzeitige Zugriff auf mehrere Sektoren in verschiedenen Bereichen der Magnetplatte möglich ist.
    • Ein neuer ioctl-Befehl CDROM_TIMED_MEDIA_CHANGE wurde hinzugefügt, um Medienwechselereignisse in einem optischen Laufwerk zu erkennen.
    • Das EROFS-Dateisystem (Enhanced Read-Only File System) bietet die Möglichkeit, auf mehreren Speichergeräten zu arbeiten. Verschiedene Geräte können einem einzelnen 32-Bit-Blockadressraum zugeordnet werden. Unterstützung für die Komprimierung mit dem LZMA-Algorithmus wurde ebenfalls hinzugefügt.
    • Dem F2FS-Dateisystem wurden Bereitstellungsoptionen hinzugefügt, um die Dateifragmentierung beim Ablegen im Speicher zu steuern (z. B. um Optimierungen für die Arbeit mit fragmentiertem Speicher zu debuggen).
    • CEPH ermöglicht standardmäßig das asynchrone Erstellen und Löschen von Verzeichnissen (verwenden Sie beim Mounten das Flag „-o wsync“, um zum alten Verhalten zurückzukehren). Wartung von Metriken hinzugefügt, die Kopiervorgänge externer Objekte verfolgen.
    • Zu CIFS wurde ein tcpnodelay-Mount-Parameter hinzugefügt, der den tcp_sock_set_nodelay-Modus für den Netzwerk-Socket festlegt, wodurch das Warten darauf, dass die Warteschlange den TCP-Stack füllt, deaktiviert wird. Unterstützung für verschachtelte DFS-Links (Distributed File System) beim erneuten Mounten hinzugefügt.
    • Unterstützung für das Abschließen von Anforderungen an ein Blockgerät im Batch-Modus hinzugefügt. Tests der Änderung zeigten einen Anstieg der Intensität zufälliger Lesevorgänge von Optane-Laufwerken von 6.1 auf 6.6 Millionen IOPS auf einem einzelnen CPU-Kern.
  • Speicher- und Systemdienste
    • Es wurde ein neuer Systemaufruf futex_waitv hinzugefügt, der es Ihnen ermöglicht, den Status mehrerer Futexes gleichzeitig mit einem einzigen Systemaufruf zu überwachen. Diese Funktion erinnert an die in Windows verfügbare WaitForMultipleObjects-Funktionalität, deren Emulation über futex_waitv nützlich sein kann, um die Leistung von Windows-Spielen zu verbessern, die unter Wine oder Proton laufen. Darüber hinaus kann das gleichzeitige Warten auf Futexes auch dazu genutzt werden, die Leistung nativer Spiele-Builds für Linux zu optimieren.
    • Das Konzept der Seitenfolios wurde implementiert, dessen Verwendung in einigen Kernel-Subsystemen die Speicherverwaltung bei typischen Arbeitslasten beschleunigt. Derzeit wurden das Hauptspeicherverwaltungssubsystem im Kernel und die Implementierung des Seitencaches bereits auf Folios übertragen, und die Übertragung von Dateisystemen ist für die Zukunft geplant. Zukünftig ist auch geplant, den Kernel um Unterstützung für mehrseitige Folios zu erweitern.

      Wälzer ähneln zusammengesetzten Seiten, verfügen jedoch über eine verbesserte Semantik und eine klarere Arbeitsorganisation. Zur Verwaltung des Systemspeichers wird der verfügbare RAM in Speicherseiten unterteilt, deren Größe je nach Architektur variiert, auf x86-Systemen jedoch in Kilobyte (normalerweise 4096 Byte) gemessen wird. Moderne Systeme verfügen über Dutzende Gigabyte RAM, was die Speicherverwaltung komplexer macht, da eine große Anzahl von Speicherseiten verarbeitet werden muss. Um die Anzahl der Seiten zu reduzieren, implementierte der Kernel zuvor das Konzept zusammengesetzter Seiten mit Strukturen, die sich über mehr als eine physische Speicherseite erstrecken. Doch die API zur Bearbeitung zusammengeführter Speicherseiten ließ zu wünschen übrig und führte zu zusätzlichem Overhead.

    • Dem Taskplaner wurde ein Handler hinzugefügt, der Cache-Clustering auf der CPU berücksichtigt. Bei einigen Prozessoren wie Kunpeng 920 (ARM) und Intel Jacobsville (x86) kann eine bestimmte Anzahl von CPU-Kernen, normalerweise 4, L3- oder L2-Cache kombinieren. Die Berücksichtigung solcher Topologien kann die Effizienz der Aufgabenverteilung auf CPU-Kerne im Taskplaner erheblich verbessern, da das Verschieben von Aufgaben innerhalb desselben CPU-Clusters eine Erhöhung des Speicherzugriffsdurchsatzes und eine Reduzierung von Cache-Konflikten ermöglicht.
    • Unterstützung für AMX-Anweisungen (Advanced Matrix Extensions) hinzugefügt, die in den kommenden Intel Xeon Scalable-Serverprozessoren mit dem Codenamen Sapphire Rapids implementiert sind. AMX bietet neue konfigurierbare TMM-„TILE“-Register und Anweisungen zum Bearbeiten von Daten in diesen Registern, wie z. B. TMUL (Tile Matrix MULtiply) für die Matrixmultiplikation.
    • Basierend auf dem in der letzten Version hinzugefügten DAMON-Subsystem (Data Access MONitor) wurden mehrere neue Funktionen implementiert, mit denen Sie den Zugriff auf Daten im RAM in Bezug auf den ausgewählten Prozess überwachen können, der im Benutzerbereich ausgeführt wird. Das Subsystem ermöglicht beispielsweise die Analyse, auf welche Speicherbereiche der Prozess während seines gesamten Betriebs zugegriffen hat und welche Speicherbereiche nicht beansprucht wurden.
      • DAMON_RECLAIM zum Identifizieren und Entfernen von Speicherbereichen, auf die nicht zugegriffen wurde. Der Mechanismus kann verwendet werden, um Speicherseiten proaktiv sanft zu entfernen, wenn der freie Speicher fast erschöpft ist.
      • DAMOS (Data Access Monitoring-based Operation Schemes) zur Anwendung spezifizierter madvise()-Operationen, wie etwa der Freigabe von zusätzlichem freien Speicher, auf Prozessspeicherbereiche, für die eine bestimmte Häufigkeit des Speicherzugriffs festgelegt ist. DAMOS-Parameter werden über debugfs konfiguriert.
      • Möglichkeit zur Überwachung des physischen Adressraums des Speichers (zuvor konnten nur virtuelle Adressen überwacht werden).
    • Die Implementierung des zstd-Komprimierungsalgorithmus wurde auf Version 1.4.10 aktualisiert, wodurch die Leistung verschiedener Kernel-Subsysteme, die Komprimierung verwenden, erheblich verbessert wurde (z. B. wurde das Entpacken eines Kernel-Images um 35 % beschleunigt, die Leistung beim Entpacken komprimierter Daten wurde um 15 % beschleunigt). in Btrfs und SquashFS ist um 30 % und in ZRAM um 1.3.1 % gestiegen. Der Kernel verwendete zunächst eine separate Implementierung von zstd, basierend auf Version XNUMX, die vor über drei Jahren veröffentlicht wurde und nicht viele wichtige Optimierungen enthielt. Neben der Umstellung auf die aktuelle Version vereinfacht der hinzugefügte Patch auch die Synchronisierung mit dem zstd-Upstream-Zweig, sodass Sie Code für die Aufnahme in den Kernel direkt aus dem Haupt-zstd-Repository generieren können. Zukünftig soll der ZSTD-Code im Kernel aktualisiert werden, wenn neue Versionen der ZSTD-Bibliothek veröffentlicht werden.
    • Am eBPF-Subsystem wurden viele Verbesserungen vorgenommen. Es wurde die Möglichkeit hinzugefügt, Kernelmodulfunktionen aus BPF-Programmen aufzurufen. Im Gegensatz zu bpf_trace_printk() wurde die Funktion bpf_trace_vprintk() implementiert, mit der Sie mehr als drei Argumente gleichzeitig ausgeben können. Es wurde ein neuer Bloom-Filter für die Datenspeicherstruktur (BPF-Map) hinzugefügt, mit dem Sie die gleichnamige probabilistische Datenstruktur verwenden können, um das Vorhandensein eines Elements in der Menge zu bestimmen. Es wurde ein neues Attribut BTF_KIND_TAG hinzugefügt, mit dem in BPF-Programmen Tags an Funktionsparameter gebunden werden können, um beispielsweise die Erkennung von Fehlern in Benutzerprogrammen zu vereinfachen. In libbpf ist es möglich, eigene .rodata.*/.data.*-Abschnitte zu erstellen, Unterstützung für uprobe- und kprobe-Trace-Ereignisse wurde implementiert und eine API zum Kopieren aller BTF-Typen von einem Objekt in ein anderes hinzugefügt. Die AF_XDP-Unterstützung wurde von libbpf in eine separate libxdp-Bibliothek verschoben. Für die MIPS-Architektur wurde ein JIT-Compiler für die virtuelle BPF-Maschine implementiert.
    • Für die ARM64-Architektur wurde Unterstützung für ARMv8.6-Erweiterungen für den Timer implementiert, einschließlich solcher, die eine selbstsynchronisierende Darstellung von Systemregistern ohne Verwendung von ISB-Anweisungen ermöglichen.
    • Für die PA-RISC-Architektur wurde die Möglichkeit implementiert, den KFENCE-Mechanismus zur Fehlererkennung bei der Arbeit mit dem Speicher zu verwenden, und Unterstützung für den KCSAN-Race-Condition-Detektor wurde hinzugefügt.
    • Es ist möglich, Zugriffsrechte auf Tracefs auf der Ebene einzelner Benutzer und Gruppen zu konfigurieren; Sie können jetzt beispielsweise den Zugriff auf Tracing-Tools nur Mitgliedern einer bestimmten Gruppe gewähren.
  • Virtualisierung und Sicherheit
    • Die Subsysteme io_uring und device-mapper implementieren Unterstützung für die Generierung von Prüfereignissen. io_uring bietet die Möglichkeit, den Zugriff über LSM-Module zu steuern. Es wurde die Möglichkeit hinzugefügt, den Systemaufruf openat2() zu prüfen.
    • Der Kernel-Code ist völlig frei von fortlaufenden Case-Anweisungen in Switch (kein Return oder Break nach jedem Case-Block). Beim Erstellen des Kernels kann nun der Modus „-Wimplicit-fallthrough“ verwendet werden.
    • Enthaltene Änderungen zur Verschärfung der Grenzprüfungen beim Ausführen der memcpy()-Funktion.
    • Die asynchrone E/A-Schnittstelle io_uring implementiert die Möglichkeit, von den SELinux- und Smack-Modulen definierte Sicherheitsrichtlinien auf E/A-Vorgänge anzuwenden.
    • Das IMA-Subsystem (Integrity Measurement Architecture), das es einem externen Dienst ermöglicht, den Status von Kernel-Subsystemen zu überprüfen, um deren Authentizität sicherzustellen, implementiert die Möglichkeit, Regeln basierend auf der Gruppenkennung (GID) anzuwenden, zu der die Datei gehört oder zu der der Benutzer gehört Der Zugriff auf die Datei gehört.
    • Standardmäßig wurden einige erweiterte Mechanismen zum Schutz von seccomp()-Threads vor Spectre-Angriffen deaktiviert, die als unnötig angesehen wurden und die Sicherheit nicht wesentlich verbesserten, sich jedoch negativ auf die Leistung auswirkten. Die Anwendung des Retpoline-Schutzes wurde überarbeitet.
    • Die Implementierung des Cryptoloop-Mechanismus wurde entfernt, der 2004 durch dm-crypt ersetzt wurde und bei Bedarf die gleichen Algorithmen unterstützt.
    • Standardmäßig ist der unprivilegierte Zugriff auf das eBPF-Subsystem verboten. Die Änderung wurde vorgenommen, um zu verhindern, dass BPF-Programme zur Umgehung des Schutzes vor Seitenkanalangriffen verwendet werden. Bei Bedarf kann der Administrator die Möglichkeit für nicht privilegierte Benutzer wiederherstellen, eBPF zu verwenden.
    • Der ACRN-Hypervisor, der für Echtzeitaufgaben und den Einsatz in unternehmenskritischen Systemen entwickelt wurde, bietet zusätzliche Unterstützung für das Erstellen/Löschen virtueller Geräte und die Weiterleitung von MMIO-Geräten.
    • Der Krypto-Engine wurde Unterstützung für KPP-Definitionen (Key-Agreement Protocol Primitives) hinzugefügt, wodurch die Logik der Entwicklung von Treibern für Kryptosysteme vereinfacht wird.
    • Der Hyper-V-Hypervisor unterstützt jetzt den Isolationsmodus der virtuellen Maschine, der die Verschlüsselung von Speicherinhalten beinhaltet.
    • Der KVM-Hypervisor hat Unterstützung für die RISC-V-Architektur hinzugefügt. Die Möglichkeit, virtuelle Maschinen, die mit den AMD SEV- und SEV-ES-Erweiterungen ausgeführt werden, innerhalb der Host-Umgebung zu migrieren, wurde implementiert. API für Live-Migration von Gastsystemen hinzugefügt, die mit AMD SEV (Secure Encrypted Virtualization) verschlüsselt sind.
    • Für die PowerPC-Architektur ist standardmäßig der STRICT_KERNEL_RWX-Modus aktiviert, der die Verwendung von Speicherseiten blockiert, die gleichzeitig zum Schreiben und Ausführen verfügbar sind.
    • Auf 32-Bit-x86-Systemen wurde die Unterstützung für Speicher-Hotplug eingestellt, der seit mehr als einem Jahr nicht mehr funktioniert.
    • Die liblockdep-Bibliothek wurde aus dem Kernel entfernt und wird nun getrennt vom Kernel verwaltet.
  • Netzwerk-Subsystem
    • Für Sockets wurde eine neue Option SO_RESERVE_MEM implementiert, mit der Sie für einen Socket eine bestimmte Menge an Speicher reservieren können, die immer für den Socket verfügbar bleibt und nicht entfernt wird. Mit dieser Option können Sie eine höhere Leistung erzielen, indem Sie die Speicherzuweisung und die Rückgewinnungsvorgänge im Netzwerkstapel reduzieren, insbesondere wenn im System wenig Speicher auftritt.
    • Unterstützung für das Automatic Multicast Tunneling (RFC 7450)-Protokoll hinzugefügt, das die Bereitstellung von Multicast-Verkehr von Netzwerken, die Multicast unterstützen, an Empfänger in Netzwerken ohne Multicast ermöglicht. Das Protokoll funktioniert durch Kapselung in UDP-Paketen.
    • Verbesserte Kapselung von IOAM-Daten (In-situ Operations, Administration und Maintenance) in Transitpaketen.
    • Der ethtool-Netlink-API wurde die Möglichkeit hinzugefügt, die Stromverbrauchsmodi des Transceivers zu steuern.
    • Das Netfilter-Subsystem implementiert die Fähigkeit, Pakete auf der Ausgangsebene zu klassifizieren, d. h. in der Phase, in der der Treiber ein Paket vom Kernel-Netzwerkstapel empfängt. In nftables erschien die Unterstützung für die entsprechenden Filter in Version 1.0.1. Netfilter hat die Möglichkeit hinzugefügt, interne Header und Daten für UDP und TCP (innerer Header/Nutzlast) zu vergleichen und zu ändern, die nach dem Transport-Header folgen.
    • Neue Sysctl-Parameter arp_evict_nocarrier und ndisc_evict_nocarrier hinzugefügt. Wenn diese festgelegt sind, werden der ARP-Cache und die Ndisc-Tabelle (Neighbor Discovery) im Falle eines Verbindungsfehlers (NOCARRIER) gelöscht.
    • Dem Netzwerkwarteschlangenverwaltungsmechanismus fq_codel (Controlled Delay) wurden die Modi „Low Latency“, „Low Loss“ und „Scalable Throughput“ (L4S) hinzugefügt.
  • Ausrüstung
    • Der amdgpu-Treiber bietet anfängliche Unterstützung für die DP 2.0-Spezifikation (DisplayPort 2.0) und DisplayPort-Tunneling über USB4. Für Cyan Skillfish APUs (ausgestattet mit GPU Navi 1x) wurde Unterstützung für Display-Controller hinzugefügt. Die Unterstützung für Yellow Carp APUs (Ryzen 6000 „Rembrandt“ Mobilprozessoren) wurde erweitert.
    • Der i915-Treiber stabilisiert die Unterstützung für Intel Alderlake S-Chips und implementiert die Unterstützung für die Intel PXP-Technologie (Protected Xe Path), mit der Sie eine hardwaregeschützte Grafiksitzung auf Systemen mit Intel Xe-Chips organisieren können.
    • Am Nouveau-Treiber wurde daran gearbeitet, Fehler zu beheben und den Codestil zu verbessern.
    • Unterstützung für x86-kompatible Vortex-CPUs (Vortex86MX) hinzugefügt. Linux hat bereits zuvor auf ähnlichen Prozessoren funktioniert, allerdings war eine explizite Identifizierung der angegebenen CPUs erforderlich, um den Schutz vor Spectre/Meltdown-Angriffen zu deaktivieren, die auf die angegebenen Chips nicht anwendbar sind.
    • Erste Unterstützung für x86-Plattformen für Surface Pro 8 und Surface Laptop Studio hinzugefügt.
    • Treiber zur Unterstützung von Soundchips hinzugefügt, die in AMD Yellow Carp, Van Gogh APUs verwendet werden, sowie Unterstützung für Soundsysteme 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.
    • Ishtp_eclite-Treiber hinzugefügt, um über ISHTP (Integratd Sensor Hub Transport Protocol) auf eingebettete Intel PSE-Controller (Programmable Service Engine) zuzugreifen, z. B. Batterie, Temperatur und UCSI-bezogene Informationsschnittstelle (USB Type-C Connector System Software).
    • Es wurde ein Treiber für Nintendo Switch-Gamecontroller hinzugefügt, der Switch Pro und Joy-Cons unterstützt. Unterstützung für Wacom Intuos BT-Tablets (CTL-4100WL/CTL-6100WL) und Apple 2021 Magic Keyboard hinzugefügt. Verbesserte Unterstützung für Sony PlayStation DualSense-Controller. Unterstützung für die Seitentasten der Xiaomi Mi-Maus hinzugefügt.
    • RT89-Treiber mit Unterstützung für Realtek 802.11ax-Wireless-Chips sowie Treiber für Asix AX88796C-SPI-Ethernet-Adapter und Realtek RTL8365MB-VC-Switches hinzugefügt.
    • Für Apple M1-Chips wurden Treiber für PCI und PASemi i2c hinzugefügt.
    • Unterstützung für ARM SoС, Geräte und Boards hinzugefügt: 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 RK1, RK1000 ROCK Pi 966A+, RK5000 ROCK Pi 5B+, Firefly ROC-RK5-PC, Firefly ROC-RK7-PC-PLUS, ASUS Chromebook Tablet CT5, Pine9 Quartz3566-A, Netgear GS3399EMX, Globalscale MOCHAbin 4, NXP S3399G4, Ren esas R3328A3399M*, Xilinx Kria, Radxa Zero, JetHub D100/H64, Netronix E64K110.

Source: opennet.ru

Kommentar hinzufügen