按照指南操作后,我发现这里我发现,尽管我的硬件与作者相同,但我无法重现相同的结果。在创建 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 驱动程序
答案2
卸载 rEFInd 后,重新安装 Ubuntu,使“ubuntu”文件夹出现在 EFI 分区中(例如,在 OS X 上打开“终端”,运行,sudo mountesp
然后在 Finder 中查看 EFI 分区),设置 Grub 菜单(详见这里)并遵循原始指南中的说明在尝试安装专有 nVidia 驱动程序之前,我能够获得预期的输出08
。07
首次尝试通过“附加软件”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 配置文件?。