Ubuntu22.04安装CAENUSBdrvB库时modprobe提示密钥被服务拒绝
CAENUSBdrvB在Ubuntu 22.04安装失败的解决办法
问题拆解
1. make阶段的警告无需担忧
- 编译器版本警告是误报:内核编译用的
x86_64-linux-gnu-gcc和你当前使用的gcc版本完全一致,这个警告可以忽略; - BTF生成跳过是因为缺少内核调试文件
vmlinux,不影响驱动的核心功能,只是无法生成内核调试用的BTF信息,可按需修复(见下文可选步骤)。
2. sudo make install的核心错误:Secure Boot阻止未签名模块加载
modprobe: ERROR: could not insert 'CAENUSBdrvB': Key was rejected by service 是Ubuntu 22.04默认开启Secure Boot导致的——Secure Boot会强制验证内核模块的签名,而CAENUSBdrvB的驱动未经过官方签名,因此被拒绝加载。
Ubuntu 20.04默认未强制开启Secure Boot,或者当时的模块签名验证规则更宽松,所以你之前能顺利安装。
解决方案
方案1:临时禁用Secure Boot(快速生效)
- 重启电脑,进入BIOS/UEFI设置界面(通常按F2、Del或Esc键进入,取决于电脑品牌);
- 找到
Secure Boot选项,将其设置为Disabled; - 保存设置并重启系统;
- 重新执行安装命令:
sudo make install
方案2:给驱动签名(保持Secure Boot开启)
如果需要保留Secure Boot功能,可给驱动模块添加自定义签名:
- 生成自定义签名密钥:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Custom Kernel Module Signing/" - 导入密钥到Secure Boot的MOK(Machine Owner Key)数据库:
执行后设置一个验证密码,记住这个密码。sudo mokutil --import MOK.der - 重启电脑,会进入MOK管理界面,按照屏幕提示完成密钥导入(需要输入之前设置的密码);
- 给CAENUSBdrvB驱动签名:
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /home/human/Downloads/CAENUSBdrvB-1.5.4/CAENUSBdrvB.ko - 再次执行安装:
sudo make install
可选:消除BTF生成警告
如果想解决Skipping BTF generation的警告,安装对应内核的unsigned镜像包即可:
sudo apt install linux-image-unsigned-$(uname -r)
重新执行make就能生成BTF信息,不影响驱动功能。
内容的提问来源于stack exchange,提问作者user171780
相关产品推荐
相关产品推荐

