setpci 不会改变桥接设备的寄存器值(NVIDIA 驱动程序黑屏问题)

setpci 不会改变桥接设备的寄存器值(NVIDIA 驱动程序黑屏问题)

我最近将我的 Macbook Air(2010 年末)设置为双启动 OS 10.10 和 Ubuntu 16.04,当然,在使用专有 NVIDIA 驱动程序时,我遇到了黑屏问题。我刚刚尝试了 Andreas 的修复方法这里。一切似乎都很顺利,只是当我进入第 4 步重新启动并检查时,我没有得到桥接设备的 PCI-E 寄存器的正确结果。这是我在第 2 步得到的结果:

Bus info          Device     Class          Description
=======================================================
pci@0000:00:00.0             bridge         MCP89 HOST Bridge
pci@0000:00:03.0             bridge         MCP89 LPC Bridge
pci@0000:00:15.0             bridge         NVIDIA Corporation
pci@0000:00:17.0             bridge         MCP89 PCI Express Bridge
pci@0000:02:00.0             display        MCP89 [GeForce 320M]

我已经创建了 grub 脚本/etc/grub.d/01_enable_vga.conf如上所述:

cat << EOF
setpci -s "00:17.0" 3e.b=8
setpci -s "02:00.0" 04.b=7
EOF

...还改变了权限并更新了 grub...

~> sudo chmod 755 /etc/grub.d/01_enable_vga.conf
~> sudo update-grub

...但是当我重新启动机器并检查时,桥接设备的值不正确:

~> sudo setpci -s "00:17.0" 3e.b
00
~> sudo setpci -s "02:00.0" 04.b
07

在安装 NVIDIA 驱动程序之前,有什么建议可以让我正确设置吗?我是否更改了错误的桥接设备?有没有更好的方法?

提前致谢!

答案1

我最终解决了 setpci 不会改变 PCI-E 桥的值的问题。

如果您无法使用 setpci 命令设置 PCI-E brigde 寄存器的值,以便使 nVidia GeForce 驱动程序在您的 Apple MacBook 机器上运行,请尝试以下步骤:

1. 找到您的 PCI-E 总线标识符

lshw -businfo -class bridge -class display

[root@kernelLinux]# lshw -businfo -class bridge -class display
Bus info          Device      Class          Description
========================================================
pci@0000:00:00.0              bridge         MCP89 HOST Bridge
pci@0000:00:03.0              bridge         MCP89 LPC Bridge
pci@0000:00:15.0              bridge         NVIDIA Corporation
pci@0000:00:17.0              bridge         MCP89 PCI Express Bridge
pci@0000:02:00.0              display        MCP89 [GeForce 320M]

你需要提供PCI Express 桥接器和你的展示格式为 XX:XX.X

您的 ID 可以不同。

在此示例中,我们的 ID 是00:17.0用于 PCI-E 桥接和02:00.0用于显示[GPU]。

2.创建 GRUB 脚本

我们的脚本与上面提到的帖子略有不同。

我注意到了两件事。使用发行版(我的是 Centos)安装的 Grub2 安装过程不包含设定pcigrub 模块。这就是为什么 grub 在启动时不会更改寄存器的原因。因此,在我们运行更改寄存器的命令之前,必须将 setpci 模块加载到 grub 中。

下载 grub2-efi-modules

Ubuntu Linux

sudo apt-get install grub-efi-amd64-bin

Fedora Linux

sudo dnf install grub2-efi-modules

CentOS Linux

sudo yum install grub2-efi-modules

模块将安装在 /usr/lib/grub/x86_64-efi/ 中,但 setpci 模块文件需要存在于 /boot/efi/EFI/ubuntu/x86_64-efi/ 中

创建 x86_64-efi 文件夹。

/boot/EFI/ 中的 Ubuntu 文件夹可能与您的机器不同,具体取决于您在操作系统安装过程中如何命名它,请不要粘贴它。用正确的路径替换它。

sudo mkdir /boot/EFI/ubuntu/x86_64-efi

将 setpci 模块文件复制到 grub2 文件夹中

sudo cp /usr/lib/grub/x86_64-efi/setpci.* /boot/EFI/ubuntu/x86_64-efi

创建01_enable_vga.conf文件。

该文件应包含以下代码行:

不要忘记用您的值替换 PCI-bridge 的 00:17.0 和显示器 [GPU] 的 02:00.0。

sudo nano /etc/grub.d/01_enable_vga.conf

cat << EOF
insmod setpci
setpci -s "00:17.0" 3e.b=8
setpci -s "02:00.0" 04.b=7
EOF

然后修复权限

sudo chmod 755 /etc/grub.d/01_enable_vga.conf

并更新 /boot/efi/EFI/ubuntu/grub.cfg

Ubuntu Linux

sudo update-grub

仅在其他发行版上执行此命令(在 update-grub 之后在 Ubuntu 上不需要):

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

3. 重启系统并检查寄存器

重启机器并检查它是否正常工作。再次用您的 ID 替换 ID。您的终端最终应显示 08(PCI-E 桥)和 07(GPU)。

sudo setpci -s "00:17.0" 3e.b
08

sudo setpci -s "02:00.0" 04.b
07

4.安装 nVidia 驱动程序

截屏:https://i.stack.imgur.com/nim4Z.jpg

答案2

我遇到了同样的问题,是通过谷歌找到这里的。看来你和我都被文件 /etc/grub.d/01_enable_vga.conf 搞糊涂了

您希望文件包含 cat 命令,但又不想使用 cat 创建它(好吧,您可以使用嵌套 cat 创建它)。因此,请尝试以下操作:

sudo bash -c "cat > /etc/grub.d/01_enable_vga.conf" << END
cat << EOF
setpci -s "00:17.0" 3e.b=8
setpci -s "02:00.0" 04.b=7
EOF
END

我在这里得到了答案: MacBook Pro 7,1 + Ubuntu 16.04 LTS + nVidia 驱动程序

相关内容