You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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启动系统,之后再加载模块应该就能正常用了,不过重启后这个设置会失效,适合临时测试

方案二:生成自定义签名密钥给模块签名(长期有效,推荐)

这是一劳永逸的方法,步骤有点多但不难:

  1. 生成签名密钥对
    打开终端,运行下面的命令生成私钥和公钥:

    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(公钥),记得保存好这两个文件

  2. 把公钥导入内核信任列表
    运行命令:

    mokutil --import MOK.der
    

    这时候会让你设置一个密码,一定要记牢,重启后要用这个密码确认

  3. 重启系统完成密钥注册
    重启后会进入蓝色的MOK管理界面:

    • 选择「Enroll MOK」
    • 选「Continue」,然后选「Yes」,输入刚才设置的密码
    • 确认后系统会再次重启,这时候内核就信任咱们的签名密钥了
  4. 给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
    
  5. 加载模块
    运行命令加载模块:

    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.privMOK.der文件,后续签名其他模块还会用到

备注:内容来源于stack exchange,提问作者Rick

火山引擎 最新活动