Sestavení modulu jádra pro NAS: ovladač převodníku USB–sériový port CH341
Mnoho převodníků USB–sériový port s čipem CH340 nebo CH341 potřebuje ovladač jádra ch341. Zde zobrazený NAS s QTS 6.1 jej neobsahuje. Dílna jádra v Bucket & Code Server IDE sestaví takový modul pro jádro běžící na NAS, ověří jej vůči tomuto jádru a načte jej.
- Profilvlastnosti jádra
- Pracovní prostorodpovídajícím způsobem nastavený strom
- Sestavenídrivers/usb/serial
- Ověřenívermagic, rozložení, symboly
- Načtenísprávcem, na vlastní riziko
Snímky pocházejí z NAS s QTS 6.1 a jádrem 6.6.129-qnap. Všechna pole jsou vyplněna podle tohoto návodu.
01Co dílna dělá
Veřejný archiv GPL společnosti QNAP obsahuje zdrojové kódy jádra až po QTS 5.2.3, nikoli však jádro běžící na tomto NAS s QTS 6.1. Dílna proto přečte údaje, které o sobě poskytuje běžící jádro, a podle nich nastaví strom jádra z kernel.org. Stránka Kernels zobrazuje tento profil: verzi, kompilátor použitý společností QNAP, vermagic a rozložení struct module ve vlastních modulech QNAP a také to, zda musí být moduly podepsané.
- Potřebujete prostředí Kernel builder z galerie Examples (Apps → Examples): Ubuntu 24.04 s GCC 13 a nástroji pro sestavení jádra. Dílna vyžaduje stejnou hlavní verzi GCC, jakou bylo sestaveno běžící jádro, a ověří ji před přípravou pracovního prostoru.
- Příprava, sestavení a načtení vyžadují roli správce; ověření vyžaduje roli vývojáře. V terminálu editoru, který běží jako root, odpovídají těmto krokům příkazy
bvs kernel.
02Příprava pracovního prostoru
Pracovní prostor je strom jádra přesně pro běžící jádro, v kernels/<release> v datové složce. Na stránce Kernels stiskněte Prepare the workspace:
- Source: ponechte navržený zdroj. Pro 6.6.129 jde o strom z kernel.org, protože vlastní stromy QNAP obsahují pouze starší jádra.

- Environment:
kernel-builder. Do Extra settings zadejte po jednom na řádek:USB_SERIAL=maUSB_SERIAL_CH341=m, základní podporu převodníků USB–sériový port a ovladač CH341. Ponechte Build the whole kernel vypnuté a stiskněte Prepare.
- Úloha rozbalí zdroje, nastaví je podle profilu a vašich voleb, připraví je pro sestavování modulů a ověří, že strom sestavuje přesně pro běžící verzi jádra. Karta Workspace ukazuje stav ready. Pokud příprava selže, předchozí strom zůstane zachován.

03Projekt
New project nabízí pod Kernel dvě šablony: vlastní jednoduchý ukázkový modul a ovladač ch341. Vyberte USB serial driver ch341.
Projekt obsahuje Makefile, jehož cíle spouštějí příkazy dílny, a workflow pro runner na NAS:
# Makefile projektu, spouští se jako root v terminálu editoru 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
Při každém odeslání změn (push) workflow sestaví ovladač s --build-only a ověří jej. Soubor ch341.ko z tohoto sestavení se uloží do artefaktu běhu modules, nikdy do složky modules/ pracovního prostoru, takže make load nadále načítá modul, který jste sestavili vy.
04Sestavení ovladače
Na stránce Kernels sestaví Build modules složku projektu nebo adresář stromu jádra. Ovladač ch341 je součástí stromu: vyberte A directory of the kernel tree a zadejte drivers/usb/serial. Příkaz make v projektu provede totéž.
Sestavení vytvoří ch341.ko a usbserial.ko. Pracovní prostor uchová ch341.ko ve svém modules/. Soubor usbserial.ko neuchová, protože jej dodává QNAP a načítá se právě kopie od QNAP.
05Ověření vůči běžícímu jádru
Check porovná modul s běžícím jádrem: vermagic, velikost struct module a pozice init a exit, požadavek na podpis, moduly, na kterých závisí, a všechny potřebné symboly. Každý nález uvádí, co nesouhlasí a jak postupovat.
Jádro QNAP nevypisuje své datové symboly, takže ověření označuje symboly jako jiffies varováním. Na příkazovém řádku skončí bvs kernel check ch341 s návratovým kódem 3, pokud se modul nesmí načíst.
06Načtení modulu a jeho důsledky
Modul běží uvnitř jádra se všemi jeho oprávněními. Chybný modul může zastavit NAS. Načítejte jen to, co jste sestavili pro konkrétní účel, a jen na NAS, který můžete restartovat.
- Load (správce) nebo
make loadzopakuje ověření a načte modul, nejdříve jeho závislosti: zdeusbserialod QNAP. Modul s chybou zjištěnou při ověření se nikdy nenačte. Unload jej odstraní; používaný modul zůstane načtený. Každé načtení a odebrání se zapisuje dolog/kernel-modules.log. - Ručně načtený modul po restartu zmizí. Chcete-li jej načítat při každém startu, uveďte jej mezi moduly jádra aplikace App Builder: aktivace aplikace jej načte a při každém startu balíčku se načte znovu.
- Pokud se NAS zastavil bez řádného zastavení balíčku (pád, výpadek napájení, tvrdý reset), během běhu, ve kterém balíček načetl moduly, při příštím startu se tyto moduly vynechají. Některý z nich mohl způsobit pád; oznámení je vyjmenuje. Ruční načtení modulu nebo opětovná aktivace jeho aplikace dovolí jeho další načítání při startu.
- Po aktualizaci QTS na jiné jádro připravte pracovní prostor tohoto jádra a modul sestavte znovu. Záloha neobsahuje
kernels/.