每次我在运行GNU/Linux Debian Buster 10. 0 的Dell PowerEdge T20 服务器上更新我的initramfs映像(-s)时update-initramfs,我都会收到这些警告。有解决办法吗?
W: Possible missing firmware /lib/firmware/i915/bxt_dmc_ver1_07.bin for module i915
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/glk_dmc_ver1_04.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
W: …Run Code Online (Sandbox Code Playgroud) 我对在 Linux 环境中使用固件感到困惑。
我对固件和驱动程序的理解是,固件是在设备的裸机上运行的代码,例如蓝牙 IC、键盘控制器、视频卡或单一用途的微控制器。固件公开了操作系统使用其服务的接口。
相比之下,驱动程序是内核用来与固件提供的前面提到的接口进行通信的软件。因此,视频驱动程序、键盘驱动程序、蓝牙无线电驱动程序。
那么为什么我一直在阅读有关必须安装的 Linux 固件文件的信息(例如在这里)。这些会上传到硬件中吗?这些文件是否被内核使用?在这种情况下固件的含义是什么?
我将我的计算机发送给制造商进行诊断并帮助解决它遇到的视频输出问题。他们更新了 BIOS。从那时起我就得到
[Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x20 (or later)
Run Code Online (Sandbox Code Playgroud)
我之前没有安装任何微码或ucode包,而且我不习惯收到此消息。
我已经联系了制造商,他们回答说“不记得你的票号,但怀疑我们更新了 BIOS”,所以他们的帮助不大。
它启动并工作,但 TSC_DEADLINE 重要或有用吗?
我唯一能找到的是:https : //git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=73b866d89bf7c9a895d5445faad03fa3d56c8af8
但这似乎只适用于 VirtualBox,无论如何我已经在运行内核 4.14,所以我想如果该提交要解决我的问题,它已经存在。
ryan@pocketwee:~$ uname -a
Linux pocketwee 4.14.0-1-amd64 #1 SMP Debian 4.14.2-1 (2017-11-30) x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud) 如何在 Debian 12(书虫)中使用高级打包工具(APT)安装非自由固件?
我Debian stretch在启动过程中 收到此错误
[ 26.390311] r8169 0000:03:00.0: firmware: failed to load rtl_nic/rtl8168g-3.fw (-2)
Run Code Online (Sandbox Code Playgroud)
之后我继续启动并且工作正常。是否缺少任何固件或驱动程序?
好吧,我感觉太老了,无法通过通常的供应商特定方式来升级几个固件:下载一些 DOS 工具,浪费一些时间创建(免费)DOS 引导介质,浪费更多时间制作 BIOS实际上从中启动,最后刷新固件升级。
这就是 1980 年代。
我从Coreboot 项目中遇到了一些linux flash 工具。它似乎支持各种 FLASH 芯片。但它在实践中如何运作?
我想有一些陷阱将供应商提供的固件升级转换为正确的格式。或者如何确定正确的目标芯片?
目前我可能必须升级,例如:
如何在 Linux 系统上升级设备固件?
我有一个三星 840 PRO 系列 SSD,想更新它的固件,以便为这个问题找到替代解决方案。
我从这个页面下载了“Samsung Magician Software for Enterprise SSD”,因为三星只为 Windows 的消费者 SSD 提供魔术师。根据此 reddit 帖子的最高回复,它应该可以工作。
然而,在试图确定我的 SSD 的 ID 时,魔术师声称没有找到三星 SSD,尽管目前连接到我的笔记本电脑的唯一存储介质是第一段中提到的 SSD。
# ./magician -L
================================================================================================
Samsung(R) SSD Magician DC Version 2.0
Copyright (C) 2015 SAMSUNG Electronics Co. Ltd. All rights reserved.
================================================================================================
Magician is now configuring the environment for LSI MegaRAID SAS.
Magician is now configuring the environment for LSI SAS IT/IR Controller.
Magician is now configuring the environment for LSI …Run Code Online (Sandbox Code Playgroud) 我有一个由 驱动的 Intel 无线网卡iwlwifi,我可以在 dmesg 中看到以下消息:
iwlwifi 0000:03:00.0: loaded firmware version 17.168.5.3 build 42301
Run Code Online (Sandbox Code Playgroud)
鉴于我知道加载了哪个 blob,我如何找出这个 blob(.ucode文件)的版本?
如果您查看下面加载 ucode 的位置,它不会仅告诉我加载了 blob 的版本信息。但我知道英特尔版本这些。
$ sudo dmesg | grep ucode
[ 26.132487] iwlwifi 0000:03:00.0: firmware: direct-loading firmware iwlwifi-6000g2a-6.ucode
[40428.475015] (NULL device *): firmware: direct-loading firmware iwlwifi-6000g2a-6.ucode
Run Code Online (Sandbox Code Playgroud) 如果我寻找 ACPI 中断,我会发现:
/sys/firmware/acpi/interrupts/sci: 55414
/sys/firmware/acpi/interrupts/error: 0
/sys/firmware/acpi/interrupts/gpe00: 0 invalid
/sys/firmware/acpi/interrupts/gpe01: 0 invalid
/sys/firmware/acpi/interrupts/gpe02: 0 invalid
/sys/firmware/acpi/interrupts/gpe03: 0 invalid
/sys/firmware/acpi/interrupts/gpe04: 0 invalid
/sys/firmware/acpi/interrupts/gpe05: 0 invalid
/sys/firmware/acpi/interrupts/gpe06: 0 enabled
/sys/firmware/acpi/interrupts/gpe07: 0 enabled
/sys/firmware/acpi/interrupts/gpe08: 0 invalid
/sys/firmware/acpi/interrupts/gpe09: 0 disabled
/sys/firmware/acpi/interrupts/gpe10: 0 enabled
/sys/firmware/acpi/interrupts/gpe11: 0 invalid
/sys/firmware/acpi/interrupts/gpe12: 0 invalid
/sys/firmware/acpi/interrupts/gpe13: 0 invalid
/sys/firmware/acpi/interrupts/gpe14: 1 enabled
/sys/firmware/acpi/interrupts/gpe15: 0 invalid
/sys/firmware/acpi/interrupts/gpe16: 1 enabled
/sys/firmware/acpi/interrupts/gpe0A: 0 invalid
/sys/firmware/acpi/interrupts/gpe17: 54753 enabled
/sys/firmware/acpi/interrupts/gpe0B: 0 invalid
/sys/firmware/acpi/interrupts/gpe18: 0 invalid
/sys/firmware/acpi/interrupts/gpe0C: 0 invalid
/sys/firmware/acpi/interrupts/gpe19: 0 invalid
/sys/firmware/acpi/interrupts/gpe0D: 0 disabled
/sys/firmware/acpi/interrupts/gpe0E: …Run Code Online (Sandbox Code Playgroud) 在使用超快速启动时需要进入 UEFI 固件设置实用程序(POST 期间未加载键盘驱动程序),我希望写入“Os Indications”efi 变量。我的操作系统是 Ubuntu 14.04 内核 3.13.0-35-generic。
OsIndications变量返回一个 UINT64 位掩码
OsIndicationsSupported变量返回一个 UINT64 位掩码
EFI_OS_INDICATIONS_BOOT_TO_FW_UI如果固件支持 OS 请求在固件用户界面上停止,固件可以在 OsIndicationsSupported 变量中设置该位。该EFI_OS_INDICATIONS_BOOT_TO_FW_UI位可由操作系统在 OsIndications 变量中设置,如果操作系统希望固件在下次启动时停止在固件用户界面。
EFI_OS_INDICATIONS_BOOT_TO_FW_UI=0x0000000000000001- UEFI 规范 2.3.1C 第 312 页
我的固件能够在下次启动时进入固件设置实用程序:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Run Code Online (Sandbox Code Playgroud)
我可以在/sys/firmware/efi/efivars使用时 创建一个新变量
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Run Code Online (Sandbox Code Playgroud)
然而,写入 efi 变量会OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c导致各种write error: Invalid argument:
# printf "x00\x00\x00\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument
# …Run Code Online (Sandbox Code Playgroud)