问题背景

在去年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设备


原因分析

  1. 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

测试

正常到达这步就可以与开发板通信了,但是配置完minicomminicom: 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串口问题相关推荐

  1. 解决Ubuntu22.04中向日葵无法被控制问题

    产生原因:向日葵与gdm3不兼容 解决方案: 1.安装lightdm,安装时选择lightdm为默认桌面 sudo apt-get install lightdm 2.或使用以下命令选择: sudo ...

  2. 两行命令解决ubuntu22.04安装网易云音乐后点击图标无反应的问题

    感谢知乎用户@拉布:https://zhuanlan.zhihu.com/p/518108518 1.终端中输入以下命令: cd /opt/netease/netease-cloud-music/ s ...

  3. Ubuntu 系列学习(五)ubuntu22.04安装flameshot火焰截图(图文)

    文章目录 ubuntu22.04安装flameshot v11(火焰截图) 1 火焰截图flameshot安装 1.1 方法一 克隆项目编译安装 1.2 方法二 .deb包安装 1.3 添加依赖时的报 ...

  4. ubuntu22.04 出现附加驱动全部灰色,无法使用专有驱动

    ubuntu22.04系统 :附加驱动全部灰色,无法使用专有驱动 原图忘记截屏了,现实问题是没有选择下面任何一个驱动,显示的是使用手动驱动,反正是一个都点不了,使用sudo 命令自动安装driver也 ...

  5. amd6800h安装ubuntu22.04 笔记本休眠花屏解决办法

    amd6800h是22年的zen3+ apu,而ubuntu22.04内核是5.15,驱动不兼容造成花屏现象是可以理解的 内核5.18更新了图形驱动,那么接下来就升级到5.18预计可以解决花瓶问题 网 ...

  6. Ubuntu22.04安装VMware16[解决各种安装问题]

    Ubuntu22.04安装VMware[快速解决各种安装问题] 0. 前言 1. 下载安装包 2. 安装依赖 2.1 安装gcc 2.2 安装make 2.3 安装lib 2.4 安装git 2.5 ...

  7. linux ubuntu22.04各种问题的解决

    c语言环境 在终端命令中: 1.安装vim:输入 sudo apt-get install vim 2.安装gcc:sudo apt-get install g++ 使用C环境 编译C文件a.c :g ...

  8. ubuntu22.04 解决界面不定时卡死且无法进入tty,只能强制关机的问题

    最近搞了个新本专门拿来工作,直接上ubuntu22.04环境,然后就经常卡死且无法进入tty,键盘鼠标等操作均无响应,只能强制关机, 开始排查现象的原因: 1.一开始是怀疑WIFI无线驱动的问题,于是 ...

  9. 安装ubuntu22.04 解决wifi6驱动问题 + 没有Realtek rtl8852be 驱动(本人电脑:Redimbook R7 5800H)

    Ubuntu 没有wifi图标,没有Realtek rtl8852be 驱动 问题原因: 由于该系列无线网卡属于"螃蟹网卡",inter12代 内核版本 > 5.18,Ubu ...

最新文章

  1. mysql工具navicat用户授权_Navicat使用教程:在Navicat Premium中管理MySQL用户 - 第4部分:权限管理器工具...
  2. 计算机再带word打不开,word打不开,详细教您怎么解决word打不开
  3. UVA - 1592:Database
  4. 禅道类似软件_项目管理软件之争,禅道和JIRA大对比
  5. Android 模拟器 GPU ON
  6. Java Unable to load library ‘gsdll64‘: 报错,解决方案
  7. 【AICC】2019训练营笔记
  8. C++ 单例模式 模版类(Meyers‘ Singleton)
  9. php curl curloptcookiesession,curlopt_cookie问题
  10. 深度学习visio作图技巧
  11. CF918D: MADMAX 题解
  12. python会计系统_在Python中进行会计的最佳实践
  13. u2020 华为_顶级锐龙标压U加持!华为MateBook 13 2020锐龙版评测:轻薄本稳压40W
  14. curl unmatched close brace/bracket 处理
  15. 利用tushare平台,统计过去一年A股涨停板
  16. E - Stripies
  17. 2015 ACM Arabella Collegiate Programming Contest(F题)
  18. 特斯拉、软件与颠覆,下一家震惊世界的科技公司会是谁?
  19. 2020哈工大计算机考研大纲,2020哈尔滨工业大学854计算机基础硕士研究生入学考试大纲...
  20. 工业CT之三维重建技术

热门文章

  1. 二十英里法则--实现定下的目标,其实或许没那么困难(部分转载)
  2. 小米开放平台接入笔记
  3. 第二十一届全国青少年信息学奥林匹克联赛 “华东师大二附中”杯上海赛区竞赛规程
  4. 小米有Android11吗,真实体验说说安卓之光的小米11 Ultra有什么有缺点
  5. USB总线专题(五)——Mass storage 设备相关知识
  6. phpCMS V9 史上最详细环境搭建(windows)
  7. 2022“杭电杯”中国大学生算法设计超级联赛(6)题解报告
  8. 一个月能卖400套房子的顶尖模式,跨界的威力
  9. notpad++快捷的编写代码并调用编译器编译代码
  10. 控件注册监听器编写响应的三种方式