为了测试opencl程序在nvdia显卡下的表现,需要装驱动,但后面
主要问题:
NVIDIA驱动装到最后,nvidia.ko文件已经编译成功,却提示无法加载,查询具体信息 发现加载nvidia模块时报错,Required key not available
分析:
网上说的答案关闭Nouveau是错误的,不能解决这个问题。发现是因为ubuntu 强制要求 UEFI 安全启动导致的。 (CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE=Y)
nvidia的模块是要进行签名才能使用的。
解决方法:
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
O = YOUR_USERNAME
CN = YOUR_USERNAME
emailAddress = YOUR_EMAIL_ADDRESS
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
3.调用openssl命令
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config x509-configuration.ini -outform DER -out public_key.der -keyout private_key.priv
生成public_key.der
和 private_key.priv
. public_key.der是证书
4. 我们用mokutil 把证书 放进数据库mokdb里。
mokutil --import public_key.der
输入密码,然后重启 reboot
注意!密码不要忘了。 另外,mokutil有保护机制,如果密码连续输错两次以上,后面怎么输都没用了,要重启才行。
5. 给模块签名
重启后,进入证书所在的目录,打以下命令
/usr/src/linux-headers-4.2.0-42/scripts/sign-file sha256 private_key.priv public_key.der /lib/modules/4.2.0-42-generic/updates/dkms/nvidia.ko
这里有个奇怪的地方,我用xca生成的证书,最后签名是不成功的, 用openssl的就没问题,希望有人告知为啥。
其他小细节:
1. 提示X server 未关闭
service lightdm stop Nouveau 关闭(驱动会自动帮你做这个事)
2. 双显卡的pc,请注意将显示输出从intel 换到 NVIDIA 显卡上去。
3. 再提醒下,mokdb的密码不要忘了,如果连续输错,就重启。不然始终会出现enrolled 错误
目前我在中文文章里没看到过解决这问题的文章,所以写下这个方便后面的人。
参考文档:
http://askubuntu.com/questions/761886/ubuntu-16-04-kernel-4-4-0-21-not-loading-nvidia-vboxdrv-modules-anymore-require
http://www.pellegrino.link/2015/11/29/signing-nvidia-proprietary-driver-on-fedora.html