Unofficial
Na této stránce
  1. 01Co dílna dělá
  2. 02Příprava pracovního prostoru
  3. 03Projekt
  4. 04Sestavení ovladače
  5. 05Ověření vůči běžícímu jádru
  6. 06Načtení modulu a jeho důsledky

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.

  1. Profilvlastnosti jádra
  2. Pracovní prostorodpovídajícím způsobem nastavený strom
  3. Sestavenídrivers/usb/serial
  4. Ověřenívermagic, rozložení, symboly
  5. 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é.

Běžící jádro: verze 6.6.129-qnap, x86_64 TS-X74P, kompilátor x86_64-QNAP_gcc13-linux-gnu-gcc 13.2.0, binutils 2.41, vermagic 6.6.129-qnap SMP preempt mod_unload, struct module má 1152 bajtů, init na pozici 312 a exit na 1064; moduly QNAP nemají podpis; údaje přečtené z vlastních modulů QNAP
  • 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:

  1. 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. Zdroje jádra: Linux 6.6.129 z kernel.org, navržený, obsahuje toto jádro, staženo 134 MB; zdrojové kódy GPL QNAP pro QTS 5.2.3 s jádry 5.10.60, 4.14.24 a 4.2.8, jiná verze, 780 MB
  2. Environment: kernel-builder. Do Extra settings zadejte po jednom na řádek: USB_SERIAL=m a USB_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. Příprava pracovního prostoru 6.6.129-qnap: Source navržený zdroj, Environment kernel-builder, Extra settings USB_SERIAL=m a USB_SERIAL_CH341=m, Build the whole kernel nezaškrtnuté a tlačítko Prepare
  3. Ú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. Workspace, stav ready: zdroj linux-6.6.129 z kernel.org, konfigurace defconfig+profile s USB_SERIAL=m a USB_SERIAL_CH341=m, prostředí kernel-builder a tlačítka Build modules a Delete

03Projekt

New project nabízí pod Kernel dvě šablony: vlastní jednoduchý ukázkový modul a ovladač ch341. Vyberte USB serial driver ch341.

Šablony Kernel v New project: Kernel module, jednoduchý ukázkový modul jádra s Kbuild a Makefile; vybraná USB serial driver ch341, vlastní ovladač jádra ch341 pro převodníky USB–sériový port s čipy CH340 a 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éž.

Build modules v 6.6.129-qnap: What to build nastaveno na A directory of the kernel tree; Directory drivers/usb/serial; Targets prázdné; tlačítko Build

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.

Moduly pracovního prostoru: bvs_hello a ch341, oba nenačtené, s velikostí, datem sestavení a tlačítky Check a Load

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.

Ověření ch341: lze načíst; varování, že 2 symboly, jiffies a kmalloc_caches, nelze dohledat, protože toto jádro nevypisuje datové symboly, a že jádro při načtení odmítne modul, pokud některý z nich chybí

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 load zopakuje ověření a načte modul, nejdříve jeho závislosti: zde usbserial od 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 do log/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/.