Ubuntu 16.10 上的 Intel SkyLake 空白屏幕

DrA*_*rAl 6 display multiple-monitors intel-graphics

当我最近在一台新机器上安装 Ubuntu 16.10(华擎 Z170 Gaming-ITX/AC S1151 M-ITX Intel 主板,带有 Intel Core Skylake 处理器 i5-6500/3.2 GHz 处理器 CPU)时,我在第一次启动时出现黑屏。

在网上搜索了很多之后,我发现我可以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*
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多网站,这些网站表明这是早期内核版本(需要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
Run Code Online (Sandbox Code Playgroud)

在所有情况下,我都删除了,quiet splash以便我可以看到发生了什么。根据选项的不同,可见的引导过程会到达不同的位置。随着nomodeset它一直到虚拟控制台(我从服务器安装开始,所以我可以更好地选择我想要的包)。没有nomodeset,它可以达到:

[    5.088899] fb: switching to inteldrmfb from VESA VGA
Run Code Online (Sandbox Code Playgroud)

随着nolapic作为唯一此外,它得到几行进一步上(既涉及到SATA的东西,我认为)。这可能是相对随机的,因为我已经尝试了几次并且在 SATA 东西中进入了不同的阶段(但总是在fb:线路后的 100 秒左右)

随着i915.i915_enable_rc6=1,我收到一条消息:

i915: unknown parameter 'i915_enable_rc6' ignored`
Run Code Online (Sandbox Code Playgroud)

所以这显然没有做任何事情。

我也试过添加i915nvme进入/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
Run Code Online (Sandbox Code Playgroud)

...暗示驱动程序在某种程度上正在工作,屏幕上什么也没有绘制。

任何人都可以为我做错了什么提供任何建议吗?

我显然可以根据需要添加更多信息,但我现在不确定要添加什么。


编辑 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"
Run Code Online (Sandbox Code Playgroud)

这是 /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
}
Run Code Online (Sandbox Code Playgroud)

编辑 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
Run Code Online (Sandbox Code Playgroud)

它显示的固件版本比 initramfs 似乎期望的固件版本要早得多

  • 在此之后,我按照此处的说明升级到内核版本 4.8.6(这也报告了上述缺失的固件行)。然后我重新启动(再次没有nomodeset)并再次到达完全相同的地方。

  • 由于上面的错误似乎与 Kabylake 和 Broxton 处理器的固件有关(尽管我很确定我有一个 Skylake),我从这里下载了这两个的最新文件- 不过这似乎只是 DMC 的东西。安装这两个会产生关于缺少固件的相同消息(大概是因为它们是 DMC 文件并且版本号不同)。不出所料,结果完全相同:没有nomodeset,屏幕在 之后冻结fb: switching to inteldrmfb from VESA VGA

据我所知,这些固件文件与未发布的处理器有关,因此无论如何都不太可能相关,但我认为值得一试。


编辑 4

如果有帮助,我已经粘贴了nomodeset bootnon-nomodeset, blank screen boot的完整dmesg输出。有一些差异(包括文件的加载,但我不知道该怎么做......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

您正在使用显示端口吗?我在 Ubuntu 16.10 上的 skylake、内核 4.8 和 i915 驱动程序方面也遇到了麻烦 ==> Intel 尚未发布 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)