為 NAS 建置核心模組:CH341 USB 序列埠驅動程式
許多採用 CH340 或 CH341 晶片的 USB 序列埠轉接器需要核心的 ch341 驅動程式。這裡示範的 QTS 6.1 NAS 未附此驅動程式。Bucket & Code Server IDE 的核心工作坊會為 NAS 執行中的核心建置這類模組、檢查與該核心的相容性,再載入模組。
- 設定檔核心的資訊
- 工作區依資訊設定的原始碼樹
- 建置drivers/usb/serial
- 檢查vermagic、配置、符號
- 載入由管理員操作,風險自負
圖片來自執行 QTS 6.1 與核心 6.6.129-qnap 的 NAS,每個欄位均依本指南的說明填寫。
01工作坊的功能
QNAP 公開的 GPL 檔案庫所列的核心原始碼只到 QTS 5.2.3,並未包含這台 QTS 6.1 NAS 執行中的核心。因此,工作坊會讀取執行中核心所提供的自身資訊,並據此設定來自 kernel.org 的核心原始碼樹。Kernels 頁面會顯示此設定檔:版本、QNAP 使用的編譯器、QNAP 自有模組中的 vermagic 與 struct module 配置,以及模組是否必須簽署。
- 您需要 Examples 範例庫(Apps → Examples)中的 Kernel builder 環境:Ubuntu 24.04,搭配 GCC 13 與核心建置工具。工作坊要求 GCC 的主要版本與建置執行中核心所用的版本相同,並會在準備工作區之前檢查。
- 準備、建置與載入需要管理員角色;檢查需要開發者角色。在以 root 執行的編輯器終端機中,也可以用
bvs kernel命令執行相同步驟。
02準備工作區
工作區是與執行中核心完全對應的核心原始碼樹,位於資料資料夾的 kernels/<release>。在 Kernels 頁面按下 Prepare the workspace:
- Source:保留建議的來源。對 6.6.129 而言,這是 kernel.org 的原始碼樹,因為 QNAP 自有的原始碼樹只包含較舊的核心。

- Environment:
kernel-builder。在 Extra settings 中每行輸入一項:USB_SERIAL=m與USB_SERIAL_CH341=m,分別是 USB 序列埠核心支援與 CH341 驅動程式。保持 Build the whole kernel 關閉,再按下 Prepare。
- 工作會解壓縮原始碼、依設定檔與您的選項設定、準備模組建置,並確認原始碼樹的建置目標與執行中的版本完全一致。Workspace 卡片會顯示 ready。若準備失敗,會保留先前的原始碼樹。

03專案
New project 的 Kernel 下有兩個範本:您自己的簡單 Hello 模組,以及 ch341 驅動程式。請選擇 USB serial driver ch341。
專案包含 Makefile,其目標會執行工作坊的命令,另有供 NAS 執行器使用的工作流程:
# 專案的 Makefile,在編輯器終端機中以 root 執行 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
每次推送時,工作流程會以 --build-only 建置驅動程式並檢查。該次建置的 ch341.ko 會放入執行結果的 modules 成品,絕不放進工作區的 modules/ 資料夾,因此 make load 載入的仍是您自行建置的模組。
04建置驅動程式
在 Kernels 頁面,Build modules 會建置專案資料夾或核心原始碼樹中的目錄。ch341 驅動程式屬於原始碼樹的一部分:請選擇 A directory of the kernel tree,並輸入 drivers/usb/serial。在專案中執行 make 也會進行相同操作。
建置會產生 ch341.ko 與 usbserial.ko。工作區會將 ch341.ko 保存在 modules/ 中。由於 QNAP 已提供 usbserial.ko,而且會載入 QNAP 的版本,因此不會保留這個檔案。
05檢查與執行中核心的相容性
Check 會比較模組與執行中的核心:vermagic、struct module 大小與 init 和 exit 的位置、是否需要簽章、相依模組,以及所有需要的符號。每項結果都會說明不符之處與處理方式。
QNAP 的核心未列出自身的資料符號,因此檢查會將 jiffies 等符號列為警告。在命令列中,當模組不得載入時,bvs kernel check ch341 會以結束狀態 3 結束。
06載入模組及其影響
模組在核心內部執行,擁有核心的全部權限。有缺陷的模組可能讓 NAS 停止運作。請只載入您為明確目的而建置的模組,並且只在您可以重新啟動的 NAS 上操作。
- Load(管理員)或
make load會再次檢查,再載入模組,並先載入相依模組:此處為 QNAP 的usbserial。檢查發現錯誤的模組絕不會載入。Unload 會移除模組;使用中的模組則會維持載入。每次載入與卸載都會寫入log/kernel-modules.log。 - 手動載入的模組會在重新啟動後消失。若要在每次啟動時載入,請將其名稱加入 App Builder 應用程式的核心模組清單:啟用應用程式時會載入模組,而套件每次啟動時也會重新載入。
- 如果在套件曾載入模組的那次開機期間,NAS 未經套件正常停止便中止運作(當機、斷電、強制重設),下次啟動時會略過這些模組,因為其中一個可能是當機原因,通知會列出模組名稱。手動載入某個模組,或再次啟用其應用程式後,啟動時便可再次載入該模組。
- QTS 更新為其他核心後,請準備該核心的工作區並重新建置模組。備份不包含
kernels/。