Ubuntu 20.04安装Wifi内核模块compat.ko后功能无法启用,内核模块签名验证失败问题求助
Ubuntu 20.04安装Wifi内核模块compat.ko后功能无法启用,内核模块签名验证失败问题求助
Hey Rick, 我来帮你搞定这个内核模块签名的问题,这种情况在Ubuntu用第三方/自定义内核模块时太常见了。咱们分几种方案来解决,你可以根据自己的需求选:
方案一:临时禁用签名验证(快速测试用,重启失效)
如果只是想先确认模块本身没问题,试试这个临时方法:
- 重启电脑,在GRUB启动菜单(没看到的话重启时按住Shift键)选中你要启动的5.19内核,按
e进入编辑模式 - 找到以
linux开头的那一行,在末尾加上module.sig_unenforce - 按Ctrl+X或者F10启动系统,之后再加载模块应该就能正常用了,不过重启后这个设置会失效,适合临时测试
方案二:生成自定义签名密钥给模块签名(长期有效,推荐)
这是一劳永逸的方法,步骤有点多但不难:
生成签名密钥对
打开终端,运行下面的命令生成私钥和公钥:openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Custom Kernel Module Signing/"执行后会得到两个文件:
MOK.priv(私钥)和MOK.der(公钥),记得保存好这两个文件把公钥导入内核信任列表
运行命令:mokutil --import MOK.der这时候会让你设置一个密码,一定要记牢,重启后要用这个密码确认
重启系统完成密钥注册
重启后会进入蓝色的MOK管理界面:- 选择「Enroll MOK」
- 选「Continue」,然后选「Yes」,输入刚才设置的密码
- 确认后系统会再次重启,这时候内核就信任咱们的签名密钥了
给compat.ko模块签名
先确保安装了对应内核的头文件:sudo apt install linux-headers-$(uname -r)然后用内核自带的签名工具给模块签名,替换下面的
./compat.ko为你的模块实际路径:sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der ./compat.ko加载模块
运行命令加载模块:sudo insmod ./compat.ko或者如果模块放在标准路径,用
modprobe更方便:sudo modprobe compat这时候再看
dmesg,应该就不会出现签名验证失败的错误了,WiFi功能也能正常启用
方案三:检查模块是否有官方签名版本
如果这个compat.ko是从第三方WiFi厂商(比如Realtek)的驱动包来的,看看有没有针对Ubuntu 20.04内核5.19的预签名版本,或者有没有官方PPA可以安装。有些驱动会提供DKMS包,DKMS会自动帮你处理模块签名(前提是你已经设置了MOK密钥),这样就不用手动签名了
额外注意点
- 如果你之后升级了内核,需要重新给模块签名,或者用DKMS来自动处理(如果模块支持DKMS的话)
- 一定要保存好你的
MOK.priv和MOK.der文件,后续签名其他模块还会用到
备注:内容来源于stack exchange,提问作者Rick




