我在一台使用 NVIDIA GeForce GTX 660 Ti 显卡构建的计算机上安装了 Fedora 21。当我最初安装系统时,在运行它时遇到了大量问题,直到我kmod-nvidia
从 RPMFusion 安装了软件包。从那时起,我对操作系统本身的体验就一直顺利。
但是,在内核选择屏幕和启动过程中,我可以看出它正在使用基本图形驱动程序,因为当它提示我输入解密密码时,它使用基本文本界面(与出现的普通文本框相比)主题plymouth
)。此外,在输入我的解密短语后,它还会加载条形图而不是 Fedora 气球。
这显然不是一个主要问题,但它让我好奇了一段时间,因为我知道我的系统具有功能强大的驱动程序,但我只是不知道如何让它们尽早加载到系统中。
当我最初诊断和修复我的系统时,我遵循本指南来自如果非真则假。
任何帮助表示赞赏!
答案1
以下是我如何从 rpmfusion nonfree 获取 kmod-nvidia 软件,并在配置为“安全启动”/UEFI 的计算机上与 Fedora 26 一起使用。在针对 nvidia 内核模块运行 modprobe 时,我收到错误“所需密钥不可用”。
保持 UEFI 安全启动启用并运行专有的 nvidia 驱动程序是可能的,而且不太难。
- 安装 rpmfusion 免费和非免费存储库后,安装 kmod-nvidia:
dnf install kmod-nvidia
通过进行 openssl 配置并运行以下命令来创建自签名证书和密钥:
cd /root #or somewhere reasonably safe cat > mokutil-openssl.conf << XYZZY [ req ] default_bits = 4096 distinguished_name = req_distinguished_name string_mask = utf8only x509_extensions = exts prompt = no [ req_distinguished_name ] O = username CN = username emailAddress = [email protected] [ exts ] basicConstraints=critical,CA:FALSE keyUsage=digitalSignature subjectKeyIdentifier=hash authorityKeyIdentifier=keyid XYZZY # create the certificate & key openssl req -x509 -new -nodes -utf8 -sha256 -days 7300 -config ./mokutil-openssl.conf -outform DER -out mokutil.der -keyout mokutil.key -batch # to verify the certificate: openssl x509 -inform DER -in ./mokutil.der -noout -text |less
接下来,使用提供的实用程序对新的 nvidia 内核模块进行签名:
cd /lib/modules/$(uname -r)/extra/nvidia /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 /root/mokutil.key /root/mokutil.der nvidia.ko /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 /root/mokutil.key /root/mokutil.der nvidia-drm.ko /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 /root/mokutil.key /root/mokutil.der nvidia-modeset.ko /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 /root/mokutil.key /root/mokutil.der nvidia-uvm.ko
证书需要添加到BIOS才可信:
# first, we stage the new certificate to be added to the BIOS on # the next reboot. You will be prompted to enter a password when # running the utility; the BIOS will ask for the same password on # reboot. mokutil --import ./mokutil.der # This command shows whether or not mokutil was able to stage the # new certificate for import into the BIOS. If the process is # unsuccessful, you may have to enter the BIOS and import the key # manually from its interface, perhaps from a USB stick. If this # command returns your certificate, you should reboot. The BIOS # will prompt you to take action and enter in the password you # input in the previous step. mokutil -N # This command shows which certificates are trusted by the BIOS. # There will be one installed by the manufacturer and if mokutil --list-enrolled
如果一切顺利,您的机器应该已经加载了新模块。您可以检查
lsmod |grep nvidia
安装新内核时,您必须再次对模块进行签名。
我找到了大部分信息这里,但签名实用程序不需要使用 perl 调用。我还签署了 kmod-nvidia 构建过程输出的所有四个模块。
答案2
Liczyrzepa 的回答(对我很有帮助)让我制作了一个小脚本,每次 Fedora 推出新内核(即一直!)时都会对我的所有“额外”模块进行签名,但当 Fedora 开始发布时,这个脚本就失败了.ko.xz 模块。
由于我收到的错误消息引导我在花园小路上走了一段时间,我想我应该在此处添加修改后的脚本,希望它可能有用。请注意,Liczyrzepa 答案的“一次性”部分,即生成密钥并将其安装在 BIOS 中,同样适用。
#!/bin/bash
signfile=/usr/src/kernels/$(uname -r)/scripts/sign-file
key=/root/mokutil.key
der=/root/mokutil.der
for moddir in /lib/modules/$(uname -r)/extra/*
do
cd $moddir
echo "entered $moddir"
for module in *.ko*; do
module_basename=${module:0:-3}
module_suffix=${module: -3}
if [[ "$module_suffix" == ".xz" ]]; then
unxz $module
$signfile sha256 "${key}" "${der}" "${module_basename}"
xz -f ${module_basename}
else
$signfile sha256 "${key}" "${der}" "${module_basename}"
fi
echo "signed $module"
done
done