解决Ubuntu22.04无法使用ch34x串口问题

这篇具有很好参考价值的文章主要介绍了解决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设备


原因分析

  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
Instructions

Note: 1.Please run followed executable programs as root privilege
      2.Current Driver support versions of linux kernel range from 2.6.25 to 3.13.x
      3.Current Driver support 32bits and 64bits linux systems

Usage:
	(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与开发板进行通信文章来源地址https://www.toymoban.com/news/detail-790072.html


到了这里,关于解决Ubuntu22.04无法使用ch34x串口问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决 Ubuntu 22.04 Snap Store 无法升级更新的三个方法

    1、Ubuntu 22.04 Snap Store 无法自动更新原因         Snap Store 的进程一直在后台运行,就算关闭图形界面的 Snap Store APP ,在终端使用命令也无法更新升级。所以我们要进行更新,需要先关闭 Snap Store 后台进程,再用指令进行更新。 2、Snap Store 关闭进程并升级的方法 方法一:

    2024年02月09日
    浏览(54)
  • ubuntu22.04 出现附加驱动全部灰色,无法使用专有驱动

    原图忘记截屏了,现实问题是没有选择下面任何一个驱动,显示的是使用手动驱动,反正是一个都点不了,使用sudo 命令自动安装driver也出现了报错,根本不晓得如何解决 大概就是这上面所有的都灰色了,而且根本都点击不了。直接给整的绷不住了。。。。。 先在终端中输入

    2024年02月15日
    浏览(43)
  • Ubuntu22.04 在 VMware 17 无法实现拖放复制操作解决办法

    环境: 主机:Windows10 虚拟机软件:VMware Workstation Pro 17.0 虚拟机系统:Ubuntu Desktop 22.04 LTS 软件:open-vm-tools (open-vm-tools-desktop) 2023.07.04更新(请看完下面另外的内容再来看这个): 在最近的使用中发现一个问题,因为屏幕分辨率和显示器大小的问题,需要将系统缩放设置成1

    2024年03月24日
    浏览(57)
  • 解决ubuntu 22.04新内核6.5.0-15无法编译NVIDIA显卡驱动

    这里的新内核应该包括6.5.*系列的 今天我在安装NVIDIA显卡驱动发现了一个问题,主要日志如下所示: 从这个日志可以发现,他与内核冲突了。于是借助魔法搜到了ubuntuforums.org的多种方法,一个是换内核版本,有人说切换到6.2系列就好了,但我实在不行破坏内核,万一改了内

    2024年03月17日
    浏览(54)
  • Ubuntu22.04没有ttyUSB(无法访问 ‘/dev/ttyUSB‘: 没有那个文件或目录)问题解决

    环境:ubuntu22.04,使用需求为USB转串口 在给串口读写权限时,出现问题: 无法访问 ‘/dev/ttyUSB0’: 没有那个文件或目录 原因1:USB口没有连接 原因2:brltty驱动占用问题 针对原因1:将设备连接到USB口,再次使用查看命令 结果如图: 针对原因2: sudo dmesg | grep brltty 若果出现

    2024年02月11日
    浏览(107)
  • 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置

    沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置 沁恒 CH32V208(四): CH32V208 网络DHCP示例代码分析 沁恒 CH32V208(五): CH32V208 运行FreeRTOS示例的说明 CH32V208WBU6 评估板

    2024年02月02日
    浏览(50)
  • ubuntu22.04安装单系统出错“无法将GURB安装到/dev/sda”的详细解决方案

    安装环境: J1900 + 8g + 120g mSATA,3.5寸工业小主板。 单硬盘安装单系统ubuntu22.04版本,采用u盘启动安装。 从官网下载22.04系统,并用Rufus做成启动盘,安装时候,跳出窗口显示安装失败“无法将GURB安装到/dev/sda”,执行“gryb-install /dev/sda”失败。 折腾了好几天,网上的解决方案

    2024年04月29日
    浏览(47)
  • Ubuntu 22.04及其他版本离线安装Docker(dep文件安装方式)|解决docker无法启动问题

    一 遇到问题: Ubuntu从16.04升级到22.04后,发现16.04按下列方式离线安装的docker无法启动,且提供的docker-ce版本过低(docker-18.06.3-ce) 离线安装docker及常用docker命令_linux离线安装docker_最小森林的博客-CSDN博客 文章目录1 离线安装docker(需要root权限)1.1 安装过程1.2 docker注册为servi

    2024年02月15日
    浏览(39)
  • Qv2ray在Ubuntu22.04系统中代理命令行终端(全局代理)方法 (解决终端上无法使用git clone,下载github文件慢的问题)

     在打开的bashrc文件最后面输入以下内容( 注意后面的8889和1089端口号必须和Ubuntu,Qv2ray上面的端口一致。 ): 如下图所示: 输入完成后, 按Ctrl+O ,然后 按回车键 确认保存, 按Ctrl+X 退出文本编辑,最后 重启电脑。 返回下图为代理成功: 至此终端上使用git clone  ,下载

    2024年04月14日
    浏览(87)
  • ubuntu 22.04 AX211无法驱动

    安装完ubuntu 22.04发现自己的AX211无法驱动,找不到WiFi。查看dmesg日志发现: 然后就没有其它日志了,发现DEVICE是0x7A70,SUBSYSTEM_DEVICE为0x0244。看了Intel的WiFi驱动,说是AX210在5.10+的内核就支持了,AX211在5.14+的内核就支持。 https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi 而22.04的内核

    2024年02月11日
    浏览(111)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包