Ein Kernelmodul für Ihr NAS bauen: der CH341-USB-Seriell-Treiber
Viele USB-Seriell-Adapter mit einem CH340- oder CH341-Chip benötigen den Kerneltreiber ch341. Auf dem hier gezeigten NAS mit QTS 6.1 fehlt er. Die Kernelwerkstatt von Bucket & Code Server IDE baut ein solches Modul für den laufenden Kernel des NAS, prüft es gegen diesen Kernel und lädt es.
- ProfilEigenschaften des Kernels
- Arbeitsbereichpassend konfigurierter Quellbaum
- Bauendrivers/usb/serial
- Prüfenvermagic, Layout, Symbole
- Ladendurch Admins, auf eigenes Risiko
Die Bilder stammen von einem NAS mit QTS 6.1 und Kernel 6.6.129-qnap. Alle Felder sind wie in dieser Anleitung beschrieben ausgefüllt.
01Was die Werkstatt macht
QNAPs öffentliches GPL-Archiv enthält Kernelquellen bis QTS 5.2.3, aber keine für den Kernel dieses NAS mit QTS 6.1. Die Werkstatt liest daher die Angaben des laufenden Kernels und konfiguriert einen Quellbaum von kernel.org entsprechend. Die Seite Kernels zeigt dieses Profil: Version, den von QNAP verwendeten Compiler, vermagic und das Layout von struct module in QNAPs Modulen sowie eine mögliche Signaturpflicht.
- Sie benötigen die Umgebung Kernel builder aus der Examples-Galerie (Apps → Examples): Ubuntu 24.04 mit GCC 13 und den Werkzeugen zum Kernelbau. Die Werkstatt verlangt dieselbe GCC-Hauptversion wie der laufende Kernel und prüft sie vor dem Vorbereiten des Arbeitsbereichs.
- Vorbereiten, Bauen und Laden erfordern die Adminrolle; Prüfen erfordert die Entwicklerrolle. Im Terminal des Editors, das als root läuft, entsprechen diese Schritte den Befehlen
bvs kernel.
02Arbeitsbereich vorbereiten
Der Arbeitsbereich ist ein Quellbaum für genau den laufenden Kernel unter kernels/<release> im Datenordner. Klicken Sie auf der Seite Kernels auf Prepare the workspace:
- Source: Belassen Sie die vorgeschlagene Quelle. Für 6.6.129 ist dies der Quellbaum von kernel.org, da QNAPs eigene Quellbäume nur ältere Kernel enthalten.

- Environment:
kernel-builder. Unter Extra settings je eine Einstellung pro Zeile:USB_SERIAL=mundUSB_SERIAL_CH341=m, der USB-Seriell-Kern und der CH341-Treiber. Lassen Sie Build the whole kernel ausgeschaltet und klicken Sie auf Prepare.
- Ein Auftrag entpackt die Quellen, konfiguriert sie anhand des Profils und Ihrer Einstellungen, bereitet sie für den Modulbau vor und prüft, ob der Quellbaum genau die laufende Kernelversion erzeugt. Die Karte Workspace zeigt ready. Schlägt das Vorbereiten fehl, bleibt der bisherige Quellbaum erhalten.

03Das Projekt
New project bietet unter Kernel zwei Vorlagen: ein eigenes Hello-Modul und den ch341-Treiber. Wählen Sie USB serial driver ch341.
Das Projekt enthält ein Makefile, dessen Ziele die Befehle der Werkstatt ausführen, und einen Workflow für den Runner des NAS:
# Makefile des Projekts, als root im Terminal des Editors ausführen make prepare # bvs kernel prepare --option USB_SERIAL=m --option USB_SERIAL_CH341=m make # bvs kernel make --dir drivers/usb/serial make check # bvs kernel check ch341 make load # bvs kernel load ch341 make unload # bvs kernel unload ch341
Bei jedem Push baut der Workflow den Treiber mit --build-only und prüft ihn. Die dabei erzeugte Datei ch341.ko landet im Artefakt modules des Laufs, niemals im Ordner modules/ des Arbeitsbereichs. Dadurch lädt make load weiterhin das von Ihnen gebaute Modul.
04Treiber bauen
Auf der Seite Kernels baut Build modules einen Projektordner oder ein Verzeichnis des Kernelquellbaums. Der ch341-Treiber ist Teil dieses Baums: Wählen Sie A directory of the kernel tree und geben Sie drivers/usb/serial ein. make im Projekt führt denselben Schritt aus.
Der Bau erzeugt ch341.ko und usbserial.ko. Der Arbeitsbereich bewahrt ch341.ko in modules/ auf. usbserial.ko wird nicht übernommen, da QNAP dieses Modul liefert und QNAPs Kopie geladen wird.
05Mit dem laufenden Kernel abgleichen
Check vergleicht das Modul mit dem laufenden Kernel: vermagic, die Größe von struct module und die Positionen von init und exit, eine erforderliche Signatur, die Module, von denen es abhängt, und alle benötigten Symbole. Jeder Befund nennt die Abweichung und die nötigen Schritte.
QNAPs Kernel listet seine Datensymbole nicht auf. Die Prüfung meldet daher Symbole wie jiffies als Warnungen. Auf der Befehlszeile endet bvs kernel check ch341 mit Exitstatus 3, wenn das Modul nicht geladen werden darf.
06Laden und die Folgen verstehen
Ein Modul läuft innerhalb des Kernels mit all dessen Rechten. Ein fehlerhaftes Modul kann das NAS zum Stillstand bringen. Laden Sie nur Module, die Sie für einen bestimmten Zweck gebaut haben, und nur auf einem NAS, das Sie neu starten können.
- Load (Admin) oder
make loadprüft erneut und lädt das Modul, seine Abhängigkeiten zuerst: hier QNAPsusbserial. Ein Modul mit einem Prüffehler wird niemals geladen. Unload entfernt es; ein verwendetes Modul bleibt geladen. Jedes Laden und Entladen wird inlog/kernel-modules.logprotokolliert. - Ein von Hand geladenes Modul ist nach einem Neustart weg. Damit es bei jedem Start geladen wird, tragen Sie es unter den Kernelmodulen einer App-Builder-App ein: Das Aktivieren der App lädt es, und jeder Start des Pakets lädt es erneut.
- Wurde das NAS ohne geordnetes Beenden des Pakets angehalten (Absturz, Stromausfall, harter Reset), nachdem das Paket in diesem Systemlauf Module geladen hatte, lässt der nächste Start diese Module aus. Eines davon könnte den Absturz verursacht haben; eine Meldung nennt sie. Wenn Sie ein Modul von Hand laden oder seine App erneut aktivieren, darf es beim Start wieder geladen werden.
- Nach einem QTS-Update auf einen anderen Kernel bereiten Sie dessen Arbeitsbereich vor und bauen das Modul erneut. Eine Sicherung enthält
kernels/nicht.