根本原因是旧驱动未适配新内核的头文件、API或构建体系;需先用uname -r确认当前内核版本,再通过dkms status检查驱动注册状态,补全linux-headers-$(uname -r)等依赖后,执行dkms remove/add/build/install全流程重建模块。

麒麟系统更新内核后第三方驱动模块失效,表现为网卡消失、显卡黑屏、声卡无声或USB设备无法识别,根本原因是旧驱动模块未适配新内核的头文件、API签名或构建体系,系统启动时直接跳过加载。
确认当前内核与驱动状态
先查清系统到底在跑哪个内核:运行 uname -r,输出类似 5.10.0-109-generic 或 5.15.0-112-kylin-48-generic 的字符串——这串字符就是后续所有操作的关键锚点。
再看DKMS是否已注册目标驱动:执行 sudo dkms status。若输出为空,或显示 xxx-module, x.x.x, 5.10.0-109-generic, x86_64: built 但当前运行的是 5.15.0-112-kylin-48-generic,说明该驱动尚未为新内核构建。
【必须核对版本号完全一致】 麒麟V10 SP3之后的内核包名含 -kylin- 后缀,漏掉这个后缀会导致头文件路径错乱、编译直接失败。
补全编译依赖环境
方法一:一键安装标准头文件与构建工具(推荐)
执行:sudo apt install linux-headers-$(uname -r) build-essential dkms
方法二:针对麒麟特有内核变体手动校验
若方法一报“无法定位软件包”,说明官方源未同步该内核头文件。此时需访问 麒麟更新源,进入对应版本目录(如 kylin/V10/SP3/),找到 pool/main/l/linux/ 子目录,下载并安装三个关键deb包:linux-headers-$(uname -r)_*.deb、linux-headers-$(uname -r)-common_*.deb、linux-modules-extra-$(uname -r)_*.deb。
安装命令:sudo dpkg -i *.deb,失败则跟 sudo apt --fix-broken install。
注意:linux-modules-extra 包含 RTL8822CE、RTL8852BE 等网卡驱动的固件和模块,缺失会导致 modprobe rtw_pci 报 Module not found。
触发DKMS为新内核重建驱动
第一步:强制清除旧构建残留(避免缓存干扰)sudo dkms remove --all -m module_name -v version,例如:sudo dkms remove --all -m rtw89 -v 010.000.000
第二步:重新注册并构建驱动源码sudo dkms add -m module_name -v version → sudo dkms build -m module_name -v version -k $(uname -r)
第三步:安装到当前内核模块树sudo dkms install -m module_name -v version -k $(uname -r)
第四步:验证模块是否就位ls /lib/modules/$(uname -r)/updates/dkms/,应看到对应 .ko 文件;再执行 sudo modprobe module_name,无报错即成功。
若构建失败且报 implicit declaration of function 'xxx',说明驱动源码调用的内核函数已被废弃,需升级驱动版本或打兼容补丁——不要强行注释警告行,否则模块加载时会触发 kernel panic。
绕过DKMS的手动应急方案
方法一:临时加载旧内核模块(仅限紧急恢复网络)
若新内核模块编译失败,但旧模块仍存在于 /lib/modules/旧版本/updates/dkms/ 中,可尝试:sudo cp -r /lib/modules/旧版本/updates/dkms/* /lib/modules/$(uname -r)/updates/dkms/ → sudo depmod -a → sudo modprobe module_name。
⚠️ 此操作有稳定性风险,仅用于获取网络连接后立即修复DKMS流程。
方法二:禁用Secure Boot重试构建
麒麟V10 SP3+默认启用Secure Boot,会拒绝加载未签名模块。执行:sudo mokutil --disable-validation → 重启后按提示进入MOK管理界面,选择“Disable validation”并设置密码,下次启动即可加载DKMS构建的模块。


















