解决Ubuntu22.04无法使用ch34x串口问题
问题背景
在去年RDC2022上很幸运抽中了纪念板柿饼M7。在此感谢RT-Thread!!!本文介绍了Ubuntu22.04下开发RT Smart遇到的无法使用ch34x串口问题。
问题描述
Ubuntu22.04无法使用ch34x串口
使用lsusb
命令可以看到有Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics CH340 serial converter
是能识别出ch34x设备
原因分析
- Ubuntu22.04自带的ch34x驱动版本过老
使用ls /lib/modules/$(uname -r)/kernel/drivers/usb/serial
命令查看Ubutnu自带驱动,找到ch341.ko
发现是2013年的文件…(无语~)先把旧驱动删除sudo rm ch341.ko
找到一篇相似的文章ubuntu20.4系统安装CH340驱动并使用串口调试助手看来不是我一个人遇到相同的问题…
2.brltty
进程占用了串口
使用sudo dmesg | grep tty
命令可以看到
[ 0.223411] printk: console [tty0] enabled
[ 44.099146] usb 1-1: ch341-uart converter now attached to ttyUSB0
[ 44.673749] usb 1-1: usbfs: interface 0 claimed by ch34x while ‘brltty’ sets config #1
[ 44.675063] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
解决过程
WCH官网下载最新的驱动CH341SER_LINUX.ZIP
解压驱动
unzip CH341SER_LINUX_ZIP
得到三个文件ch34x.c
Makefile
readme.txt
// ChangeLog
// 1.0 - 1.1 modified to solve transmition between ch341 and ch341
// 1.1 - 1.2 Support high Linux kernel
InstructionsNote: 1.Please run followed executable programs as root privilege2.Current Driver support versions of linux kernel range from 2.6.25 to 3.13.x3.Current Driver support 32bits and 64bits linux systemsUsage:(load or unload linux driver of CH34x)//compile #make//load ch34x chips driver#make load//unload ch34x chips driver#make unload
// 1.2 - 1.3 Fix some bugs
编译安装驱动
readme.txt里面介绍到驱动的加载方式,但注意到第7行写着支持的内核版本从2.6.25 to 3.13.x
隐约感觉问题不妙
敲入make
命令后,果然出现了错误(这年头官网的驱动也不靠谱哇)
make -C /lib/modules/5.15.0-58-generic/build M=/home/$USER/Documents/CH341SER_LINUX
make[1]: Entering directory '/usr/src/linux-headers-5.15.0-58-generic'CC [M] /home/$USER/Documents/CH341SER_LINUX/ch34x.o
/home/$USER/Documents/CH341SER_LINUX/ch34x.c: In function ‘ch34x_close’:
/home/$USER/Documents/CH341SER_LINUX/ch34x.c:591:9: error: unknown type name ‘wait_queue_t’; did you mean ‘wait_event’?591 | wait_queue_t wait;| ^~~~~~~~~~~~| wait_event
/home/$USER/Documents/CH341SER_LINUX/ch34x.c:591:22: warning: unused variable ‘wait’ [-Wunused-variable]591 | wait_queue_t wait;| ^~~~
/home/$USER/Documents/CH341SER_LINUX/ch34x.c:590:14: warning: unused variable ‘timeout’ [-Wunused-variable]590 | long timeout;| ^~~~~~~
/home/$USER/Documents/CH341SER_LINUX/ch34x.c:589:13: warning: unused variable ‘bps’ [-Wunused-variable]589 | int bps;| ^~~
/home/$USER/Documents/CH341SER_LINUX/ch34x.c: At top level:
/home/$USER/Documents/CH341SER_LINUX/ch34x.c:1297:27: error: initialization of ‘unsigned int (*)(struct tty_struct *)’ from incompatible pointer type ‘int (*)(struct tty_struct *)’ [-Werror=incompatible-pointer-types]1297 | .write_room = ch34x_write_room,| ^~~~~~~~~~~~~~~~
/home/$USER/Documents/CH341SER_LINUX/ch34x.c:1297:27: note: (near initialization for ‘ch34x_device.write_room’)
/home/$USER/Documents/CH341SER_LINUX/ch34x.c:1298:28: error: initialization of ‘unsigned int (*)(struct tty_struct *)’ from incompatible pointer type ‘int (*)(struct tty_struct *)’ [-Werror=incompatible-pointer-types]1298 | .chars_in_buffer = ch34x_chars_in_buffer,| ^~~~~~~~~~~~~~~~~~~~~
/home/$USER/Documents/CH341SER_LINUX/ch34x.c:1298:28: note: (near initialization for ‘ch34x_device.chars_in_buffer’)
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:297: /home/$USER/Documents/CH341SER_LINUX/ch34x.o] Error 1
make[1]: *** [Makefile:1902: /home/$USER/Documents/CH341SER_LINUX] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.15.0-58-generic'
make: *** [Makefile:5: default] Error 2
uname -r
可查看操作系统的发行版号,获得Ubuntu22.04的Linux版本是5.15.0-58-generic
在Linux kernel source code v5.15查看ch341.c的源代码,直接复制到CH341SER_LINUX/ch34x.c
中,重新make
,此次通过。
在目录执行sudo make load
命令,出现以下错误
modprobe usbserial
insmod ch34x.ko
insmod: ERROR: could not insert module ch34x.ko: File exists
make: *** [Makefile:10: load] Error 1
将目录中生成ch34x.ko
文件复制到/lib/modules/$(uname -r)/kernel/drivers/usb/serial
下,使用lsmod
查看模块,发现已识别。
Module Size Used by
ch34x 24576 0
usbserial 57344 1 ch34x
测试
正常到达这步就可以与开发板通信了,但是配置完minicom
后minicom: cannot open /dev/ttyUSB0: No such file or directory
这时查看/dev/ttyUSB*
发现没有此文件
zsh: no matches found: /dev/ttyUSB*
使用dmesg
查找原因sudo dmesg | grep tty
[ 0.223411] printk: console [tty0] enabled
[ 44.099146] usb 1-1: ch341-uart converter now attached to ttyUSB0
[ 44.673749] usb 1-1: usbfs: interface 0 claimed by ch34x while 'brltty' sets config #1
[ 44.675063] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
这里出现了brltty
进程,通过官网得知:
BRLTTY is a background process (daemon) providing access to the Linux/Unix console (when in text mode) for a blind person using a refreshable braille display.
brltty是一个后台进程(守护进程),为盲人提供对Linux/Unix控制台的访问(当处于文本模式时),使用可刷新盲文显示。
直接删除sudo apt remove brltty
重新连接开发板ls /dev/ttyUSB*
这时已经出现了/dev/ttyUSB0
这个设备!!!
此时sudo minicom -c on
可正常使用minicom
与开发板进行通信
解决Ubuntu22.04无法使用ch34x串口问题相关推荐
- 解决Ubuntu22.04中向日葵无法被控制问题
产生原因:向日葵与gdm3不兼容 解决方案: 1.安装lightdm,安装时选择lightdm为默认桌面 sudo apt-get install lightdm 2.或使用以下命令选择: sudo ...
- 两行命令解决ubuntu22.04安装网易云音乐后点击图标无反应的问题
感谢知乎用户@拉布:https://zhuanlan.zhihu.com/p/518108518 1.终端中输入以下命令: cd /opt/netease/netease-cloud-music/ s ...
- Ubuntu 系列学习(五)ubuntu22.04安装flameshot火焰截图(图文)
文章目录 ubuntu22.04安装flameshot v11(火焰截图) 1 火焰截图flameshot安装 1.1 方法一 克隆项目编译安装 1.2 方法二 .deb包安装 1.3 添加依赖时的报 ...
- ubuntu22.04 出现附加驱动全部灰色,无法使用专有驱动
ubuntu22.04系统 :附加驱动全部灰色,无法使用专有驱动 原图忘记截屏了,现实问题是没有选择下面任何一个驱动,显示的是使用手动驱动,反正是一个都点不了,使用sudo 命令自动安装driver也 ...
- amd6800h安装ubuntu22.04 笔记本休眠花屏解决办法
amd6800h是22年的zen3+ apu,而ubuntu22.04内核是5.15,驱动不兼容造成花屏现象是可以理解的 内核5.18更新了图形驱动,那么接下来就升级到5.18预计可以解决花瓶问题 网 ...
- Ubuntu22.04安装VMware16[解决各种安装问题]
Ubuntu22.04安装VMware[快速解决各种安装问题] 0. 前言 1. 下载安装包 2. 安装依赖 2.1 安装gcc 2.2 安装make 2.3 安装lib 2.4 安装git 2.5 ...
- linux ubuntu22.04各种问题的解决
c语言环境 在终端命令中: 1.安装vim:输入 sudo apt-get install vim 2.安装gcc:sudo apt-get install g++ 使用C环境 编译C文件a.c :g ...
- ubuntu22.04 解决界面不定时卡死且无法进入tty,只能强制关机的问题
最近搞了个新本专门拿来工作,直接上ubuntu22.04环境,然后就经常卡死且无法进入tty,键盘鼠标等操作均无响应,只能强制关机, 开始排查现象的原因: 1.一开始是怀疑WIFI无线驱动的问题,于是 ...
- 安装ubuntu22.04 解决wifi6驱动问题 + 没有Realtek rtl8852be 驱动(本人电脑:Redimbook R7 5800H)
Ubuntu 没有wifi图标,没有Realtek rtl8852be 驱动 问题原因: 由于该系列无线网卡属于"螃蟹网卡",inter12代 内核版本 > 5.18,Ubu ...
最新文章
- mysql工具navicat用户授权_Navicat使用教程:在Navicat Premium中管理MySQL用户 - 第4部分:权限管理器工具...
- 计算机再带word打不开,word打不开,详细教您怎么解决word打不开
- UVA - 1592:Database
- 禅道类似软件_项目管理软件之争,禅道和JIRA大对比
- Android 模拟器 GPU ON
- Java Unable to load library ‘gsdll64‘: 报错,解决方案
- 【AICC】2019训练营笔记
- C++ 单例模式 模版类(Meyers‘ Singleton)
- php curl curloptcookiesession,curlopt_cookie问题
- 深度学习visio作图技巧
- CF918D: MADMAX 题解
- python会计系统_在Python中进行会计的最佳实践
- u2020 华为_顶级锐龙标压U加持!华为MateBook 13 2020锐龙版评测:轻薄本稳压40W
- curl unmatched close brace/bracket 处理
- 利用tushare平台,统计过去一年A股涨停板
- E - Stripies
- 2015 ACM Arabella Collegiate Programming Contest(F题)
- 特斯拉、软件与颠覆,下一家震惊世界的科技公司会是谁?
- 2020哈工大计算机考研大纲,2020哈尔滨工业大学854计算机基础硕士研究生入学考试大纲...
- 工业CT之三维重建技术
热门文章
- 二十英里法则--实现定下的目标,其实或许没那么困难(部分转载)
- 小米开放平台接入笔记
- 第二十一届全国青少年信息学奥林匹克联赛 “华东师大二附中”杯上海赛区竞赛规程
- 小米有Android11吗,真实体验说说安卓之光的小米11 Ultra有什么有缺点
- USB总线专题(五)——Mass storage 设备相关知识
- phpCMS V9 史上最详细环境搭建(windows)
- 2022“杭电杯”中国大学生算法设计超级联赛(6)题解报告
- 一个月能卖400套房子的顶尖模式,跨界的威力
- notpad++快捷的编写代码并调用编译器编译代码
- 控件注册监听器编写响应的三种方式