Ubuntu 20.04安装绿联PL2303串口驱动

news/2025/2/4 9:57:55/

之前安过CentOS的驱动,这篇是ubuntu的

绿联PL2303串口驱动下载

绿联USB转DB9,RS232串口线,Windows驱动下载地址

下载后解压有个linux目录,驱动需要根据内核进目录自行编译

hello@hello-ThinkServer-TS80X:/root$ uname -r
5.15.0-46-generic

可以看到ubuntu的版本是5.15,但是目前文件夹最大版本是5.4.89,所以死马当活马医,用这个试试

cd 5.4.89_ok/
make all

编译报错

root@hello-ThinkServer-TS80X:~/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok# make all
make -C /lib/modules/5.13.0-30-generic/build M=/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok modules
make[1]: 进入目录“/usr/src/linux-headers-5.13.0-30-generic”CC [M]  /root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok/pl2303.o
/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok/pl2303.c:1109:17: error: initialization of ‘void (*)(struct tty_struct *, struct serial_struct *)’ from incompatible pointer type ‘int (*)(struct tty_struct *, struct serial_struct *)’ [-Werror=incompatible-pointer-types]1109 |  .get_serial =  pl2303_get_serial,|                 ^~~~~~~~~~~~~~~~~
/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok/pl2303.c:1109:17: note: (near initialization for ‘pl2303_device.get_serial’)
/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok/pl2303.c:1122:18: error: initialization of ‘void (*)(struct usb_serial_port *)’ from incompatible pointer type ‘int (*)(struct usb_serial_port *)’ [-Werror=incompatible-pointer-types]1122 |  .port_remove =  pl2303_port_remove,|                  ^~~~~~~~~~~~~~~~~~
/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok/pl2303.c:1122:18: note: (near initialization for ‘pl2303_device.port_remove’)
/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok/pl2303.c:622:13: warning: ‘pl2303_enable_xonxoff’ defined but not used [-Wunused-function]622 | static bool pl2303_enable_xonxoff(struct tty_struct *tty, const struct pl2303_type_data *type)|             ^~~~~~~~~~~~~~~~~~~~~
/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok/pl2303.c:258:12: warning: ‘pl2303_update_reg’ defined but not used [-Wunused-function]258 | static int pl2303_update_reg(struct usb_serial *serial, u8 reg, u8 mask, u8 val)|            ^~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:281:/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok/pl2303.o] 错误 1
make[1]: *** [Makefile:1879:/root/PL2303芯片驱动3.7/PL2303芯片驱动3.7/Linux/PL2303G_Linux_Driver_v1.0.6/5.4.89_ok] 错误 2
make[1]: 离开目录“/usr/src/linux-headers-5.13.0-30-generic”
make: *** [Makefile:4:all] 错误 2

报错主要有两处,是类型不匹配

第一个报错

pl2303.c:1109:17: error: initialization of ‘void (*)(struct tty_struct *, struct serial_struct *)’ from incompatible pointer type ‘int (*)(struct tty_struct *, struct serial_struct *)’ [-Werror=incompatible-pointer-types]

类型不兼容,改类型

修改914行 

static int pl2303_get_serial(struct tty_struct *tty,  

改成

static void pl2303_get_serial(struct tty_struct *tty,

第二个报错同理

pl2303.c:1122:18: error: initialization of ‘void (*)(struct usb_serial_port *)’ from incompatible pointer type ‘int (*)(struct usb_serial_port *)’ [-Werror=incompatible-pointer-types]


也是类型不兼容

修改433行

static int pl2303_port_remove(struct usb_serial_port *port) 

改成

 static void pl2303_port_remove(struct usb_serial_port *port)

重新用make all编译

有两个 return 0的报错

pl2303.c:439:9: error: ‘return’ with a value, in function returning void [-Werror=return-type]439 |  return 0;
pl2303.c:923:9: error: ‘return’ with a value, in function returning void [-Werror=return-type]923 |  return 0;

将两个return 0;改成return;即可

重新用make all编译成功

拷贝编译模块

sudo cp pl2303.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial

编辑/etc/modules文件添加驱动名pl2303

sudo nano /etc/modules
#添加内容
pl2303
#保存

最后重启

reboot

重启之后可以使用了

那么怎么判断usb串口驱动是否正常呢?

1.判断是否有/dev/ttyUSB* 设备 这个不能作为判断标准,接入usb设备后就能查到这个设备

2.判断dmesg | grep tty 是否输出usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0 这个也不能作为判断标准,接入usb后也会有这个

3.stty -F 测试收发 这个能作为判断标准

4.minicom程序测试收发 这个能作为判断标准


http://www.ppmy.cn/news/368789.html

相关文章

LINUX串口驱动安装 一条龙服务

准备工作 1. 在控制台输入lsmod,先看看能否检测到这个设备,就看有没有pl2303字眼可以了。如果有,则不需要再装驱动。 2. 另外如果有的话最好再用dmesg| grep usb查找如果看到: drivers/usb/serial/usb-serial.c: USB Serial su…

Linux驱动-内核uart串口驱动分析

前言 写文章的目的是想通过记录自己的学习过程,以便以后使用到相关的知识点可以回顾和参考。 一、简介 串口是很常用的一个外设,在 Linux 下通常通过串口和其他设备或传感器进行通信,根据电平的不同,串口分为 TTL ,…

串口驱动中使用FIFO

FIFO是什么? FIFO( First Input First Output) 简单说就是指先进先出。它是一种数据存储或传输模式,可以硬件实现也可以软件实现,大多数用来缓存数据,减少操作次数,提高传输效率。 串口实现中其实在两处运用了FIFO。…

UART串口驱动代码编写及总结

芯片内置UART接口,用于与外部进行异步串行通信。串口控制器有如下特征:1,内置波特率发生器,支持不同波特率的配置;2,数据位宽支持5/7/8bit;3 停止位可配置成1或2bit;4,可…

USB转串口那些事儿—串口驱动类型

USB转串口设备在主机上使用时需要配合USB设备驱动,根据使用场景的不同,又可以细分为不同类型的USB转串口应用,常见有:USB转VCP虚拟串口、USB转CDC虚拟串口、USB HID转串口、安卓AOA转串口等。其中以USB转VCP虚拟串口应用最为广泛。…

Linux 串口驱动

1 串口本质上也是字符设备 !!!!!!!!!!!!串口是不支持热拔插的。如果强行热拔插,容易损坏串口芯片!!!!!!!!!!!!!!!!!!!!! 名词解释:流控 "软件”流控制 :帧头帧尾 “硬件”流控制:信号线 一。流程 个人建议只要能够读懂代码,…

C# 串口驱动封装成类库

由于最近写了许多软件都需要调用到串口驱动,本来 C#自带的已经封装的挺好了,不过为了以后图省事,所以在C#串口驱动的基础上封装了一个类库,未来只要引用一个类库,用两行代码直接完成了串口的操作。下面讲一下串口类库里…

思科(Cisco)7000交换机软件版本升级步骤

思科(Cisco)交换机软件版本升级步骤 一、准备软件版本 在思科官方网站(思科官网传送门)下载你需要的系统版本文件,将软件版本准备好拷贝到U盘。 二、准备设备 将交换机加电启动,通过CRT- console进行连接…