驱动适配要匹配什么
Linux 驱动是内核模块,跟内核版本和 CPU 架构是硬绑定:为某个内核编译的模块换到另一个内核上会报格式不匹配。信创平台的驱动适配因此有三条规矩——优先用整机或板卡厂商提供的适配包;自编译必须装与 uname -r 完全一致的 kernel-devel;加载前先看 modinfo 的版本与签名信息。
基本信息
| 适用平台 | ARM64(鲲鹏、飞腾)与 x86_64 信创服务器与桌面 |
|---|---|
| 前置条件 | 与运行内核一致的 kernel-devel,以及 gcc、make |
| 关键命令 | uname -r、modinfo、modprobe、lsmod、dkms |
| 生效方式 | modprobe 即时生效;开机自动加载需写 modules-load.d |
| 权限要求 | root |
典型使用场景
- 整机或板卡(RAID 卡、万兆网卡、GPU)到货后安装厂商驱动
- 系统内核升级后第三方驱动失效,需要重编
- 排查设备识别不到,区分是驱动没装还是模块没加载
- 把驱动纳入 DKMS 管理,减少内核升级后的人工介入
- 交付文档记录驱动包版本,便于后续复现与升级
现状与安装验证
现状与安装验证
uname -r # 当前运行内核,编译必须对齐它
lspci | grep -iE 'raid|gpu|ethernet' | head # 识别板卡型号
dnf install -y kernel-devel-$(uname -r) gcc make # 装与运行内核完全一致的开发头文件
modinfo <模块名> | head -15 # 看清版本、依赖与签名
modprobe <模块名> && dmesg -T | tail -20 # 加载模块并看内核日志反馈
lsmod | grep <模块名> # 确认模块已载入
echo <模块名> > /etc/modules-load.d/<模块名>.conf # 配置开机自动加载
dkms status # 纳管后查看 DKMS 状态失败现象与指向
| 现象 | 可能原因 | 确认方式 |
|---|---|---|
| modprobe 报 Invalid module format | 编译内核版本与运行内核不一致 | 对比 modinfo 的 vermagic 与 uname -r |
| 模块加载成功但设备仍不识别 | 依赖模块未加载或固件缺失 | lsmod 与 dmesg 末尾报错 |
| 报 Key was rejected by service | 安全启动拒绝未签名模块 | 查 mokutil --sb-state 与模块签名 |
| 内核升级后驱动失效 | 模块未随新内核重编 | dkms status 或手动重编确认 |
内核升级与驱动是绑定的:升级前先确认第三方驱动是否有对应新内核的版本,或已纳入 DKMS 管理,否则重启后设备会消失——这一项应固定写进升级检查清单。
从非官方渠道获取的驱动包可能夹带未审计代码,生产环境只用厂商官方适配包或自行从源码编译,并留存校验值以便追溯。