97色伦色在线综合视频,无玛专区,18videosex性欧美黑色,日韩黄色电影免费在线观看,国产精品伦理一区二区三区,在线视频欧美日韩,亚洲欧美在线中文字幕不卡

禪城區(qū)網(wǎng)站建站建設(shè)南京自助建站軟件

鶴壁市浩天電氣有限公司 2026/01/24 10:49:14
禪城區(qū)網(wǎng)站建站建設(shè),南京自助建站軟件,廣告網(wǎng)站建設(shè)網(wǎng),足球比賽直播手把手教你編譯Linux下的CH340驅(qū)動#xff1a;從零開始#xff0c;不靠包管理器也能用串口你有沒有遇到過這種情況#xff1a;手里的開發(fā)板插上電腦#xff0c;ls /dev/tty*死活看不到/dev/ttyUSB0#xff1f;dmesg 一查#xff0c;滿屏都是unknown USB device或者no suc…手把手教你編譯Linux下的CH340驅(qū)動從零開始不靠包管理器也能用串口你有沒有遇到過這種情況手里的開發(fā)板插上電腦ls /dev/tty*死活看不到/dev/ttyUSB0dmesg 一查滿屏都是unknown USB device或者no such device……而你用的不過是常見的 Arduino Nano CH340 版、ESP-12F 模塊或者某寶十塊錢包郵的 USB 轉(zhuǎn) TTL 線——核心芯片正是CH340。別急這多半不是硬件壞了而是你的 Linux 系統(tǒng)里缺了那個關(guān)鍵的小東西ch34x 驅(qū)動模塊。更糟的是如果你用的是老舊發(fā)行版、定制嵌入式系統(tǒng)甚至沒網(wǎng)的工控機(jī)想靠apt install或yum install安裝驅(qū)動根本行不通。那怎么辦總不能每次調(diào)試都換臺電腦吧答案是自己動手編譯一個.ko文件把驅(qū)動“種”進(jìn)內(nèi)核里。這篇文章不講虛的也不復(fù)制粘貼手冊。我會帶你一步步從源碼開始完成 CH340 驅(qū)動的獲取、編譯、安裝和驗證全過程。全程不需要聯(lián)網(wǎng)下載額外包除了源碼適合離線環(huán)境部署也幫你真正搞懂 Linux 內(nèi)核模塊是怎么跑起來的。為什么 CH340 在 Linux 上經(jīng)?!笆ъ`”我們先來理清楚一個問題為什么 FTDI 和 CP210x 幾乎即插即用而 CH340 卻常常要手動折騰簡單說就一句話CH340 不是標(biāo)準(zhǔn)的 CDC ACM 設(shè)備。什么意思大多數(shù)現(xiàn)代 USB 轉(zhuǎn)串芯片比如 FT232RL、CP2102遵循 USB 組織定義的CDC ACMCommunication Device Class - Abstract Control Model標(biāo)準(zhǔn)。這類設(shè)備一旦插入Linux 內(nèi)核自帶的cdc-acm驅(qū)動就會自動識別并綁定立刻生成/dev/ttyACM0或/dev/ttyUSB0。但 CH340 不走尋常路。它使用的是廠商自定義類bInterfaceClass 0xFF不屬于任何標(biāo)準(zhǔn)類別。這就意味著必須有一個專門寫給它的驅(qū)動程序才能工作。這個驅(qū)動就是ch34x.ko。好消息是從 Linux 內(nèi)核4.10 開始官方已經(jīng)將ch34x驅(qū)動合并進(jìn)了主線代碼樹。所以如果你用的是較新的 Ubuntu、Debian、Fedora大概率插上去就能用。壞消息是- 很多國產(chǎn)開發(fā)板配套的鏡像基于老內(nèi)核如 3.18、4.4- 某些裁剪過的嵌入式系統(tǒng)為了精簡體積直接去掉了ch34x模塊- Secure Boot 啟用后第三方模塊加載受限這些情況都會導(dǎo)致你明明插了設(shè)備系統(tǒng)卻“視而不見”。這時候你就得自己動手豐衣足食了。第一步確認(rèn)問題出在驅(qū)動而不是別的地方在動手前先做一次快速診斷避免白忙一場。1. 插上設(shè)備看內(nèi)核日志dmesg | tail -15如果看到類似輸出usb 1-1: new full-speed USB device number 5 using xhci_hcd usb 1-1: New USB device found, idVendor1a86, idProduct7523 usb 1-1: Product: USB2.0-Serial usb 1-1: Manufacturer: wch.cn恭喜你USB 層已經(jīng)識別成功VID 是1a86PID 是7523—— 這正是 CH340G 的標(biāo)志性參數(shù)。但如果下面沒有緊接著出現(xiàn)usbcore: registered new interface driver ch34x usbserial: USB Serial support registered for ch34x ch34x ttyUSB0: ch34x converter now attached那就說明驅(qū)動沒加載。2. 檢查是否已有 ch34x 模塊運行l(wèi)smod | grep ch34x如果有輸出說明模塊已加載。如果沒有再查一下系統(tǒng)有沒有這個模塊文件find /lib/modules/$(uname -r) -name ch34x.ko*如果找不到那就只能自己編譯了。第二步準(zhǔn)備編譯環(huán)境要編譯內(nèi)核模塊你需要三樣?xùn)|西當(dāng)前運行內(nèi)核的頭文件headers構(gòu)建工具鏈make, gcc驅(qū)動源碼我們一個個來。1. 安裝內(nèi)核頭文件最關(guān)鍵模塊編譯必須與當(dāng)前運行的內(nèi)核版本完全匹配。否則會出現(xiàn)Unknown symbol in module或Module version mismatch錯誤。查看當(dāng)前內(nèi)核版本uname -r # 輸出示例5.4.0-42-generic根據(jù)你的發(fā)行版安裝對應(yīng)的頭文件包發(fā)行版命令Ubuntu/Debiansudo apt install linux-headers-$(uname -r)CentOS/RHELsudo yum install kernel-devel-$(uname -r)Fedorasudo dnf install kernel-devel-$(uname -r)?? 注意某些系統(tǒng)中uname -r返回的版本號可能無法直接用于包管理器例如帶有本地修改的定制內(nèi)核。此時需要手動查找匹配的 headers 包或從源碼重建。2. 安裝基本構(gòu)建工具# Debian/Ubuntu sudo apt install build-essential # RHEL/CentOS/Fedora sudo yum groupinstall Development Tools3. 獲取 CH340 驅(qū)動源碼最穩(wěn)妥的方式是從Linux 內(nèi)核源碼樹中提取ch34x.c因為它保證與你當(dāng)前使用的內(nèi)核 API 兼容。但我們也可以直接從沁恒官網(wǎng)或 GitHub 上找開源版本。推薦使用社區(qū)維護(hù)良好的倉庫git clone https://github.com/juliagoda/CH341SER.git cd CH341SER該倉庫包含了適用于多種平臺的ch34x.c和 Makefile并支持主流內(nèi)核接口。結(jié)構(gòu)大致如下CH341SER/ ├── ch34x.c ├── Makefile └── README.md第三步編寫正確的 Makefile 來編譯模塊這是最容易出錯的地方。很多人照搬網(wǎng)上老舊的 Makefile結(jié)果編譯失敗。我們要寫一個符合kbuild 系統(tǒng)規(guī)范的雙段式 Makefile。創(chuàng)建Makefile文件內(nèi)容如下ifneq ($(KERNELRELEASE),) obj-m : ch34x.o else KDIR : /lib/modules/$(shell uname -r)/build PWD : $(shell pwd) default: $(MAKE) -C $(KDIR) M$(PWD) modules clean: rm -f *.o *.ko *.mod.* *.cmd *.markers *.order *.symvers endif關(guān)鍵點解釋obj-m : ch34x.o表示我們要把ch34x.c編譯為可加載模塊注意是obj-m不是obj-y$(MAKE) -C $(KDIR)跳轉(zhuǎn)到內(nèi)核構(gòu)建目錄通常是/lib/modules/.../build它是指向真實內(nèi)核源碼的符號鏈接M$(PWD)告訴內(nèi)核構(gòu)建系統(tǒng)“回到當(dāng)前目錄繼續(xù)編譯模塊”雙段結(jié)構(gòu)是為了兼容內(nèi)核構(gòu)建系統(tǒng)的遞歸調(diào)用機(jī)制保存后執(zhí)行make如果一切順利你會看到Building modules, stage 2. MODPOST 1 modules CC ch34x.mod.o LD [M] ch34x.ko并且生成了ch34x.ko文件。 成功一半了第四步加載模塊并驗證功能現(xiàn)在進(jìn)入最后一步把.ko文件“注入”內(nèi)核。1. 加載模塊sudo insmod ch34x.ko不出意外的話你應(yīng)該能在 dmesg 中看到ch34x: loading out-of-tree module taints kernel. USB Serial support registered for ch34x ch34x: ch34x converter detected usbcore: registered new interface driver ch34x ch34x ttyUSB0: ch34x converter now attached同時設(shè)備節(jié)點也生成了ls /dev/ttyUSB* # 應(yīng)該輸出 /dev/ttyUSB02. 測試通信可以用screen或minicom連接測試sudo screen /dev/ttyUSB0 115200如果你連接的是單片機(jī)并發(fā)送了日志這時應(yīng)該能看到輸出了按CtrlA→K→Y退出 screen。常見坑點與解決方法? 問題1insmod: error inserting ch34x.ko: -1 Invalid module format原因內(nèi)核版本不匹配或者 headers 沒裝對。解決方案- 確認(rèn)uname -r與安裝的 headers 完全一致- 檢查/lib/modules/$(uname -r)/build是否存在且能訪問- 嘗試重新安裝 headers 包? 問題2Unknown symbol in module如 usb_serial_register這是典型的 API 變更問題。舊版驅(qū)動用了已被廢棄的函數(shù)。解決方案- 使用更新的驅(qū)動源碼優(yōu)先選用 Linux 主線中的版本- 或打補(bǔ)丁修復(fù)符號引用建議參考 Linux 內(nèi)核源碼中的drivers/usb/serial/ch341.c注意名字是 ch341但它也支持 ch340? 問題3Secure Boot 阻止模塊加載在啟用了安全啟動的系統(tǒng)上如 Ubuntu 20.04 默認(rèn)開啟加載第三方模塊會報錯The system is running in secure boot mode...解決方案有兩個方法一禁用 Secure Boot臨時方案進(jìn) BIOS 設(shè)置關(guān)閉 Secure Boot。方法二簽名模塊生產(chǎn)級做法生成密鑰并對模塊簽名# 生成私鑰和公鑰 openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj /CNCH34X Driver/ # 注冊公鑰到 MOKMachine Owner Key sudo mokutil --import MOK.der # 重啟后按提示設(shè)置密碼完成注冊 # 簽名模塊 /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der ch34x.ko # 再加載 sudo insmod ch34x.ko這樣就能通過 Secure Boot 驗證了。如何讓驅(qū)動開機(jī)自動加載每次重啟都要手動insmod太麻煩。我們可以讓它自動加載。方法1加入模塊加載列表echo ch34x | sudo tee /etc/modules-load.d/ch34x.conf系統(tǒng)啟動時會自動執(zhí)行modprobe ch34x。方法2安裝到系統(tǒng)模塊路徑sudo cp ch34x.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ sudo depmod -a然后就可以用modprobe ch34x替代insmod了。進(jìn)階技巧為 ARM 板交叉編譯驅(qū)動如果你的目標(biāo)平臺是樹莓派、全志H3/H5、RK3399 等 ARM 設(shè)備就不能在 x86 主機(jī)上直接編譯。你需要做交叉編譯。修改 Makefile 添加架構(gòu)和工具鏈ARCH ? arm CROSS_COMPILE ? arm-linux-gnueabihf- KDIR : /path/to/target/kernel/build obj-m : ch34x.o all: $(MAKE) -C $(KDIR) ARCH$(ARCH) CROSS_COMPILE$(CROSS_COMPILE) M$(PWD) modules clean: rm -f *.o *.ko *.mod.* *.cmd *.markers *.order *.symvers然后在主機(jī)上運行make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KDIR/home/user/rpi-kernel/build生成的.ko文件拷貝到開發(fā)板即可加載??偨Y(jié)一下我們到底學(xué)會了什么這不是一篇“復(fù)制命令就能跑”的快餐教程。我們真正掌握的是? 如何判斷 CH340 設(shè)備是否被正確識別? 如何搭建獨立的內(nèi)核模塊編譯環(huán)境? 如何使用標(biāo)準(zhǔn) kbuild 系統(tǒng)編譯.ko文件? 如何手動加載模塊并排查常見錯誤? 如何應(yīng)對 Secure Boot 和交叉編譯等現(xiàn)實挑戰(zhàn)更重要的是你不再依賴別人打包好的.deb或.rpm文件。你可以面對任何一臺沒有網(wǎng)絡(luò)、沒有包管理器、甚至連驅(qū)動都沒裝的嵌入式設(shè)備自信地說一句“讓我給你裝個驅(qū)動?!倍@正是嵌入式工程師的核心能力之一。最后一點建議雖然現(xiàn)在主流發(fā)行版基本都自帶ch34x支持但在國產(chǎn)化替代浪潮下越來越多的設(shè)備采用 CH340/CH341 芯片。了解其驅(qū)動機(jī)制不僅能解決眼前問題還能幫助你在面試、項目評審、故障排查中脫穎而出。下次當(dāng)你看到同事還在百度“Linux 插 CH340 沒反應(yīng)怎么辦”你可以默默打開終端敲下make sudo insmod ch34x.ko然后看著/dev/ttyUSB0出現(xiàn)在屏幕上。那一刻你已經(jīng)不是一個普通的使用者而是掌控系統(tǒng)的那個人。如果你覺得這篇實戰(zhàn)指南有用歡迎收藏轉(zhuǎn)發(fā)。也歡迎在評論區(qū)分享你在實際項目中遇到的奇葩驅(qū)動問題我們一起拆解解決。
版權(quán)聲明: 本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請聯(lián)系我們進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

網(wǎng)站編輯轉(zhuǎn)行做文案如何設(shè)計一個網(wǎng)頁

網(wǎng)站編輯轉(zhuǎn)行做文案,如何設(shè)計一個網(wǎng)頁,工業(yè)設(shè)計流程8個步驟,一個app能賣多少錢逆向分析一款加密WebShell的全過程 在調(diào)試一個圖像識別服務(wù)時#xff0c;我偶然發(fā)現(xiàn)服務(wù)器上多了一個可疑文件#xf

2026/01/23 01:09:01

主機(jī)建網(wǎng)站的優(yōu)勢WordPress知更鳥首頁幻燈

主機(jī)建網(wǎng)站的優(yōu)勢,WordPress知更鳥首頁幻燈,龍巖建設(shè)網(wǎng)站,網(wǎng)站規(guī)劃的縮略圖深夜收到用戶咨詢卻無人應(yīng)答#xff0c;高峰期人工客服被重復(fù)問題淹沒#xff0c;跨平臺消息管理雜亂無章。 如今#xf

2026/01/21 19:09:01