我刚刚在我的 2010 MacBookPro 上安装了 Linux(使用 refind 进行三重启动),并在安装 nvidia 驱动程序后出现了臭名昭著的黑屏。
我尝试应用这里提到的解决方案:https://askubuntu.com/a/613573/488420没有成功。
我想知道我是否正确获得了 setpci 的 ID。有人可以确认吗?
我将其粘贴在 lshw 显示输出和我的 /etc/grub.d/01_enable_vga.conf 文件下方。
谢谢!
mint@mint-MacBookPro ~ $ sudo lshw -businfo -class bridge -class display
información del Bus Dispositivo Clase Descripción
===========================================================
pci@0000:00:00.0 bridge Core Processor DRAM Controller
pci@0000:00:01.0 bridge Core Processor PCI Express x16 Root Port
pci@0000:01:00.0 display GT216M [GeForce GT 330M]
pci@0000:00:02.0 display Core Processor Integrated Graphics Controller
pci@0000:00:1c.0 bridge 5 Series/3400 Series Chipset PCI Express Root Port 1
pci@0000:00:1c.1 bridge 5 Series/3400 Series Chipset PCI Express Root Port 2
pci@0000:00:1c.2 bridge 5 Series/3400 Series Chipset PCI Express Root Port 3
pci@0000:00:1c.3 bridge 5 Series/3400 Series Chipset PCI Express Root Port 4
pci@0000:00:1e.0 bridge 82801 Mobile PCI Bridge
pci@0000:00:1f.0 bridge Mobile 5 Series Chipset LPC Interface Controller
pci@0000:ff:00.0 bridge Core Processor QuickPath Architecture Generic Non-core Registers
pci@0000:ff:00.1 bridge Core Processor QuickPath Architecture System Address Decoder
pci@0000:ff:02.0 bridge Core Processor QPI Link 0
pci@0000:ff:02.1 bridge Core Processor QPI Physical 0
pci@0000:ff:02.2 bridge Core Processor Reserved
pci@0000:ff:02.3 bridge Core Processor Reserved
mint@mint-MacBookPro ~ sudo cat /etc/grub.d/01_enable_vga.conf
cat << EOF
setpci -s "00:01.0" 3e.b=8
setpci -s "01:00.0" 04.b=7
EOF
答案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/centos/x86_64-efi/ 中
创建 x86_64-efi 文件夹
sudo mkdir /boot/EFI/centos/x86_64-efi
将 setpci 模块文件复制到 grub2 文件夹中
sudo cp /usr/lib/grub/x86_64-efi/setpci.* /boot/EFI/centos/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/centos/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
将您的lshw
输出与我原来的方法进行比较,似乎您使用的是不同的 Macbook Pro - 您的 Macbook Pro 较新,并且有一个集成显卡和一个独立显卡(NVIDIA GT 330M)。我怀疑我针对 Macbook Pro 7,1(2010 年中,仅配备 NVIDIA 320M)的解决方案是否适用于您的硬件。
实际上,我怀疑黑屏的根本原因是 EFI Linux 启动期间禁用了独立 NVIDIA 330 GT。因此,您最好使用不同的 GRUB 脚本明确启用独立 NVIDIA 卡。关于如何实现这一点的初步提示是https://discussions.apple.com/message/19065782#19065782和https://help.ubuntu.com/community/UEFIBooting。
由于我没有该特定硬件,所以我不确定这些是否是正确的设置。
答案3
您可以尝试取消注释spoof_osx_version
中的选项refind.conf
。这可能让视频在您的系统上工作,但我不能保证它会工作。请参阅refind.conf
或在rEFInd 文档了解此选项如何运作的详细信息。
请注意,此选项的工作方式可能有所不同,具体取决于您启动 Linux 的方式——即通过 BIOS 模式 GRUB、EFI 模式 GRUB、直接启动内核等。另外,请注意,您所做的 GRUB 更改仅在您通过 GRUB 启动 Linux 时才有效。目前尚不清楚您是否这样做。请参阅启动 Linux 的方法rEFInd 文档的部分,了解有关从 rEFInd 启动 Linux 的不同方法的更多信息。