宇泰串口卡驱动在Ubuntu22.04编译、安装汇总
从官网下载驱动官网地址
上传到Ubuntu, 目录结构如下:
驱动源代码: 驱动代码是基于开源项目编译来的
编译路径不能有中文路径,否则可能有类似错误
源码是基于Linux2.3内核编译,我当前是6.8.0-51,数据结构有升级,需要调整以下,否则有类似编译错误:
代码调整如下:
修改以上内容,应该就可以编译成功。
编译成功后,手动安装驱动,遇到一个问题,解决了好长时间
insmod: ERROR: could not insert module test.ko: Invalid module format
原因非常多,有说是gcc版本与编译Linux内核的版本不匹配,依赖的内核源码不匹配等等。
总体原因是:
linux-header搞坏了,也就是/lib/modules/$(uname -r)/build指向的kernel tree。重新安装以下linux header。
为了验证这个问题,我写了一个简单的驱动模块,没有业务逻辑,发现也是安装不成功。下面具体讲一下排除办法:
uname -r // 先查看当前操作系统的linux内核版本
dpkg -l | grep linux-image // 查看已经安装的内核linux-header版本,把多余的删掉
apt remove --purge linux-image-6.8.0-50-generic
安装成功后:
但是无法显示ttyXR串口可用,查看一下日志
dmesg | tail -20
两种解决办法:一种是对内核进行签名,一种禁用安全启动
可能是设备的原因,我这里各种配置都试了一遍,在UEFI模式下还是无法成功加载驱动。然后切换到Legacy 模式意外的成功了。原来Legacy主要是没有安全启动模块,对系统安全有一些威胁,但测试环境可以忽略。