当我最近在一台新机器上安装 Ubuntu 16.10 时(华擎 Z170 Gaming-ITX/AC S1151 M-ITX 英特尔主板配备英特尔酷睿 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*
我读过很多网站,暗示这是早期内核版本(需要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:
线路之后的 100 秒左右)
使用i915.i915_enable_rc6=1
,我收到一条消息:
i915: unknown parameter 'i915_enable_rc6' ignored`
所以这显然没有做任何事情。
我也尝试过添加i915
and nvme
into /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
如果有帮助,我已经粘贴了nomodeset boot和non-nomodeset, blank screen bootdmesg
的完整输出。有一些差异(包括文件的加载,但我不知道该怎么做...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
错误报告
你的错误:
类似于 2014 年错误报告中讨论的这个:(屏幕在启动时冻结在“fb:从简单切换到 inteldrmfb”)。然而,它应该已在内核 3.17 / 3.18 中修复。
内核版本 4.8.7
内核版本 4.8.7 有许多针对英特尔 i915 驱动程序(以及许多 AU 中可能感兴趣的 Radeon)的补丁程序,如下所述:(Softpedia 新闻 - Linux 内核 4-8-7 更新英特尔和 radeon 驱动程序改进了无线支持)。事实上,一些无线用户可能也想要这个内核更新。
这个故事提供了一个下载内核的链接,但不要使用它。而是转到(kernel.ubuntu.com ~kernel v4.8.7)。如果有人需要分步说明,请发表评论,我会在此处添加。
已知 i915 死机
众所周知,i915 DRM 驱动程序会导致各种 GPU 挂起、崩溃甚至整个系统死机。可能需要禁用硬件加速才能解决这些问题。
您还没有尝试过的一种解决方案是通过编辑(或创建)
/etc/X11/xorg.conf.d/20-intel.conf
具有这些行的文件来使用以下 Xorg 配置:保存并重新启动(没有 nomodeset)。
如果黑屏问题消失但 Google-Chrome 或 Fire Fox 死机,您将不得不在其中禁用硬件加速。
最新的英特尔固件
另一个重要的考虑因素是您在这篇 AU 文章(Ubuntu 16.04 Skylake 过热)中讨论的 Intel 固件,它应该是 2016 年 9 月 27 日的版本 3.20160714.1 或更高版本。
你在使用显示端口吗?我也遇到了 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)
我有相同的主板并且在第一次尝试设置 linux 时遇到了显示问题 - 不确定它是混合了错误的驱动程序和错误的主板固件还是只是错误的驱动程序,但我发现了以下内容:
插入 2 个 HDMI 显示器 - 显示后屏幕和初始启动,但没有 GUI
带有 1 个 HDMI 输入端口,位于显示端口连接器上方(M/B 用户手册中的 HDMI1)- 无 GUI
显示端口连接器左侧有 1 个 HDMI 端口(m/b 用户手册中的 HDMI2) - 工作正常,GUI 显示正常
带有 1 个显示端口和 1 个 HDMI2 连接显示器 - 工作正常,两个屏幕上都有 GUI。
带有 1 个显示端口和 1 个 HDMI1 连接的显示器 - 部分工作,DP 屏幕上的 GUI,HDMI1 屏幕空白,但显示为在 xrandr 输出中连接。
以上所有内容都在完全更新的 Ubuntu 16.04 上,不需要内核参数(由于当时的内核版本,我最初确实需要 i915.preliminary_hw_support=1 设置,但现在不再需要了)
我无法让三台显示器在 Linux 下运行——尽管它们在 Windows 10 下运行良好。
注意:我最近也将 M/B 更新为最新固件,它解决了 ACPI 错误消息填充 dmesg 的问题,使其无法用于诊断目的,因此也值得这样做。
不确定它是否会有所帮助,但我记得在我的华硕上使用英特尔 skylake 安装 ubuntu 时遇到了类似的问题。我不知道问题到底出在哪里,但这帮助了我。
希望能帮助到你。