MacBook Pro 7,1 + Ubuntu 16.04 LTS + nVidia 驱动程序

MacBook Pro 7,1 + Ubuntu 16.04 LTS + nVidia 驱动程序

按照指南操作后,我发现这里我发现,尽管我的硬件与作者相同,但我无法重现相同的结果。在创建 GRUB 脚本以在启动期间注册 PCI 寄存器、使文件可执行并更新 GRUB 配置文件(即,在执行以下步骤之后)后,步骤3)我输入:

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

根据步骤 4,它输出的00不是预期的08

然而,当我输入

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

07它返回指南中所发现的预期值。

我还应该做什么来确保我可以在我的设置上使用 nVidia 驱动程序?

我不完全理解该指南,但拥有相同的硬件并遵循相同的说明。

我有一台双启动的 MacBook Pro(7,1),装有 OS X 和 Ubuntu 16.04 LTS。

rEFInd(版本 0.10.3-1)是我的引导加载程序。

==编辑==

输入后

dmesg | grep -i efi

我得到以下信息:

[    0.000000] Command line: \boot\vmlinuz-4.4.0-22-generic.efi.signed ro root=UUID=d5117e29-6aa7-46cb-ab22-616c19309a3c initrd=boot\initrd.img-4.4.0-22-generic
[    0.000000] efi: EFI v1.10 by Apple
[    0.000000] efi:  ACPI=0xbf96a000  ACPI 2.0=0xbf96a014  SMBIOS=0xbf71a000 
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.000000] Kernel command line: \boot\vmlinuz-4.4.0-22-generic.efi.signed ro root=UUID=d5117e29-6aa7-46cb-ab22-616c19309a3c initrd=boot\initrd.img-4.4.0-22-generic
[    0.953332] efifb: probing for efifb
[    0.953363] efifb: framebuffer at 0xc0010000, mapped to 0xffffc90002800000, using 6400k, total 6400k
[    0.953370] efifb: mode is 1280x800x32, linelength=8192, pages=1
[    0.953374] efifb: scrolling: redraw
[    0.953378] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    0.961402] fb0: EFI VGA frame buffer device
[    2.227701] EFI Variables Facility v0.08 2004-May-17
[    2.853971] [Firmware Bug]: ACPI(IGPU) defines _DOD but not _DOS
[    2.952253] fb: switching to nouveaufb from EFI VGA

这些是我遵循上述指南时获得的更多输出。

2. 找到正确的 PCI-E 总线标识符

sudo 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]

3. 创建 GRUB 脚本,用于在启动期间设置 PCI-E 寄存器

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

然后输入以下内容:

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

Ctrl + X

Y 代表“是”保存配置文件。

然后运行

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

这两个命令都可以正常执行。

4. 重启并检查

重新启动后我运行:

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

并得到00预期的08

我也跑:

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

07与指南一样,它返回预期的结果。

如果我可以提供更多详细信息来帮助我解决这个问题,请告诉我。

==更新==

我之前(即在尝试按照指南操作之前)在安装 Ubuntu 时删除了安装在 EFI 分区上的“ubuntu”文件夹(以及其对应的 grub 设置),以便让 rEFInd 在启动时显示。我曾以为这两者是竞争关系,因为当时我启动 MacBook 时它会自动启动到 Ubuntu,而不会显示 rEFInd 菜单。

卸载rEFInd后,重新安装Ubuntu,并设置Grub菜单如下图这里我按照 Nvidia 驱动程序指南中的步骤进行了操作。这次我得到了正确的输出。

成功

但是,现在当从 GUI“附加驱动程序”菜单中选择“来自 nvidia-304 的 NVIDIA 旧版二进制驱动程序版本 304.131(专有)”并应用更改时,它不会将选择切换出 Nouveau 设置。

我以为这是一个 GUI 故障,所以等了一会儿然后重新启动,但没有成功——启动后仍在使用 Nouveau 驱动程序。

我想谨慎地进行操作,那么我应该从这里输入什么命令行?

(注意:另一个令人沮丧的是,在重新安装过程之后,尽管使用了正确的驱动程序,我的 WiFi 仍然无法正常工作。这以前不是问题,但我会在解决 Nvidia 驱动程序后处理这个问题。也许 16.04 和 Broadcom 432b 的 wifi 问题也与引导加载程序有关?)

感谢您迄今为止的帮助。

答案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/EFI/ubuntu/x86_64-efi

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

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

创建01_enable_vga.conf文件。

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

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

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

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

卸载 rEFInd 后,重新安装 Ubuntu,使“ubuntu”文件夹出现在 EFI 分区中(例如,在 OS X 上打开“终端”,运行,sudo mountesp然后在 Finder 中查看 EFI 分区),设置 Grub 菜单(详见这里)并遵循原始指南中的说明在尝试安装专有 nVidia 驱动程序之前,我能够获得预期的输出0807

首次尝试通过“附加软件”GUI 安装专有 nVidia 驱动程序时,无法安装,并且重新启动后将使用开源 Nouveau 驱动程序。

但是,当我在登录页面上访问 TTY1(即FN + Control + alt + F1)时,登录、运行sudo apt-get purge nvidia*并重新启动。 重新登录 Ubuntu 后,我打开“终端”并运行sudo apt-get install nvidia-340,然后sudo apt-get update,接着sudo apt-get dist-upgrade,然后 ,然后重新启动。

这样,就可以在双启动配置(OS X 10.11.4 El Capitan)下在我的 MacBook Pro(7,1)上成功启动 Ubuntu 16.04 LTS,并使用 Grub 作为我的引导加载程序。

截屏

感谢此处链接的指南和@mikewhatever 帮助我解决这个问题。希望这能帮助其他可能遇到类似问题的人。

答案3

spoof_osx_version您必须在 中设置令牌refind.conf。来自 rEFInd 文档http://www.rodsbooks.com/refind/configfile.html

在某些 Mac 上,即使选择了其他操作系统,此选项也会使 rEFInd 告知固件正在启动指定版本的 OS X。其结果是固件可能会以不同的方式初始化硬件,这可能会产生有益(或有害)的结果。如果您的 Mac 视频输出无法正常工作,此选项可能会有所帮助。另一方面,如果使用此选项,键盘和鼠标有时会停止工作,因此您不应不必要地使用它。此选项对非 Apple 硬件没有影响。默认为不使用此功能。

我有一台 Macbook Pro 7,1,带有 macOS Sierra 和 Ubuntu 16.04 双启动,因此我设置:

spoof_osx_version = 10.12

如果您想知道如何编辑该refind.conf文件,请参阅我在哪里可以找到 refind.conf 配置文件?

相关内容