当我最近在一台新机器(ASRock Z170 Gaming-ITX/AC S1151 M-ITX Intel 主板,配备 Intel Core Skylake 处理器 i5-6500/3.2 GHz 处理器 CPU)上安装 Ubuntu 16.10 时,第一次启动时出现空白屏幕。
在网上搜索了一番后,我发现我可以使用nomodeset
内核命令行正确启动 Linux。但是,这限制了我的图形选项,因为xrandr -q
只报告一个显示器:
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 1024 x 768, current 1024 x 768, maximum 1024 x 768
default connected 1024x768+0+0 0mm x 0mm
1024x768 76.00*
我读过很多网站,它们都认为这是早期内核版本(需要i915.preliminary_hw_support=1
)的一个问题,而 4.3+ 版本应该没有问题,但我已经:
Linux mypc 4.8.0-26-generic #28-Ubuntu SMP Tue Oct 18 14:39:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
所以我认为这不应该是个问题。根据我读过的一些网站,我尝试了以下所有内核选项(以及一些随机组合),但都没有帮助:
i915.preliminary_hw_support=1
i915.i915_enable_rc6=1
nolapic
在所有情况下,我都会删除,quiet splash
以便能够看到发生了什么。根据选项的不同,可见的启动过程会到达不同的位置。使用nomodeset
它可以一直到达虚拟控制台(我从服务器安装开始,这样我就可以更好地选择我想要的软件包)。如果没有nomodeset
,它会到达:
[ 5.088899] fb: switching to inteldrmfb from VESA VGA
作为nolapic
唯一的补充,它得到了几行进一步的内容(我认为都与 SATA 有关)。不过,这可能是相对随机的,因为我已经尝试了几次,并进入了 SATA 内容的不同阶段(但总是在该fb:
行之后的 1/100 秒左右)
使用i915.i915_enable_rc6=1
,我收到一条消息:
i915: unknown parameter 'i915_enable_rc6' ignored`
所以这显然没有任何作用。
我也尝试过将i915
和添加nvme
到中/etc/modules
,但同样没有明显的效果。
以上所有内容均来自不同的论坛(以及本网站),但恐怕我没有记录所有参考资料 - 因此没有链接到任何原始问题。
在内核行是空的情况下(只有安装程序添加的内容而没有nomodeset
),如果我通过 ssh 进入机器并startx
,我可以运行xrandr
并看到:
Screen 0: minimum 8 x 8, current 1280 x 1024, maximum 32767 x 32767
DP1 disconnected (normal left inverted right x axis y axis)
DP2 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 376mm x 301mm
1280x1024 60.02 + 75.02
1920x1080 60.00 59.94
1152x864 75.00
1280x720 60.00 59.94
1024x768 75.03 72.00 70.07 60.00
800x600 72.19 75.00 60.32 56.25
720x480 60.00 59.94
640x480 75.00 72.81 60.00 59.94
720x400 70.08
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 531mm x 299mm
1920x1080 60.00 + 50.00 59.94 59.99
1920x1080i 60.00 50.00 59.94
1600x1200 60.00
1680x1050 59.88
1280x1024 75.02 60.02
1440x900 59.90
1280x960 60.00
1366x768 59.79
1152x864 75.00
1280x720 60.00 50.00 59.94
1024x768 75.03 70.07 60.00
832x624 74.55
800x600 72.19 75.00 60.32 56.25
720x576 50.00
720x480 60.00 59.94
640x480 75.00 72.81 66.67 60.00 59.94
720x400 70.08
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
1280x1024 (0x4a) 540.000MHz +HSync +VSync
h: width 1280 start 1328 end 1440 total 1688 skew 0 clock 319.91KHz
v: height 1024 start 1025 end 1028 total 1066 clock 300.10Hz
... 这表明驱动程序正在工作,只是屏幕上没有绘制任何内容。
有人能针对我做错的事情提出建议吗?
我显然可以根据需要添加更多信息,但目前我不确定要添加什么。
编辑1
这是我当前的 grub 配置 /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=1024x768
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
/boot/grub/grub.cfg 中以下部分似乎最相关:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c21835f3-4aaf-4880-b573-19a361a72db9' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 c21835f3-4aaf-4880-b573-19a361a72db9
else
search --no-floppy --fs-uuid --set=root c21835f3-4aaf-4880-b573-19a361a72db9
fi
linux /boot/vmlinuz-4.8.0-26-generic root=UUID=c21835f3-4aaf-4880-b573-19a361a72db9 ro nomodeset
initrd /boot/initrd.img-4.8.0-26-generic
}
编辑2
Xorg.log 在这里:http://pastebin.com/nvNwTPj4
我重新启动并(在 grub 编辑屏幕中)删除了 nomodeset,还删除了 gfxmode 行(因为我有一些关于删除 vga= 的评论,但实际上没有 vga= 可以删除)。这导致与以前相同的空白屏幕。
我也尝试过只text
在引导行上进行操作,但是结果与没有任何操作的结果相同(switching to inteldrmfb
如上所述)。
编辑3
按照@Mladen 的建议:
我现在尝试安装英特尔显卡驱动程序https://01.org/linuxgraphics/intel-linux-graphics-firmwares- 两款 Skylake 处理器 - 按照说明安装 GuC 和 DMC。然后我重新启动,没有
nomodeset
进入启动行,屏幕在与其他测试相同的位置变黑。但有趣的是,它显示:W:可能缺少模块 i915 的固件 /lib/firmware/i915/kbl_guc_ver9_14.bin W:可能缺少模块 i915 的固件 /lib/firmware/i915/bxt_guc_ver8_7.bin
输出ls -l /lib/firmware/i915
显示:
total 412
-rw-r--r-- 1 root root 8380 Aug 15 15:40 bxt_dmc_ver1_07.bin
lrwxrwxrwx 1 root root 19 Aug 15 15:40 bxt_dmc_ver1.bin -> bxt_dmc_ver1_07.bin
-rw-r--r-- 1 root root 8616 Aug 15 15:40 kbl_dmc_ver1_01.bin
lrwxrwxrwx 1 root root 19 Aug 15 15:40 kbl_dmc_ver1.bin -> kbl_dmc_ver1_01.bin
-rw-r--r-- 1 root root 8824 Sep 14 13:47 skl_dmc_ver1_23.bin
-rw-r--r-- 1 root root 8928 Nov 10 17:54 skl_dmc_ver1_26.bin
lrwxrwxrwx 1 root root 38 Nov 10 17:54 skl_dmc_ver1.bin -> /lib/firmware/i915/skl_dmc_ver1_26.bin
-rw-r--r-- 1 root root 109636 Aug 15 15:40 skl_guc_ver1.bin
-rw-r--r-- 1 root root 128320 Aug 15 15:40 skl_guc_ver4.bin
-rw-r--r-- 1 root root 129024 Nov 10 17:53 skl_guc_ver6_1.bin
lrwxrwxrwx 1 root root 37 Nov 10 17:53 skl_guc_ver6.bin -> /lib/firmware/i915/skl_guc_ver6_1.bin
显示的固件版本比 initramfs 预期的要早得多
之后,我按照说明进行操作这里升级到内核版本 4.8.6(这也报告了上述缺失的固件行)。然后我重新启动(再次没有
nomodeset
),它再次回到完全相同的位置。由于上述错误似乎与 Kabylake 和 Broxton 处理器的固件有关(尽管我很确定我有一个 Skylake 处理器),我从这里- 不过这似乎只是 DMC 的东西。安装这两个文件时,会出现相同的消息,提示缺少固件(可能是因为它们是 DMC 文件,版本号不同)。不出所料,结果完全相同:没有
nomodeset
,屏幕在 之后会冻结fb: switching to inteldrmfb from VESA VGA
。
据我所知,这些固件文件与未发布的处理器有关,因此无论如何都不太可能相关,但我认为值得一试。
编辑4
为了帮助大家,我粘贴dmesg
了启动模式和一个非 nomodeset,开机黑屏。存在一些差异(包括skl_dmc_ver1_26.bin
文件的加载,但我不确定该如何处理这一切......
编辑5
我现在也尝试使用内核 4.8.7,但行为与 4.8.0 或 4.8.6 相同。安装英特尔微码版本 3.20160714.1 也没有产生任何明显的区别。
编辑6
如果这被证明是一个内核错误,以某种方式与这个,我在内核 bugzilla 页面上提出了一个错误 -https://bugzilla.kernel.org/show_bug.cgi?id=187601
答案1
错误报告
您的错误:
[ 5.088899] fb: switching to inteldrmfb from VESA VGA
与 2014 年错误报告中讨论的类似: (启动时屏幕冻结在“fb:从简单切换到 inteldrmfb”)。然而它应该已经在内核 3.17 / 3.18 中被修复了。
内核版本 4.8.7
内核版本 4.8.7 有许多针对 Intel i915 驱动程序(以及许多澳大利亚人可能感兴趣的 Radeon)的补丁,如下所述:(Softpedia 新闻 - Linux 内核 4-8-7 更新英特尔和 Radeon 驱动程序改进无线支持)。事实上一些无线用户可能也希望进行此内核更新。
这篇报道提供了下载内核的链接,但不要使用它。最好去(kernel.ubuntu.com ~内核 v4.8.7)。如果有人需要分步说明,请发表评论,我会将其添加到这里。
已知 i915 冻结
众所周知,i915 DRM 驱动程序会导致各种 GPU 挂起、崩溃甚至整个系统冻结。可能需要禁用硬件加速来解决这些问题。
您尚未尝试过的一个解决方案是使用以下 Xorg 配置,通过/etc/X11/xorg.conf.d/20-intel.conf
以下行编辑(或创建)文件:
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "DRI" "false"
EndSection
保存并重新启动(不使用nomodeset)。
如果黑屏问题消失但 Google Chrome 或 Fire Fox 冻结,您将必须禁用其中的硬件加速。
最新的英特尔固件
另一个重要的考虑因素是您的英特尔固件,该固件在这篇 AU 文章中进行了讨论(Ubuntu 16.04 Skylake 过热),截至2016年9月27日,版本应为3.20160714.1或更高版本。
答案2
您正在使用显示端口吗?我在使用 Ubuntu 16.10 时也遇到了 skylake、内核 4.8 和 i915 驱动程序的问题 ==> 英特尔尚未发布适用于 16.10 的最新图形堆栈。
您可以尝试:
1)切换回 Ubuntu 16.04 LTS(和内核 4.4.x)
2)使用内核4.6.7:http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.6.7/
3)使用最新的 drm-intel-nightly 内核:http://kernel.ubuntu.com/~kernel-ppa/mainline/drm-intel-nightly/ (但不再有 amd64 成功构建可用,最后一次是 2016-10-19)
答案3
我有相同的主板,第一次尝试设置 Linux 时出现了显示问题 - 不确定是驱动程序故障和主板固件故障混合还是仅仅是驱动程序故障,但我发现了以下问题:
插入 2 个 HDMI 显示器 - 显示开机自检屏幕和初始启动,但没有 GUI
带有 1 个 HDMI 输入端口,位于显示端口连接器上方(M/B 用户手册中的 HDMI1)- 无 GUI
显示端口连接器左侧有 1 个 HDMI 输入端口(m/b 用户手册中的 HDMI2)- 工作正常,GUI 显示正常
带有 1 个显示端口和 1 个 HDMI2 连接显示器 - 运行良好,两个屏幕上都有 GUI。
通过 1 x 显示端口和 1 x HDMI1 连接显示器 - 部分工作,DP 屏幕上的 GUI,HDMI1 屏幕空白,但在 xrandr 输出中显示为已连接。
以上所有内容均在完全更新的 Ubuntu 16.04 上进行,无需内核参数(由于当时的内核版本,我最初确实需要 i915.preliminary_hw_support=1 设置,但现在不再需要了)
我无法让三个显示器在 Linux 下工作 - 尽管它们在 Windows 10 下可以正常工作。
注意:我最近还将 M/B 更新到了最新固件,这解决了 ACPI 错误消息填满 dmesg 的问题,使得它对于诊断目的毫无用处,所以也值得这样做。