爲了測試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