setpci 未在启动时设置寄存器 - MacBook Pro (7,1) Nvidia 黑屏问题

setpci 未在启动时设置寄存器 - MacBook Pro (7,1) Nvidia 黑屏问题

我正在努力弄清楚这一点,我希望有人能给我提供一些建议,或者至少给我指明正确的方向。

我有一台 2010 年的 Macbook Pro (7,1),我想让它在 Xubuntu 上稳定运行。大多数东西都运行良好,我遇到的问题是我无法让 Nvidia 显示器和 PCI 桥正确注册,所以当我暂停设备时,当我将其重新启动时它没有响应,最后我不得不硬重置它。

我从 19.10 开始并尝试按照 stommestack 的答案这里以及随后的 ylwghst 的回答这里(以及许多其他地方)但没有运气。

我尝试前的 PCI 寄存器值是:MCP89 [GeForce 320M]——“04:00.0”04b 是 07(应该是)MCP89 PCI Express Bridge——“00:17.0”3e.b 是 02(应该是 08)

我尝试后的 PCI 寄存器值是:MCP89 [GeForce 320M]——“04:00.0”04b 是 07(应该是)MCP89 PCI Express Bridge——“00:17.0”3e.b 是 0a(不同,但应该是 08)

我的 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:0e.0              bridge         NVIDIA Corporation
pci@0000:00:15.0              bridge         NVIDIA Corporation
pci@0000:00:16.0              bridge         NVIDIA Corporation
pci@0000:00:17.0              bridge         MCP89 PCI Express Bridge
pci@0000:04:00.0              display        MCP89 [GeForce 320M]

我的01_enable_vga.conf的内容是:

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

启动后不久,我的当前 dmesg 内容是:

[    0.000000] efi: EFI v1.10 by Apple
[    0.000000] efi:  ACPI=0xbf96a000  ACPI 2.0=0xbf96a014  SMBIOS=0xbf71a000 
[    0.046985] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.334057] pci 0000:04:00.0: BAR 1: assigned to efifb
[    0.340118] Registered efivars operations
[    0.708530] efifb: probing for efifb
[    0.708554] efifb: No BGRT, not showing boot graphics
[    0.708558] efifb: framebuffer at 0xc0010000, using 6400k, total 6400k
[    0.708561] efifb: mode is 1280x800x32, linelength=8192, pages=1
[    0.708564] efifb: scrolling: redraw
[    0.708567] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    0.712633] fb0: EFI VGA frame buffer device
[    0.981620] EFI Variables Facility v0.08 2004-May-17
[    1.394155] [Firmware Bug]: ACPI(IGPU) defines _DOD but not _DOS
[    7.812178] fb0: switching to nouveaufb from EFI VGA

我已尝试过 18.04 LTS,并且 setpci 在那里可以正常工作,但是即使使用专有驱动程序,我的 Broadcom 无线网卡也无法工作。18.04 也不太理想,因为我希望在本月晚些时候发布时使用 20.04。

我也尝试了 20.04 LTS Beta(当前安装的版本),遇到了与 19.10 相同的问题。

如果我能提供任何其他帮助来解决这个问题,请告诉我。我很感激任何帮助。谢谢!

答案1

我有一台 2008 mbp 4,1,但在设置这些寄存器时遇到了同样的问题。

坦白说,我想让 NVIDIA 驱动程序在 EFI 中工作,所以我一直在努力尝试破解这个 setpci 的代码。我注意到,如果您在 grub 命令行中手动输入它,使用 setpci 实际上会将正确的寄存器更改为 08,但使用脚本时会将其设置为 0a。另外值得注意的是,使用 9 而不是 8 会将其设置为 0b,使用 10 会将其设置为 12。听起来像是十六进制数学?我不太清楚发生了什么,但我觉得离让显卡正确初始​​化已经很近了。过去几年我可能在这上面花了太多时间。

这不是一个理想的解决方案,但在 CSM 中安装似乎也是解决这些较旧的 Mac 设备和 Linux 上与 nvidia 相关问题的最佳方法。这不是很容易做到的,因为我们不能简单地更改 bios 中的选项。这不是首选,因为 UEFI 比 bios 有优势,但至少它是有效的。要做到这一点,我们必须在 UEFI 中安装,然后从实时 USB 进行系统更改。

第一步是正常安装 Linux。这将自动设置 UEFI。请勿立即安装 NVIDIA 驱动程序。安装后,重新启动回到您的实时 USB 环境。打开您选择的分区工具(如果您使用 Ubuntu,则打开 Gparted)。找到您的 HDD,通常位于 /dev/sda。找到 efi 并删除此分区。在该空间中创建一个新分区并将其格式化为清除。应用这些更改,然后添加 bios_grub 标志。

执行下一步前请勿重启

使用类似 Disks 的命令将系统分区挂载到 /media。将目录更改为 /media 并找到您的分区,然后检查该目录以查找并复制 GUID 名称目录。运行以下命令,将其替换为您的目录名称

sudo grub-install --no-uefi-secure-boot --boot-directory=/media/mint/<GUID>/boot /dev/sda

如果安装顺利,您就大功告成了。您现在可以在重新启动后安装 Nvidia 340 驱动程序。

请注意,某些发行版(如 Ubuntu 21.10 及更高版本)已开始同时提供 bios 和 UEFI grub 版本。在您升级发行版之前,这似乎不是一个问题,因此请确保在重新启动时检查 grub-efi-amd64-signed 包并将其删除。我不得不卸载 grub-common 并重新安装 grub-pc,从 21.10 升级到 22.04,这解决了这个问题。

不幸的是,这也会强制您的 SATA 控制器切换到 IDE 模式。为了解决这个问题,我可以在 /etc/grub.d/ 中添加一个文件,其中包含

#!/bin/sh
set -e
## Enable nvidia proprietary drivers
echo "setpci -d 8086:2828 90.b=40"

这为我重新启用了 ACHI 模式。

相关内容