可能缺少固件 /lib/firmware/i915

我升级了我的笔记本电脑到4.8内核,过程中出现了以下警告。
update-initramfs: Generating /boot/initrd.img-4.8.0-040800-generic
W: Possible missing firmware /lib/firmware/i915/kbl_dmc_ver1_01.bin for module i915
W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915
W: Possible missing firmware /lib/firmware/i915/bxt_guc_ver8_7.bin for module i915

这些对我来说有点奇怪,因为我的CPU是i7-6700HQ,它是Skylake架构的,我的理解是这些驱动是针对不同的CPU的?在过去,我遵循了这里的指示,因为我曾经收到关于我的CPU系列的警告。
这些警告是我应该忽略的事情,还是我应该为这些CPU系列安装guc/dmc驱动程序?

请不要删除您现有的内核。这样,即使您在最新的内核中遇到任何问题,也可以恢复到旧的内核。 - Raphael
3我投票关闭这个问题,因为这个问题涉及到一个不受支持的内核。 - Pilot6
这些消息是针对不同的CPU的,你没有收到Skylake CPU的那个消息,所以你可以忽略它们。 - Doug Smythies
@Pilot6 我可以问一下为什么这个话题不相关吗?它涉及到Ubuntu 16.04和从Ubuntu内核ppa安装的4.8内核。 - Malachi
这被认为是离题的,因为目前还没有使用4.8内核的官方发布版本,因此也没有官方支持。16.10将在几周后发布,并使用4.8内核。就我个人而言,我认为这些问题是好问题,因为它们往往已经为16.10正式发布时建立了答案。您可以随时在Ubuntu论坛-开发子论坛上获得帮助,在该论坛上总会有一个当前发布候选内核系列的主题讨论。 - Doug Smythies
https://bugs.launchpad.net/ubuntu/+source/linux-firmware/+bug/1611124 - gliptak
3因为Ubuntu 16.10现在使用Linux内核4.8,所以我提名重新打开这个问题。警告信息影响了许多用户,并且此线程被引用在一个错误报告中:https://bugs.launchpad.net/ubuntu/+source/linux-firmware/+bug/1611124 - WinEunuuchs2Unix
6个回答

2019年5月20日更新

回答你的问题,如果你没有使用某个处理器,就不需要更新驱动程序,但是当你这样做时,看到警告消失也是一件好事。

今天我收到了以下警告:

update-initramfs: Generating /boot/initrd.img-5.0.1-050001-generic
W: Possible missing firmware /lib/firmware/i915/skl_dmc_ver1_27.bin for module i915
W: Possible missing firmware /lib/firmware/i915/kbl_dmc_ver1_04.bin for module i915
W: Possible missing firmware /lib/firmware/i915/cnl_dmc_ver1_07.bin for module i915
W: Possible missing firmware /lib/firmware/i915/icl_dmc_ver1_07.bin for module i915
W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_39.bin for module i915
W: Possible missing firmware /lib/firmware/i915/bxt_guc_ver9_29.bin for module i915
W: Possible missing firmware /lib/firmware/i915/skl_guc_ver9_33.bin for module i915

我下载了 blobs(在下一节中描述),然后使用了:
$ sudo cp ~/Downloads/*.bin /lib/firmware/i915/

$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.0.1-050001-generic

现在我的Sky Lake(skl)驱动程序已经更新,我可以尝试互联网上推荐的最新内核参数了。关于未来处理器Kaby Lake(kbl)、Cannon Lake(cnl)和Ice Lake(icl)的警告信息已经消失,让生活变得更轻松。

2018年5月26日更新

2018年8月6日小修订。

“斑点”新下载界面

最近,英特尔创建了一个新的下载页面和新的网页布局:

Intel i915 firmware blobs

下载文件现在被称为固件“块”,这是对固件“驱动程序”的新说法。它代表二进制大对象(BLOB)。
驱动程序按处理器进行分类:
- `bxt`:Broxton,2016年取消,是Cherry Trail处理器的继任者。 - `kbl`:Kabylake,第7代,例如i7-7700。 - `skl`:Skylake,第6代,例如i7-6700。
然后,驱动程序按子组进行组织(完整解释请点击此处):
- `GUC`:GuC旨在对各种图形并行引擎进行图形工作负载调度。 - `DMC`:DMC提供额外的图形低功耗空闲状态。 - `HUC`:HuC旨在将一些媒体功能从CPU卸载到GPU上。
将错误消息与所需驱动程序匹配。
比较您收到的错误消息,通过 "update-initramfs" 或 "update-grub" 找到缺失的驱动程序。在您的示例中,消息是 "/lib/firmware/i915/kbl_guc_ver9_14.bin",所以您缺少名为 "kbl_guc_ver9_14.bin" 的Kabylake GuC。您不需要更新版本的 "kbl_guc_ver9_39.bin"。

下载所需驱动程序

与过去版本不同,现在没有安装脚本了。只需将缺失的驱动程序(blob)突出显示并单击它。将显示以下屏幕:

Intel i915 drivers download.png

最初你只能看到“十六进制转储”,但在点击标题为plain的链接后,会出现一个下载窗口,如上所示。

点击“保存文件”

使用简单的sudo cp(复制命令)安装驱动程序

下载后,安装只需简单的sudo cp(复制命令),没有复杂的tar命令或./script_name安装步骤。

快速安装

cd ~/Downloads
sudo cp kbl_guc_ver9_14.bin /lib/firmware/i915
sudo cp bxt_guc_ver8_7.bin /lib/firmware/i915

重要提示:请将上述的kbl_guc_ver9_14.binbxt_guc_ver8_7.bin替换为您下载的缺失驱动程序名称。

大功告成!新驱动已安装。比以前安装缺失的Intel i915驱动程序的方法简单得多!

简短概述安装过程

我已经安装了该驱动程序。这个冗长的安装方法让您了解在复制BLOB之前和之后的效果:

$ sudo updatedb
$ llocate kbl_guc_ver9_14.bin
ACCESS      OWNER  GROUP  SIZE    MODIFIED    NAME (updatdb last ran: 2018-05-26 12:07:57)
-rw-rw-r--  rick   rick   142656  2018-05-26  /home/rick/Downloads/kbl_guc_ver9_14.bin
-rw-rw-r--  rick   rick   142656  2017-02-24  /home/rick/Downloads/kbl_guc_ver9_14/kbl_guc_ver9_14.bin
-rw-r--r--  root   root   142656  2017-10-26  /lib/firmware/i915/kbl_guc_ver9_14.bin
$ diff /home/rick/Downloads/kbl_guc_ver9_14/kbl_guc_ver9_14.bin /lib/firmware/i915/kbl_guc_ver9_14.bin
# Blank line appears here signifying no differences from previous version
$ sudo cp /home/rick/Downloads/kbl_guc_ver9_14/kbl_guc_ver9_14.bin /lib/firmware/i915
$ llocate kbl_guc_ver9_14.bin
ACCESS      OWNER  GROUP  SIZE    MODIFIED    NAME (updatdb last ran: 2018-05-26 12:07:57)
-rw-rw-r--  rick   rick   142656  2018-05-26  /home/rick/Downloads/kbl_guc_ver9_14.bin
-rw-rw-r--  rick   rick   142656  2017-02-24  /home/rick/Downloads/kbl_guc_ver9_14/kbl_guc_ver9_14.bin
-rw-r--r--  root   root   142656  2018-05-26  /lib/firmware/i915/kbl_guc_ver9_14.bin

使用下面的locate命令替换llocate
2月14日,2017年 - Intel发布了驱动程序
根据今天的错误报告(W:可能缺少模块i915的/lib/firmware/i915/kbl_guc_ver9_14.bin固件),Intel已在其(https://01.org/linuxgraphics/downloads/firmware)网页上发布了所需的Kabylake和Broxton驱动程序。

Intel Graphics for Linux Drivers

下载缺失的Kabylake驱动程序(GuC - Ver 9.14)和(DMC - Ver 1.01),以及BroxtonGuC - Ver 8.7)。这些文件以.tar.gz.tar.bz2格式提供。

以"tar"格式安装驱动程序

虽然您可以运行install.sh脚本,但以下说明是最简单的。

切换到下载目录并验证文件是否存在:

:~$ cd Downloads

:~/Downloads$ ll *tar*
-rw-rw-r-- 1 rick rick 69329 Feb 14 21:05 bxtgucver87.tar.gz
-rw-rw-r-- 1 rick rick  4338 Feb 14 21:06 kbldmcver101.tar.bz2
-rw-rw-r-- 1 rick rick 70402 Feb 14 21:06 kblgucver914.tar.gz

解压缩tar文件:

:~/Downloads$ tar -zxvf bxtgucver87.tar.gz
firmware/bxt/guc/bxt_guc_ver8_7/
firmware/bxt/guc/bxt_guc_ver8_7/install.sh
firmware/bxt/guc/bxt_guc_ver8_7/ReleaseNotes.txt
firmware/bxt/guc/bxt_guc_ver8_7/bxt_guc_ver8_7.bin

:~/Downloads$ tar -xjvf kbldmcver101.tar.bz2
kbl_dmc_ver1_01/
kbl_dmc_ver1_01/kbl_dmc_ver1_01.bin
kbl_dmc_ver1_01/install.sh
kbl_dmc_ver1_01/ReleaseNotes.txt

:~/Downloads$ tar -zxvf kblgucver914.tar.gz
firmware/kbl/guc/kbl_guc_ver9_14/
firmware/kbl/guc/kbl_guc_ver9_14/install.sh
firmware/kbl/guc/kbl_guc_ver9_14/kbl_guc_ver9_14.bin
firmware/kbl/guc/kbl_guc_ver9_14/ReleaseNotes.txt

复制文件并更新initramfs
:~/Downloads$ sudo cp -t /lib/firmware/i915/ firmware/bxt/guc/bxt_guc_ver8_7/bxt_guc_ver8_7.bin kbl_dmc_ver1_01/kbl_dmc_ver1_01.bin firmware/kbl/guc/kbl_guc_ver9_14/kbl_guc_ver9_14.bin
:~/Downloads$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-4.9.9-040909-generic

注意到错误(警告)消息已消失! 删除工作文件。
:~/Downloads$ rm -r firmware kbl_dmc_ver1_01 *.tar.*

历史(原始)帖子供参考

在内核版本4.6.3、4.7.1、4.7.2、4.7.3和4.7.5中,我收到两个关于缺少i915驱动的警告信息。我忽略了它们,并且我的HD4000英特尔集成显卡工作得很好。但希望能对Nvidia和Nouvaeu也有同样的说法。

正如您给出的链接中的一个回答所述,您可以访问Intel的网站获取最新的Linux图形驱动程序:intel-linux-graphics-firmwares。然而,几周前我阅读该网站时,我对在不同情况下可能出现的所有可能问题感到担忧,因此我选择了放弃。

您是否安装了从2016年9月24日起的4.8版本预发布候选版6?我相信这是Ubuntu上最新的版本。您不必回答,但我很好奇为什么您选择了4.8而不是4.7.5,也就是您需要修复的问题之间有何区别。

编辑 - 2016年10月19日

现在已经使用内核版本4.8.1(真实版本而不是发布候选版本)超过一周,一切正常。虽然这是在Ubuntu 16.04下进行的。Ubuntu 16.10于10月13日发布,我认为它使用的是Kernel版本4.8.0。

我的计划不是要不断更新这个答案,但我想澄清一个观点,即4.8发布候选版可能存在问题。真实版本没有问题。

编辑-2017年2月2日

现在运行Kernel版本4.9.5主线版本,此时Ubuntu 16.04已将其内核更新到4.4.0-59。Intel更改了其Linux英特尔图形驱动程序驱动程序的链接,我已更新上面的新链接。

关于Kernel版本> 4.8(Ubuntu 16.10和Ubuntu 17.04)时生成的警告消息,仍然存在问题:

W: Possible missing firmware /lib/firmware/i915/kbl_dmc_ver1_01.bin for module i915
W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915
W: Possible missing firmware /lib/firmware/i915/bxt_guc_ver8_7.bin for module i915

如在错误报告中所述(bugs.launchpad.net - linux firmware bug),驱动程序根本不存在,直到未来发布名为“kaby lake”的芯片为止。
让警告消息消失的方法如下:
$ sudo cp assembly/hello /lib/firmware/i915/kbl_dmc_ver1_01.bin
$ sudo cp assembly/hello /lib/firmware/i915/kbl_guc_ver9_14.bin
$ sudo cp assembly/hello /lib/firmware/i915/bxt_guc_ver8_7.bin
$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-4.9.5-040905-generic

看,没有更多的警告信息了。

程序“hello”是一个504字节的汇编程序,它会显示“Hello World!”。您可以将任何小型可执行文件复制到错误消息中提供的固件二进制文件中。当英特尔最终发布它们时,软件更新程序将用真实版本替换它们。

如何浏览英特尔Linux图形网站

有人通过评论询问如何在新的英特尔网站(01.org - Linux Graphics Downloads)中导航,该网站显示以下屏幕:

Intel Graphics for Linux 1

在搜索框中输入“Ubuntu 16.04”,然后点击“筛选”按钮。
对于Ubuntu 16.10,请选择第一个结果。在我们的情况下,选择第二个结果“INTEL GRAPHICS UPDATE TOOL FOR LINUX* OS V2.0.2”,然后会出现以下屏幕:

Intel Graphics for Linux 2

在我的情况下,我选择了Ubuntu 16.04 64位版本,它会将文件intel-graphics-update-tool_2.0.2_amd64.deb下载到我的~/Downloads目录中。
下一步是打开终端并使用以下命令:
cd Downloads
sudo dpkg -i intel*.deb

注意:Intel使用古老的ttf字体,如果您的系统中没有该字体,安装将失败。此时您需要使用以下方法:
sudo apt -f install
sudo apt update
sudo apt upgrade

现在你可以运行“Intel Graphics for Linux Updater”工具,就像这个屏幕显示的那样。

Intel Graphics for Linux 3

为Ubuntu添加Intel签名

在执行apt-get update命令时,您可能会看到如下的警告/错误信息:

W: GPG error: https://download.01.org/gfx/ubuntu/16.04/main xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 56A3DEF863961D39
E: The repository 'https://download.01.org/gfx/ubuntu/16.04/main xenial InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

您需要使用以下方法添加Intel的签名:
wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg-4 -O - | \
sudo apt-key add -

然后在Ubuntu中进行更新:
sudo apt update
sudo apt upgrade

我在4.7.1-4版本中从未遇到过这些警告。你读到了什么可能出错的信息?到目前为止,我从未注意到任何问题。我选择了昨天发布的正式版本。没有特别的原因让我直接跳到4.8版本。 - Malachi
1警告已经存在一段时间了。我可能对它们发布的确切版本有所错误。就可能出现的问题而言,网页上充满了“如果发生这种情况,你必须做那个”的内容。我现在得走了,但如果你愿意,我可以再次查看并稍后更新答案。我认为4.7.x版本是稳定的,而4.8.x系列的“发布候选版”更容易受到新的错误和内核回归的影响。但我不是一个内核专家,只是一个业余爱好者/热衷者。 - WinEunuuchs2Unix
图形固件的链接已经失效了。有人知道现在哪里可以获取固件吗? - Nickolai Leschov
@NickolaiLeschov 我已更新链接。 - WinEunuuchs2Unix
哪一个是固件呢?@WinEunuuchs2Unix - Nickolai Leschov
@NickolaiLeschov 我已经更新了答案。虽然没有固件可用,但我已经找到了一个解决方法,目前对我来说还算有效。 - WinEunuuchs2Unix
1Intel已经创建了一个新的下载页面。你所提到的下载页面并不是Intel的下载页面,而是导入固件的GNU/Linux内核存储库。这是误导性的。事实上,linux-firmware正是你的发行版应该已经向你公开的东西,很可能作为一个软件包提供给你,因此从那里手动下载并不是一个好主意。相反,安装linux-firmware软件包即可。如果你正在寻找不在这个软件包中的固件,那么它也不会出现在你链接的这个页面上。 - lhunath
1这种方法(2018年5月26日更新)对我来说完美无缺。目前来看,声称这些固件已包含在 linux-firmware软件包中的说法显然是错误的。 - Elder Geek
澄清一下,缺失的固件错误已经消失了,但重新启动后的结果是[低图形模式]。 - Elder Geek
@eldergeek 如果我没记错的话,一些新的驱动程序需要内核参数覆盖来修复错误。 - WinEunuuchs2Unix
我记得以前使用过i915.alpha_support=1,但我印象中最近的内核版本已经不再需要这个了。我决定重新安装18.04版本,看起来它能够正常工作,只要我避免使用Wayland。 - Elder Geek
1@ElderGeek 我还没有尝试过使用Wayland,但可能很快会去发现它的xrandr等效方法来设置显示器的亮度和伽马值。 - WinEunuuchs2Unix
1@WinEunuuchs2Unix 如果你对这个感兴趣的话,你可以看一下这个链接。我发现有太多事情无法按预期工作,所以对Wayland并不感到兴奋。我需要我的系统能够正常运行。 - Elder Geek
2@ElderGeek老哥,看起来Wayland还需要做很多工作啊。这是我读到的关于Intel i915内核参数,但是不记得在哪里了:i915.enable_rc6=0 i915.enable_psr=0 i915.preliminary_hw_support=1 i915.enable_hd_vgaarb=1 i915.enable_guc_loading=1 i915.enable_guc_submission - WinEunuuchs2Unix
这个固件 i915 的目的是为了支持英特尔集成显卡,还是有其他用途?我很难理解为什么英特尔 HD Graphics 需要自己的固件,而 Nouveau 预装并且非免费的 Nvidia 驱动则完全跳过了这一步骤。此外,使用 i915.modeset=1 启动一个实时 CD 会导致系统挂起。我已经安装了 icl_dmc_ver1_07.bin,因为内核 4.20 需要它,但如果我不使用 i915.modeset=1,是否会错过一些东西?(附带问题)在 Nouveau/Wayland 桌面环境中,使用上述的 i915 设置能够修复 GPU 性能差的问题吗? - avisitoritseems

你可以从Intel网站https://01.org/linuxgraphics/downloads/firmware下载缺失的内核固件。
  1. 下载所需文件
  2. 使用tar -xvf解压文件
  3. 使用sudo bash ./install --install安装驱动程序

对所有提到的固件重复上述步骤,然后重新启动计算机。


Intel又改了网站,现在重定向到git.kernel.org。
使用终端窗口(终端、PuTTY等或本地机器)查看警告,然后针对每个警告,在Intel的git页面中点击链接(该链接会显示文件的十六进制转储),从转储上方的“plain”按钮复制链接位置,返回终端并使用wget下载此链接。
一旦获得与每个警告对应的文件,请将它们使用“cp”或“sudo cp”命令复制到“/lib/firmware/i915”目录下。

1欢迎来到Ask Ubuntu!**;-)** 修改现有答案并添加新信息比发布额外的答案更好。 - Fabby

解决方案

  1. 首先安装或更新linux-firmware

    sudo apt install linux-firmware
    
  2. 检查确保没有更多的固件丢失

    sudo update-initramfs -u
    
  3. 如果仍然缺少任何固件,请按照WinEunuuchs2Unix的答案手动安装

细节

过去,我通过手动下载丢失的固件并将其复制到指定位置来解决这个问题,正如WinEunuuchs2Unix所建议

我今天才看到这条消息:

update-initramfs: Generating /boot/initrd.img-6.2.0-31-generic
W: Possible missing firmware /lib/firmware/i915/dg2_huc_gsc.bin for module i915

但我注意到在更新linux-firmware后它消失了。果然,在包里有那个文件。
$ apt-file list linux-firmware | grep /lib/firmware/i915/dg2_huc_gsc.bin
linux-firmware: /lib/firmware/i915/dg2_huc_gsc.bin

实际上,仅针对i915就有一百多个文件。
 apt-file list linux-firmware | grep i915 | wc -l
123

总共有数千个固件文件:
$ apt-file list linux-firmware | grep /lib/firmware | wc -l
3069

也许如果尚未添加到linux-firmware中,固件可能会丢失,但至少在我目前的机器上(使用第11代英特尔CPU),我所需的所有固件都在linux-firmware中。

我在更新后收到了这些“missing firmware /lib/firmware/i915/...file”的消息。我的系统甚至没有/lib/firmware/i915目录。而且所有操作都看起来正常。
不顾一切,有了最近的完整备份,我决定尝试创建虚假的空文件,以解决update-initramfs进程报错的问题。我将其错误消息复制到一个临时文件中(例如mytempfile),然后使用其中一个文本编辑器(如vi、mcedit、sed等)将行从例如
W: Possible missing firmware /lib/firmware/i915/bxt_dmc_ver1_07.bin for module i915
改为
sudo touch /lib/firmware/i915/bxt_dmc_ver1_07.bin,对于每个出错的.bin文件。
然后我创建了必要的目录:
sudo mkdir /lib/firmware/i915
并引用了我的临时文件:source mytempfile 然后生成了一个新的intramfs:sudo update-initramfs -u
观察到再也没有关于缺少i915 .bin文件的错误消息。
测试重新启动,一切正常。
此过程将为每个丢失的.bin文件创建一个空的零大小文件。如果推送了包含新更新的.bin文件的更新,它将覆盖我们刚刚创建的空文件。
一些注意事项:
1.备份好数据。 2.只有在完全更新系统后才执行此操作。 3.确保没有任何可能干扰的问题。 4.这对我有效。你的情况可能有所不同。而且这种解决方法可能不被权威人士“认可”。
(转贴,因为我讨厌只回答一个链接到另一个帖子的问题...)

我明白了,并进行了修复和测试。
在每个命令后尝试重新启动,以确认是否还需要更多的命令。
测试一下这个是否有效。两个或一个软件包都可以。
sudo apt install firmware-b43-installer

它还安装并使用b43-fwcutter。
也许有些人不需要这个,但是。
sudo apt install firmware-b43legacy-installer

那么

modprobe b43

我觉得这个应该解决了,如果重新启动后还不起作用的话。
也许重新启动后可以再检查一下,可能会显示其他驱动程序的错误,但是您的驱动程序已经安装好了。
sudo update-initramfs -u -k all

从我的测试中

https://askubuntu.com/a/1387293/9550