我最近将我的 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 驱动程序
答案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