ubuntu中找不到串口问题排查
问题:虚拟机ubuntu中,已经显示串口设备连接成功,但是在/dev/tty* 设备下找不到串口设备,虚拟机设置无误,排查ubuntu内部问题。
1. 检查设备识别情况
打开Ubuntu的终端,依次输入以下命令,观察系统是否识别到了硬件:
bash
# 查看系统日志中是否有串口设备相关的信息
dmesg | grep tty
# 或者尝试更具体的筛选
dmesg | grep usb
# 列出所有已识别的串口设备
ls /dev/tty*
# 特别注意 /dev/ttyS*, /dev/ttyUSB*, /dev/ttyACM* 等设备文件
# 查看USB设备列表
lsusb
如果 lsusb
显示了当前设备下串口转换芯片(如CH340、FT232、CP2102等),但 /dev/
下没有对应的 ttyUSB*
或 ttyACM*
设备,问题可能出在驱动或权限上。
2. 检查并安装驱动
对于常见的CH340芯片,在较新的Linux内核(如Ubuntu 22.04使用的内核)中可能存在驱动问题。
首先检查当前内核是否识别了硬件:
bash
# 查看驱动信息 lsmod | grep ch34 # 或者更广泛地查看usbserial lsmod | grep usbserial
如果没有任何输出,或者设备识别为
ttyCH341USBx
而不是ttyUSBx
,你可能需要重新编译安装驱动。可以参考搜索结果中的方案:卸载现有驱动(如果有):
sudo rmmod ch341
下载并编译正确的驱动(具体步骤可能因驱动版本和内核版本而异,请参考相关驱动源码的说明)。
安装新驱动后,重新插拔USB设备或重启虚拟机。
操作记录:
ant@ant-virtual-machine:~$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 011: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 004: ID 0e0f:0008 VMware, Inc. Virtual Bluetooth Adapter
Bus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
ant@ant-virtual-machine:~$ lsmod | grep ch34
ch341 24576 0
usbserial 69632 1 ch341
从输出结果来看,ubuntu系统已经正确识别到了串口,并且串口驱动也正常。
lsusb
已经识别到了 CH340 转换器(ID 1a86:7523)
lsmod
显示 ch341 驱动模块已经加载,并且关联了 usbserial 模块
3. 检查内核消息
查看内核日志中关于CH340的详细信息:
sudo dmesg | grep -i ch34
这会显示设备创建过程中出现的任何错误。
操作记录:
ant@ant-virtual-machine:~$ sudo dmesg | grep -i ch34
[ 2248.192716] usbcore: registered new interface driver ch341
[ 2248.192724] usbserial: USB Serial support registered for ch341-uart
[ 2248.192735] ch341 1-2.2:1.0: ch341-uart converter detected
[ 2248.201560] usb 1-2.2: ch341-uart converter now attached to ttyUSB0
[ 2248.729083] usb 1-2.2: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
[ 2248.732131] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[ 2248.732147] ch341 1-2.2:1.0: device disconnected
[ 2357.621916] ch341 1-2.2:1.0: ch341-uart converter detected
[ 2357.639750] usb 1-2.2: ch341-uart converter now attached to ttyUSB0
[ 2358.194838] usb 1-2.2: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
[ 2358.198221] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[ 2358.198235] ch341 1-2.2:1.0: device disconnected
从 dmesg
输出可以非常清楚地看到问题:brltty 服务正在与 ch341 驱动程序竞争对 USB 串口设备的控制权,导致设备反复连接和断开。
解决方案是停止并禁用brltty服务,然后重新连接设备。
4. 禁用brltty服务
brltty
是一个为视障用户提供盲文显示支持的服务,但它有时会错误地尝试控制串口设备,与正常的串口驱动程序发生冲突。
1. 停止并禁用 brltty 服务
# 停止 brltty 服务
sudo systemctl stop brltty
# 禁用 brltty 服务,防止它开机自启动
sudo systemctl disable brltty
# 确认服务已停止
systemctl status brltty
2. 完全移除 brltty 包
如果不需要盲文支持,最好完全移除 brltty:
# 卸载 brltty
sudo apt remove brltty
# 或者彻底清除(包括配置文件)
sudo apt purge brltty
3. 重启系统或重新插拔设备
完成上述步骤后,请重新插拔您的 CH340 设备,或者重启系统:
# 重新插拔设备后检查
ls /dev/ttyUSB*
# 查看内核消息确认没有冲突
dmesg | grep -i ch34 | tail -5
5.输出结果
最终,查看串口设备:
virtual-machine:~$ ls /dev/ttyUSB*
/dev/ttyUSB0
正确显示了串口设备,之后,就可以设置串口设备读写权限,使用串口设备。
最终,查看串口设备:
virtual-machine:~$ ls /dev/ttyUSB*
/dev/ttyUSB0
正确显示了串口设备,之后,就可以设置串口设备读写权限,使用串口设备。
ubuntu 系统重启后,再次查看串口驱动模式消息:
virtual-machine:~/Desktop$ sudo dmesg | grep -i ch34
[ 3.247739] usbcore: registered new interface driver ch341
[ 3.247747] usbserial: USB Serial support registered for ch341-uart
[ 3.247758] ch341 1-2.2:1.0: ch341-uart converter detected
[ 3.256254] usb 1-2.2: ch341-uart converter now attached to ttyUSB0
usb 串口模块已经没有冲突了。