资讯详情

资讯详情

Ubuntu下USB转串口设备文件找不到?从驱动排查到udev固定节点全攻略

把调试板子时最常见也最让人血压升高的一幕开发板通过USB转串口线插到Ubuntu主机上ls /dev/ttyUSB*一敲结果什么也没出来。设备文件不存在串口调试助手、minicom、Python的serial库全都跟着罢工。这篇文章专门讲这个“找不到设备文件”的问题覆盖Ubuntu下的设备节点生成原理、CH340/FTDI这类常见USB转串口芯片的驱动排查方法以及我刚踩完的一串坑。不管你是刚入手t113、STM32F407还是imx6ull开发板的小白还是已经被设备树、Uboot折腾过一轮的老手只要串口灯亮了但系统里没设备这篇文章就能帮你按图索骥。1. 先把问题定性找不到设备文件属于哪一层故障1.1 正常情况下设备文件长什么样在Linux系统里“设备文件”是用户空间访问内核硬件驱动的入口放在/dev目录下。对于串口你大概率会见到以下几种节点/dev/ttyS0、/dev/ttyS1这是主板上原生的16550 UART工业级老古董一般不会出现在USB转串口场景。/dev/ttyUSB0、/dev/ttyUSB1USB转串口芯片CH340、CP2102、FT232等最常生成的节点USB子系统和usb-serial驱动协作注册出来的。/dev/ttyACM0、/dev/ttyACM1USB CDC ACM类设备比如STM32的USB虚拟串口、Arduino Uno、部分ESP32板载串口走的是另一套驱动逻辑。正常插上一根CH340的USB转TTL线执行ls -l /dev/ttyUSB*如果能看到类似crw-rw---- 1 root dialout 188, 0 ... /dev/ttyUSB0的输出就说明驱动已经在工作。这里188, 0分别是主设备号和次设备号系统在驱动模块加载时会动态分配其中188就是usb-serial层注册的ttyUSB设备主设备号。但“正常”这件事未必处处成立。开发板连接Ubuntu后查不到设备在技术层面通常不是“串口坏了”而是系统从USB枚举到驱动注册、再到设备节点生成这条链路上的某个环节断了。1.2 “未找到设备文件”的几种真实症状我建议你先自己观察一下到底是下面哪种情况插上USB线后lsusb都看不到新的USB设备。这说明硬件枚举阶段就失败了和驱动没关系重点查线材、供电、USB端口、转接芯片是否损坏。lsusb能看到厂商信息比如1a86:7523 QinHeng Electronics CH340但/dev/ttyUSB*仍然不存在。这是驱动没加载或被系统禁用属于最常见的排查区间。/dev/ttyUSB0确实存在但用minicom或串口助手打开时报Permission denied。这是权限问题不是“找不到设备”的问题但新手很容易混淆。设备节点存在也能打开但数据收发全是乱码或完全没反应。这不属于本节标题范围多半是波特率、接线或接地问题后面我也会顺带提几句。这篇文章核心解决第2种情况同时把第1种和第3种相关的排查思路一并讲清楚。因为实际调试的时候这几种症状经常交替出现你光盯着/dev目录看容易把自己绕晕。2. 搞清底层链路USB转串口到tty设备的映射原理2.1 硬件上的数据链路要知道为什么“没有设备文件”先得知道设备文件是怎么“凭空”冒出来的。我们以最常见的“USB转TTL线连接开发板串口”为例数据链路是这样的开发板UART TX/RX引脚 ↓ USB转串口芯片CH340/CP2102/FT232 ↓ USB总线 ↓ USB Host Controller主机控制器 ↓ 内核USB核心驱动 ↓ usb-serial驱动层 ↓ tty驱动注册 → /dev/ttyUSB0从芯片到系统的关系可以类比成一条快递链路USB转串口芯片相当于发货站USB总线是快递车USB核心驱动是分拣中心usb-serial驱动是区域配送站最终的/dev/ttyUSB0就是送货上门后你在门口拿到的那个包裹。任何一个环节掉链子你都收不到货。很多初学者有个误解以为转接芯片本身是“即插即用”的插进去系统就自动认识。其实Linux内核的驱动框架没有那么“主动”USB设备插入后内核需要做三件事通过USB描述符识别这个设备的VID厂商ID和PID产品ID。根据VID/PID在已注册的USB驱动列表里寻找匹配项。驱动绑定成功后调用其probe函数注册tty端口生成设备节点。CH340的VID/PID一般是1a86:7523CP2102是10c4:ea60FT232是0403:6001。lsusb输出里那串形如xxxx:xxxx的十六进制数就是驱动匹配的关键钥匙。如果你的系统里恰好没有对应驱动USB核心只能识别到“这是个USB设备”但不会生成串口节点。2.2 内核驱动加载与设备节点生成接下来展开说下内核侧的过程。Linux内核在USB子系统中维护了一个驱动列表每个USB设备驱动结构体里都有一个id_table声明自己支持哪些VID/PID。比如ftdi_sio驱动的id_table里就列了一大堆FTDI芯片的PID。USB核心监测到有新设备插入时会遍历这个驱动列表调用usb_serial_probe等一系列回调函数最终通过tty_register_driver把设备注册到tty子系统。如果一切顺利你会在/var/log/syslog或dmesg里看到类似下面的信息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: New USB device strings: Mfr1, Product2, SerialNumber3 usbcore: registered new interface driver ch341 usbserial: USB Serial support registered for ch341-uart ch341-uart now attached to ttyUSB0注意最后一行的关键动作now attached to ttyUSB0。这一行出现才真正意味着设备节点已经生成。后面的调试工作比如打开串口都依赖于这行日志是否出现。反过来说如果dmesg只走到New USB device found就停了没有任何ch341-uart now attached出现那就说明驱动这层没绑定成功。这时要么内核没编进对应模块要么模块被blacklist了要么模块编译时用的内核版本和当前内核API不兼容。2.3 为什么CH340/CH341在部分Ubuntu上需要手动装驱动这里有个绕不开的历史背景。CH340/CH341这款芯片在国内开发板配套里极常见正点原子、野火、各种国产板子送的串口线基本都是它。但Linux内核主线对CH340的支持走得比较曲折。早期版本的ch341驱动只支持老的CH340新版芯片比如CH340G、CH340C、CH341A的PID不同旧驱动直接不认。ch341和ch34x两个模块名字看似差不多实际是两个分支内核版本不同支持情况也不一样。Ubuntu 20.04以后的内核5.4默认带了ch341模块大部分场景插上就能用但如果你用的是老内核的Ubuntu 16.04/18.04或者自行编译的交叉内核设备文件不出来一点都不稀奇。另一个容易忽略的点是FTDI芯片。FT232系列驱动模块叫ftdi_sio新内核里还附带了ftdi_sio_jtag这类备用驱动配合某些CPU调试器比如OpenOCD、J-Link的USB桥能同时暴露串口和JTAG口。但如果你用的是一些山寨FTDI芯片VID/PID被仿冒内核里有可能被ftdi_sio的“已知冒仿芯片拒载列表”拦下来同样会出现lsusb可见、tty设备不生成的情况。理解这层原理之后排查的思路就非常清晰了先确认USB枚举是否成功再确认驱动模块是否加载最后看节点生成日志。下面的章节就是一套可以直接照做的排查流程。3. 一套完整的排查流程从硬件到软件逐步验证3.1 第一步确认USB设备是否被枚举不管你信不信很多人卡在“找不到设备”这个问题上好几天最后发现是USB线只能充电不能传数据。所以第一步先做硬件枚举检查这一步不超过一分钟。lsusb插线前先跑一次记录当前输出插上串口线再跑一次对比多出来的那一行。如果多出来的设备信息里能看到厂商字符串和ID说明USB物理链路是通的。比如Bus 001 Device 004: ID 1a86:7523 QinHeng Electronics CH340 serial converter如果没有新增行依次换USB口、换数据线、换电脑端口测试。特别注意开发板上的Type-C口有些只接了电源正负极尤其是ESP32-S3、STM32F407这类板子有的Type-C口设计成纯供电连USB转串口芯片都没走很多人就在这里翻车。补充一个技巧如果lsusb里能识别到设备但显示的厂商信息乱码或干脆是Unknown不用慌只要VID/PID对得上驱动匹配就不受字符串影响。lsusb -v可以查看更详细的描述符信息但一般用不到那么深。3.2 第二步查看内核日志定位卡在哪一环硬件枚举确认没问题后接着看内核日志。dmesg是这个环节最重要的工具建议插入和拔出的时候分开看# 插入设备后立刻执行 dmesg | tail -n 30如果日志停留在New USB device found之前比如只看到new full-speed USB device或者device descriptor read/64、device not accepting address X说明USB枚举阶段遇到问题常见诱因是供电不足或USB线质量差。有些开发板在通过USB供电同时还要给传感器、LED屏供电时电流峰值会瞬间拉低电压导致USB设备反复reset这一条在产业界太常见了后面第五章我会单独说。如果日志走到了New USB device found, idVendor...但是后续没有USB Serial support registered、now attached to ttyUSB0那就说明宿主机的驱动程序匹配失败或模块没加载。我们再往下走。3.3 第三步确认内核驱动模块是否加载驱动是否加载用lsmod就能查lsmod | grep ch341 lsmod | grep ftdi_sio lsmod | grep cp210x如果什么都搜不到说明模块压根不在当前内核里需要手动加载sudo modprobe ch341此时如果报modprobe: FATAL: Module ch341 not found in directory /lib/modules/...就说明内核映像里没有这个驱动模块。解决办法要么换新内核要么自己编译驱动模块。Ubuntu桌面版一般带了很多额外模块出现这种报错更多是在自己裁剪过的嵌入式系统或者WSL环境里反而Ubuntu本身手到擒来。如果模块能正常加载立刻再跑一次dmesg | tail多数情况下会多出来usbserial: USB Serial support registered for ch341-uart和ch341-uart now attached to ttyUSB0两行。如果这两行出现了再去ls /dev/ttyUSB*大概率就在了。有个容易踩的坑模块确实加载了但lsmod里看不到。有些模块被直接编进了内核built-in而不是以.ko文件形式存在。这种情况lsmod自然搜不到但驱动却一直在工作设备节点也正常。所以判断标准始终以dmesg和设备节点为准lsmod只是辅助工具。3.4 第四步检查设备节点权限和用户组设备节点生成之后如果你用的是普通用户可能还会遇到“设备文件找到了但打不开”的情况。排查方法ls -l /dev/ttyUSB0典型的输出是crw-rw---- 1 root dialout 188, 0 ... /dev/ttyUSB0看清楚没有普通用户对它的权限是rw-都没有的组权限是dialout组的用户才有读写权。所以要么把自己加进dialout组sudo usermod -aG dialout $USER然后重新登录一次注销再进最稳妥别指望newgrp在所有终端环境下都生效要么每次都用sudo minicom -s这种临时方式。后者不适合日常调试因为你还要在普通用户下跑Python脚本、Qt串口助手分分钟被权限卡住。这里有个很多人忽视的细节如果不把用户加进dialout组直接用sudo运行串口工具确实能打开端口但这种方式产生的log文件、生成的数据文件经常变成root属主后面普通用户清理起来很麻烦。我目前习惯是一开始就配好用户组后面省心。这个属于个人习惯但值得参考。3.5 第五步排查其他程序抢占串口最后是玄学环节设备节点存在dmesg也正常ls -l权限也没问题但用串口工具打开时报Resource temporarily unavailable或“设备或资源忙”。这种大概率是某个服务或工具已经把串口占用了。Ubuntu桌面上最常见的就是ModemManager它会擅自访问/dev/ttyUSB*试图和所谓的“调制解调器”握手极容易把串口占住导致其他程序无法打开。如果确认自己用的板子不是什么3G/4G模块可以把这个服务停掉sudo systemctl stop ModemManager sudo systemctl disable ModemManager注意disable会让它在开机后不自动启动如果你只是临时调一次停掉就够了。这个服务在纯嵌入式调试场景下真的很没用基本可以永久关掉。除了ModemManager后台可能有残留的minicom、screen会话或者你自己之前跑挂了的Python脚本。ps aux | grep -E minicom|screen|python检查一下不对就杀掉。至此一套从硬件到驱动的排查流程就走完了。正常情况下走到第三步不需要第四步就能看到/dev/ttyUSB0。但如果前三步都不行比如dmesg里压根没有对应芯片的USB识别记录或者带你到New USB device found之后就没有了那就得进入下一节直接动手处理驱动。4. 实战常见USB转串口芯片的驱动安装与验证4.1 确认芯片型号不拆外壳的准确识别方法排查驱动前必须先确认用的是哪颗芯片。虽然99%的赠送线写着CH340但你自己买的高端线可能是FT232开发板上焊的可能是CP2105。拆外壳看芯片虽然直接但很多USB转串口线是注塑一体成型的根本拆不开。这时最靠谱的办法是看lsusb里的VID和PID芯片VID:PIDdmesg里常见的驱动名CH340 / CH3411a86:7523ch341CP2102 / CP210510c4:ea60cp210xFT232 / FT22320403:6001 / 0403:6010ftdi_sioPL2303067b:2303pl2303查到VID:PID组合之后你基本就知道要加载哪个模块了。如果某些USB转串口线是“多合一”芯片比如CH9350这类出现在lsusb里的可能是HID设备而不是串口设备那就不在本篇文章讨论范围。4.2 Ubuntu新内核下最省事的驱动确认方式在Ubuntu 20.04及以上版本如果你的内核是5.4以上并且是官方发行版内核而非自己裁剪CH340/CH341、CP210x、FTDI、PL2303这些基本都已经包含在linux-modules-extra或linux-modules包里。确认方式有两种第一种先直接尝试加载模块sudo modprobe ch341没有报错就说明模块在系统里接着插拔一次串口线看dmesg输出。如果modprobe提示找不到模块文件多半是你装的是精简版内核需要手动安装linux-modules-extra-$(uname -r)sudo apt update sudo apt install linux-modules-extra-$(uname -r)这个包在不同Ubuntu版本里内容略有差异但它基本覆盖了主流USB转串口芯片驱动。装上之后重启一下系统再插串口设备大概率就能直接看到/dev/ttyUSB0了。第二种如果modprobe显示模块已经存在但插上设备后仍然不识别可能是模块对应的驱动被某个内核选项blacklist了。检查一下/etc/modprobe.d/下有没有相关配置文件grep -r blacklist.*ch341 /etc/modprobe.d/ 2/dev/null有的话把对应的注释或删除再执行sudo update-initramfs -u更新内核映像。这种情况比较少见但我在某些预装OEM版Ubuntu的笔记本上确实碰到过厂商为了省电把一系列串口相关模块全拉黑了。4.3 老内核或特殊芯片从源码编译驱动模块当你用的是老Ubuntu16.04/18.04或者交叉编译的内核apt包不一定能解决问题。此时需要从芯片厂商或内核社区拉源码手动编译。以CH340为例虽然官方WCH提供过Linux驱动源码但说实话官方驱动的质量非常一般代码风格老派而且随着内核版本更新经常编译不过。我更推荐从内核源码里提取ch341.c来编译或者干脆用内核自带的模块配合DKMS安装。如果是自己编译模块步骤大致如下安装内核头文件保证编译环境对得上当前内核版本sudo apt install linux-headers-$(uname -r) build-essential获取驱动源码。以WCH官方CH341驱动为例ch34x系列解压后里面有ch34x.c、Makefile。先打开Makefile确认KDIR指向的是当前内核源码目录一般写成/lib/modules/$(shell uname -r)/build即可。执行编译make加载测试sudo insmod ch34x.ko确认无误后安装到系统模块目录sudo cp ch34x.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ sudo depmod -a sudo modprobe ch34x这里有个致命的坑直接insmod的模块在重启后自动消失最稳妥的做法是装到kernel/drivers/usb/serial/目录并执行depmod让系统开机时自动加载。有的教程还会让你把模块名写进/etc/modules其实在depmod之后没必要重复加。再说说FTDI芯片。FT232在绝大多数Linux发行版里是免驱的但如果你拿到一个J-Link的USB桥接器、某个仿真器或者一块集成了FT2232的开发板它可能被识别成两个tty端口一个/dev/ttyUSB0用作调试串口一个/dev/ttyUSB1用作JTAG。如果只有一个端口出现另一个缺失建议查一下dmesg里有没有类似ftdi_sio: 0403:6010 is not a valid FTDI device的报错有的话大概率是驱动里对这个PID的支持不全需要手动指定echo 0403 6010 | sudo tee /sys/bus/usb-serial/drivers/ftdi_sio/new_id这个命令是把新ID临时加入驱动支持列表重启后失效适合临时应急。要是想长期生效可以写udev规则或直接改驱动源码里的id_table重新编译。4.4 用udev规则固定设备名称和权限设备节点是搞定了但有个新问题今天插上CH340是ttyUSB0明天插上某个开发板的板载串口又是ttyUSB0两个容易混。尤其当你同时用t113开发板和STM32开发板时默认名字全靠插入顺序决定一不小心就操作错串口发出指令发给根本不存在的设备。解决办法是用udev规则按芯片VID/PID和序列号绑定固定节点。在/etc/udev/rules.d/下新建文件99-usb-serial.rulesSUBSYSTEMtty, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, SYMLINKttyCH340, MODE0666保存后执行sudo udevadm control --reload-rules sudo udevadm trigger再插拔一次你就能在/dev/ttyCH340访问这个设备。注意规则里的ATTRS{idVendor}要和你实际插线的VID一致SYMLINK才是你想要的固定名称。MODE0666可以直接让所有用户读写省去用户组配置但安全性稍差。个人开发机无所谓要是公司环境还是建议用组权限方案。这个操作属于“锦上添花”但对多开发板用户来说实用性真的拉满。我在调试RK3588和imx6ull板子时同时插了两条USB串口线第N次把ttyUSB1当成ttyUSB0误刷之后就彻底依赖udev固定名了。5. 常见问题与排查技巧实录5.1 快速定位问题阶段表先给你一张速查表遇到问题直接对着查现象可能原因排查重点lsusb无新增设备USB线只能供电、端口故障、芯片烧毁换线换口测另一台电脑lsusb有设备dmesg停在New USB device found之后驱动缺失或驱动不匹配查lsmodmodprobe对应模块dmesg有now attached to ttyUSB0但/dev下没有设备节点被系统隐藏或udev规则异常检查/etc/udev/rules.d/用udevadm monitor观察设备节点存在但Permission denied用户权限不足加dialout组或写udev规则设备节点存在但打开报Resource busyModemManager或其他进程占用systemctl stop ModemManager查残留进程设备节点存在但收发乱码波特率不对、接线错误、共地问题核对波特率检查TX/RX是否交叉确认共地这张表不算全面但覆盖了“设备文件找不到”标题下90%的真实场景。剩下10%属于硬件电气问题比如转接芯片的TX/RX接了反、开发板串口电平是RS232而转接芯片是TTL电平这种要靠万用表和示波器去查。5.2 虚拟机和WSL另一类高频翻车现场很多初学者是在Windows主机上装VMware或VirtualBox虚拟机再在虚拟机里跑Ubuntu。这类环境如果出现“开发板串口连接Ubuntu后找不到设备”问题往往不在Ubuntu内部而在虚拟机软件对USB设备的透传设置。VMware的解决方案在“虚拟机设置-USB控制器”里确认开启了USB 2.0/3.0兼容然后在“可移动设备”菜单里把对应的USB转串口设备连接进虚拟机。这里有个细节有的USB控制器默认选了“自动连接”但Windows宿主机上的某个串口工具已经先抢占了设备虚拟机就始终无法拿到。先把宿主机上可能的串口工具全部关闭再让虚拟机连接成功率会高很多。VirtualBox稍微不一样需要在“设置-USB设备”里添加一条筛选器把VID:PID填进去比如CH340填1a86:7523这样每次插入时虚拟机才能自动接管。WSL的场景就更特殊了。WSL1没有完整的USB支持WSL2在较新的Windows版本里可以通过usbipd把USB设备附加到WSL里但前提是内核里编译了相应驱动。WSL的默认内核通常不会带CH340这类模块你需要自己编译内核。这个操作有点重如果你的主要目标是调试开发板建议直接用虚拟机或者物理机装Ubuntu双系统别在WSL上死磕。如果实在要在WSL下用搜usbipd-win的官方文档跟着做就行。5.3 设备节点反复出现又消失的供电问题有个特别隐蔽的问题开发板或串口线刚插上时dmesg里能看到设备识别/dev/ttyUSB0也出来了但没过几秒或每次一执行open()操作设备节点就消失。这种通常是供电不稳导致USB设备reset。USB规范里对供电电压、纹波有要求但开发板通过Type-C口供电时如果同时驱动了WIFI模块、舵机或者其他大电流设备USB电源轨瞬间被拉低芯片就重新枚举一次。dmesg里通常会看到多组usb 1-1: new low-speed USB device、device descriptor read/64, error -110循环。解决办法换供电方式。USB转串口线不要和开发板共用同一个USB HUB的电源开发板可以直接用独立5V电源适配器供电排除板载LDO压降问题。换一条粗壮的USB数据线。很多USB线芯细得像头发丝电压降大得离谱。如果开发板板载USB转串口芯片连着MCU的3.3V LDO而这个LDO同时还在给其他外设供电建议外接一个单独的3.3V稳压模块给芯片供电。从经验上看大部分“设备节点出现又消失”的案子最后都归结为线材或供电问题而不是驱动问题。5.4 设备节点存在但打不开的权限与占用排查Permission denied和Resource busy是两类完全不同的问题但新手常混在一起。遇到Permission denied直接看ls -l /dev/ttyUSB0的属主和权限位确认自己是否在dialout组。这里有个细节usermod -aG dialout $USER之后已经打开的终端里权限不会立刻刷新需要重新登录或者至少执行newgrp dialout。如果你用SSH远程连接Ubuntu调试开发板可能还要断开SSH重新连接一次权限组才会生效。遇到Resource busy先查占用进程。lsof是诊断利器sudo lsof /dev/ttyUSB0会列出当前打开这个设备文件的进程名和PID直接kill掉对应进程即可。如果lsof列出的进程是ModemManager建议直接禁用服务因为它在嵌入式串口调试场景下几乎只会捣乱。有一个特殊情况某些串口调试工具或第三方库比如PySerial在打开设备但未正确关闭时进程已经退出但内核里的tty端口还在重置过程中。这时等几秒再打开或者重启系统一般就能解决。这种不算系统bug是tty设备释放的异步特性导致的临界状态。5.5 接线和电平问题设备文件正常却收不到数据的排查设备文件这一关过了不代表串口调试就一定能顺利进行。很多人在/dev/ttyUSB0正常存在的情况下打开串口助手却什么都收不到或者全是乱码。收不到数据先查接线。USB转TTL线的TX要接开发板的RXRX接TX这个交叉关系常有人接反。如果板子是3.3V电平而你用的串口线是5V电平轻则乱码重则烧坏引脚。绝大多数开发板UART引脚是3.3V所以买串口线尽量选带3.3V/5V电平跳线的型号或者确认芯片是CH340G、CH340C这类支持3.3V供电的版本。乱码问题第一查波特率第二查公共地。很多USB转TTL线只有四根线VCC、GND、TX、RX接开发板时至少需要连接GND和交叉的TX/RXVCC一般不接因为开发板有自己的供电电压。两个设备没有共地时信号参考电平完全错乱在任何波特率下都是乱码。6. 日常维护中的几个小习惯最后聊点我在实际项目中养成的习惯不算高深但能省掉很多重复踩坑的时间。第一给每个常用串口设备写udev固定名。当你手里同时有三四块开发板的时候ttyUSB0到ttyUSB2的对应关系会让你记到崩溃。与其每回dmesg现查不如一开始就按芯片型号和板子做好固定映射多花五分钟后面省五十分钟。第二把串口测试做成一个简单脚本。比如用Python的PySerial写一个小工具自动扫描/dev/ttyUSB*、/dev/ttyACM*尝试打开并发送一个握手字符把能通的串口列出来。尤其是用STM32这类带Bootloader功能的板子时串口是否可读写经常意味着芯片是否进入了正确的下载模式这个脚本能快速告诉你问题在硬件还是软件侧。第三内核升级前先看一眼自己依赖的串口驱动是否兼容。Ubuntu滚动升级内核时有些第三方编译的驱动模块会失效。比如你曾经手动编译过CH341模块不在官方内核模块目录里维护升级内核后/lib/modules的路径变了模块就找不到了设备文件会突然消失。这时去/lib/modules/$(uname -r)检查一遍模块是否还在能少慌很多。第四、重要的一点是复盘的时候别一头扎进驱动代码里。根据我的经验“找不到设备文件”有七八成的可能性是USB线或供电问题是驱动问题的情况反而不多。先查lsusb再查dmesg用排除法一步步缩小范围比那种“怀疑驱动有问题就直接重编内核”的路线高效太多了。把这个顺序记牢这套排查流程基本能覆盖你绝大多数开发板串口调试的场景。如果你照着上面的方法排查完设备节点已经正常出现了那接下来就可以愉快地打开minicom、串口调试助手或者直接跑Python脚本进入真正的板卡调试环节了。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →