Bygg en kärnmodul för din NAS: USB-seriedrivrutinen CH341
Många USB-serieadaptrar med ett CH340- eller CH341-chip behöver kärnans drivrutin ch341. Den NAS med QTS 6.1 som visas här saknar den. Kärnverkstaden i Bucket & Code Server IDE bygger en sådan modul för NAS:ens körande kärna, kontrollerar den mot kärnan och läser in den.
- Profilkärnans egenskaper
- Arbetsytaett träd med motsvarande konfiguration
- Byggdrivers/usb/serial
- Kontrolleravermagic, layout, symboler
- Läs insom administratör, på egen risk
Bilderna kommer från en NAS med QTS 6.1 och kärnan 6.6.129-qnap, med alla fält ifyllda enligt den här guiden.
01Vad verkstaden gör
QNAP:s offentliga GPL-arkiv innehåller kärnkällkod till och med QTS 5.2.3, men inte kärnan på denna NAS med QTS 6.1. Verkstaden läser därför uppgifterna som den körande kärnan visar om sig själv och konfigurerar ett kärnträd från kernel.org så att det stämmer. Sidan Kernels visar profilen: versionen, kompilatorn som QNAP använde, vermagic och layouten för struct module i QNAP:s egna moduler samt om moduler måste vara signerade.
- Du behöver miljön Kernel builder från galleriet Examples (Apps → Examples): Ubuntu 24.04 med GCC 13 och verktygen för att bygga kärnan. Verkstaden kräver samma huvudversion av GCC som den körande kärnan byggdes med och kontrollerar den innan arbetsytan förbereds.
- Förberedelse, bygge och inläsning kräver administratörsrollen; kontroll kräver utvecklarrollen. I redigerarens terminal, som körs som root, motsvaras stegen av kommandon med
bvs kernel.
02Förbered arbetsytan
Arbetsytan är ett kärnträd för exakt den körande kärnan, i kernels/<release> i datamappen. Tryck på Prepare the workspace på sidan Kernels:
- Source: behåll den föreslagna källan. För 6.6.129 är det trädet från kernel.org, eftersom QNAP:s egna träd bara innehåller äldre kärnor.

- Environment:
kernel-builder. Under Extra settings, en inställning per rad:USB_SERIAL=mochUSB_SERIAL_CH341=m, USB-seriekärnan och CH341-drivrutinen. Låt Build the whole kernel vara avstängd och tryck på Prepare.
- Ett jobb packar upp källkoden, konfigurerar den utifrån profilen och dina inställningar, förbereder den för modulbyggen och kontrollerar att trädet bygger för exakt den körande versionen. Kortet Workspace visar ready. Om förberedelsen misslyckas behålls det tidigare trädet.

03Projektet
New project har två mallar under Kernel: en egen enkel Hello-modul och ch341-drivrutinen. Välj USB serial driver ch341.
Projektet innehåller en Makefile vars mål kör verkstadens kommandon samt ett arbetsflöde för NAS:ens runner:
# projektets Makefile, kör som root i redigerarens terminal 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
Vid varje push bygger arbetsflödet drivrutinen med --build-only och kontrollerar den. Filen ch341.ko från bygget hamnar i körningens artefakt modules, aldrig i arbetsytans mapp modules/. Därför fortsätter make load att läsa in modulen som du själv byggde.
04Bygg drivrutinen
På sidan Kernels bygger Build modules en projektmapp eller en katalog i kärnträdet. Drivrutinen ch341 ingår i trädet: välj A directory of the kernel tree och skriv drivers/usb/serial. make i projektet gör samma sak.
Bygget skapar ch341.ko och usbserial.ko. Arbetsytan behåller ch341.ko i modules/. Den behåller inte usbserial.ko, eftersom QNAP levererar den modulen och det är QNAP:s kopia som läses in.
05Kontrollera mot den körande kärnan
Check jämför modulen med den körande kärnan: vermagic, storleken på struct module och positionerna för init och exit, signaturkrav, moduler den är beroende av och alla symboler den behöver. Varje fynd anger vad som inte stämmer och vad du ska göra.
QNAP:s kärna listar inte sina datasymboler, så kontrollen visar symboler som jiffies som varningar. På kommandoraden avslutas bvs kernel check ch341 med slutstatus 3 när modulen inte får läsas in.
06Läs in modulen och förstå följderna
En modul körs inne i kärnan med alla kärnans rättigheter. En felaktig modul kan stoppa NAS:en. Läs bara in sådant som du byggt för ett bestämt syfte, och bara på en NAS som du kan starta om.
- Load (administratör), eller
make load, kör kontrollen igen och läser in modulen, först dess beroenden: här QNAP:susbserial. En modul med ett fel i kontrollen läses aldrig in. Unload tar bort den; en modul som används förblir inläst. Varje inläsning och borttagning skrivs tilllog/kernel-modules.log. - En modul som lästs in för hand försvinner efter en omstart. För att läsa in den vid varje start anger du dess namn bland kärnmodulerna i en App Builder-app: när appen aktiveras läses den in, och varje start av paketet läser in den igen.
- Om NAS:en stannade utan att paketet stoppades i ordnad form (en krasch, ett strömavbrott eller en hård återställning), under en uppstart där paketet hade läst in moduler, hoppar nästa start över dessa moduler. En av dem kan ha orsakat kraschen; ett meddelande anger deras namn. Om du läser in en modul för hand eller aktiverar dess app igen får starten läsa in den igen.
- Efter en QTS-uppdatering till en annan kärna förbereder du den kärnans arbetsyta och bygger modulen igen. En säkerhetskopia innehåller inte
kernels/.