Ubuntu 专家,
我拥有一套罕见的 2016 款 MacPro6,1 配置,配备两张 AMD Radeon R9 280X Tahiti 显卡,以及三台通过 DisplayPort/Thunderbolt 端口连接的 4K 显示器。
系统安装成功,但 LiveCD(用于安装)和已安装的系统都需要“nomodeset”选项,否则启动过程会挂起并出现黑屏。
使用“nomodeset”系统只能检测并通过 HDMI 连接的一台显示器并运行。通过 DisplayPort 连接的所有显示器均保持空白。
我尝试了不同版本的 Ubuntu(14.04.4、14.04.5、15.10、16.04、16.04.1、16.10),都存在此问题,还尝试了多个版本的 Linux Mint,结果相同。我还在 Ubuntu 16.04.1 上尝试了较新的上游内核(4.6、4.7.3、4.8),结果都相同。
但是我发现了一个 Linux 发行版,叫做 KaOS(https://kaosx.us/) 在我的硬件上运行良好。对接后不久,它成功检测并打开通过显示端口连接的所有三个显示器,然后在所有三个显示器上显示正常的宽 KDE 桌面。
我比较了 Ubuntu 和 KaOS 启动时的日志条目,看来 KaOS 成功检测并激活了两个 AMD 卡,然后继续正常启动。它使用开源“radeon”驱动程序。
另一方面,Ubuntu(上面列出的所有版本和内核)使用相同的“radeon”驱动程序仅检测到第一张卡,而第二张卡出现故障,导致“radeon”驱动程序立即关闭,之后启动过程挂起。
以下是日志中的相关信息。完整日志记录可在附件中找到。
卡奥斯:
第一张牌:
[drm] radeon kernel modesetting enabled.
[drm] initializing kernel modesetting (TAHITI 0x1002:0x6798 0x106B:0x0128 0x00).
[drm] register mmio base: 0xA0700000
[drm] register mmio size: 262144
[drm] ACPI VFCT contains a BIOS for 02:00.0 1002:6798, size 65536
[drm:radeon_get_bios] ATOMBIOS detected
ATOM BIOS: Tahiti
[drm] Loading tahiti Microcode
[drm] Initialized radeon 2.45.0 20080528 for 0000:02:00.0 on minor 0
fb: switching to radeondrmfb from EFI VGA
.....
第二张牌:
[drm] ACPI VFCT contains a BIOS for 02:00.0 1002:6798, size 65536
[drm] ACPI VFCT table is not for this card
radeon 0000:06:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x0000
radeon 0000:06:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x0000
[drm:radeon_get_bios] ATOMBIOS detected
ATOM BIOS: Tahiti
[drm] Loading tahiti Microcode
[drm] radeon: dpm initialized
[drm] Initialized radeon 2.45.0 20080528 for 0000:06:00.0 on minor 1
(请注意这些“无效的 PCI ROM 标头签名”错误,但尽管如此,卡仍成功初始化,并且 KaOS 开发人员确认这些错误对于 ATI 卡来说是正常现象,并且是无害的)
乌本图:
第一张牌:
[drm] radeon kernel modesetting enabled.
[drm] initializing kernel modesetting (TAHITI 0x1002:0x6798 0x106B:0x0128).
[drm] register mmio base: 0xA0700000
[drm] register mmio size: 262144
[drm] ACPI VFCT contains a BIOS for 02:00.0 1002:6798, size 65536
[drm:radeon_get_bios] ATOMBIOS detected
ATOM BIOS: Tahiti
[drm] Loading tahiti Microcode
[drm] radeon: dpm initialized
[drm] Initialized radeon 2.43.0 20080528 for 0000:02:00.0 on minor 0
fb: switching to radeondrmfb from EFI VGA
第二张牌:
[drm] initializing kernel modesetting (TAHITI 0x1002:0x6798 0x106B:0x0127).
[drm] register mmio base: 0xA0600000
[drm] register mmio size: 262144
[drm] ACPI VFCT contains a BIOS for 02:00.0 1002:6798, size 65536
[drm] ACPI VFCT table is not for this card
radeon 0000:06:00.0: Invalid ROM contents
radeon 0000:06:00.0: Invalid ROM contents
[drm:radeon_get_bios [radeon]] *ERROR* Unable to locate a BIOS ROM
radeon 0000:06:00.0: Fatal error during GPU init
[drm] radeon: finishing device.
radeon: probe of 0000:06:00.0 failed with error -22
注意同样的错误“无效的 ROM 内容”(略有不同的消息,但我已检查来源,它们意味着相同 - 意外的 ROM 签名)这些错误之后,radeon/drm 驱动程序失败,错误无法找到 BIOS ROM,然后“完成设备”。
KaOS 使用较新的内核 4.7.3-1,但我在 Ubuntu 上尝试了 4.6、4.7.3、4.8,但没有成功。
我从日志中注意到的另一件事:在 KaOS 上,udev 规则在内核模式设置之前加载,但在 Ubuntu 上 - 在模式设置之后加载。这可能是原因吗?
显卡信息:
lspci | grep VGA
02:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X]
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X]
为了完整性,还附上了完整的“lspci -vvv”和“lshw”输出。
我确实需要让这个工作站在 Linux 下工作,不想满足于 MacOS。
如果有能力的人能看看这个并给出一些建议,我将不胜感激。
谢谢,Heigh
2016年11月8日更新:
嗨,Nick,
谢谢您的回复,我将尝试 radeon.pm=0 选项。
但我找到了一种对我有用的解决方法或解决方案,也可能对您有用。
系统需要使用 systemd-boot 引导程序(或者任何其他支持 UEFI 引导的引导程序)进行引导
当我在 MacPro 上使用安装 grub2 期间安装的标准版本启动 Ubuntu 时,radeon 驱动程序无法检测到通过显示端口连接的外部显示器。
但是,当我使用 Arch Linux(或 KaOS)安装的 systemd-boot 启动系统时,它可以正常检测显示器并正常工作,并按预期支持所有外部显示器。
我认为这与硬件的某些方面在 BIOS 启动模式下未暴露,而在 EFI/UEFI 启动模式下暴露有关。
如果可能的话,首选的解决方案是在 BIOS 模式下运行 radeon 驱动程序,或者,如果不可能,则在系统日志中显示一些有意义的消息,解释某些功能(例如通过显示端口的外部显示器)将不受支持,除非系统在 EFI/UEFI 模式下启动。
我向 radeon bugzilla 提交了一个错误:https://bugs.freedesktop.org/show_bug.cgi?id=98523
希望这个问题能被修复,并能在未来某个时候实现开箱即用。
谢谢你,Heigh
答案1
我看到报告的一个问题是 radeon 电源管理(您可以使用 在 grub 中将其关闭radeon.pm=0
),它会在启动时关闭第二个 gpu。
我正在使用两个 D700 运行基本 Radeon 驱动程序。它仅适用于一个显示端口显示器。
我正在尝试让我的两台 D700 与多个显示器一起工作,但目前还没有成功。