一、问题描述
NVIDIA AGX orin工控机,Ubuntu22.04系统下,串口设备无法打开,缺少PL2303驱动。
二、 解决办法
- 查看USB串口号
-
python -m serial.tools.list_ports
出现返回值“no ports found”说明只是缺少驱动,直接进行步骤2即可。
本机出现了上述返回值,说明Python 环境中没有安装 serial模块。此时需要执行命令:
sudo apt install python3-serial
安装完成后再次 查看串口号,返回“no ports found”。
- 查看Linux内核版本
- 下载驱动包(详见文件夹中的压缩包)
- 安装驱动包
- 根据内核版本选择驱动包,由于本机内核版本为5.15,而文件夹中最高版本为5.4.89,故选择最高版本安装。
- 进入“5.4.89_ok”文件夹,修改pl2303.c文件:
//修改433行
static int pl2303_port_remove(struct usb_serial_port *port)
//改成
static void pl2303_port_remove(struct usb_serial_port *port)
//修改439行
return 0;
//改成
return ;
//修改914行
static int pl2303_get_serial(struct tty_struct *tty,
//改成
static void pl2303_get_serial(struct tty_struct *tty,
//修改923行
return 0;
//改成
return ;
3.在“5.4.89_ok”文件夹下打开终端,执行:
make all
sudo rmmod pl2303.ko
sudo insmod pl2303.ko
出现如下错误:
表示你的模块依赖于某些未导出符号的内核功能。以下是一些解决方案和调试步骤:
3.1查看详细错误信息
使用以下命令查看内核日志,获取更详细的错误信息:
sudo dmesg | tail
根据dmesg 输出,pl2303 模块在加载时遇到了多个 "Unknown symbol" 错误。这些错误表明 pl2303 模块依赖于 usb-serial 驱动中的一些函数,但这些函数未被导出或相关模块未加载。
3.2解决步骤
- 确保 usb-serial 模块已加载
pl2303 驱动依赖于 usb-serial 模块。你需要确保该模块已加载。可以通过以下命令检查:
lsmod | grep usbserial
如果没有输出,说明 usb-serial 模块未加载。使用以下命令加载它:
sudo modprobe usbserial
- 重新加载 pl2303 模块
加载 usb-serial 模块后,尝试重新加载 pl2303 模块:
sudo rmmod pl2303
sudo insmod pl2303.ko
无返回值,即完成加载。
- 复制文件
sudo cp pl2303.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial
- 查看效果
此时应该是能识别到串口了。
输入:sudo dmesg | tail
发现多了一个:pl2303
(确保串口设备连接稳固后)输入: python -m serial.tools.list_ports
也能看见多了一个USB串口号:/dev/ttyUSB0