为什么我的系统日志告诉我我的 BIOS 坏了?

为什么我的系统日志告诉我我的 BIOS 坏了?

我在 syslog 文件中发现了这个问题,我该如何修复它?或者说它值得修复吗?

一切似乎都运行正常。运行 3.12.9-031209-generic。

WARNING: CPU: 0 PID: 0 at /home/apw/COD/linux/drivers/iommu/dmar.c:488 warn_invalid_dmar+0x8f/0xa0()
Your BIOS is broken; DMAR reported at address 0!
BIOS vendor: American Megatrends Inc.; Ver: F5; Product Version: To be filled by O.E.M.
Modules linked in:
CPU: 0 PID: 0 Comm: swapper Not tainted 3.12.9-031209-generic #201401251255
Hardware name: Gigabyte Technology Co., Ltd. Z87MX-D3H/Z87MX-D3H-CF, BIOS F5 08/02/2013
00000000000001e8 ffffffff81c01d98 ffffffff817433c6 00000000000017e0
ffffffff81c01de8 ffffffff81c01dd8 ffffffff810678ac ffffffff81c01e28
ffffffff81fd201c ffffffff81fd2058 ffffffff81dda2e0 ffff88022f5aad00
Call Trace:
[<ffffffff817433c6>] dump_stack+0x46/0x58
[<ffffffff810678ac>] warn_slowpath_common+0x8c/0xc0
[<ffffffff8106793f>] warn_slowpath_fmt_taint+0x3f/0x50
[<ffffffff8172dfbb>] ? acpi_os_map_memory+0x27/0x150
[<ffffffff816124af>] warn_invalid_dmar+0x8f/0xa0
[<ffffffff81d84944>] check_zero_address+0x57/0xf7
[<ffffffff81d849fb>] detect_intel_iommu+0x17/0xb8
[<ffffffff81d3a0db>] pci_iommu_alloc+0x44/0x6e
[<ffffffff81d49a5c>] mem_init+0x11/0xa2
[<ffffffff81d2fcfa>] start_kernel+0x1de/0x41e
[<ffffffff81d2f9ae>] ? do_early_param+0x87/0x87
[<ffffffff81d2f120>] ? early_idt_handlers+0x120/0x120
[<ffffffff81d2f5e8>] x86_64_start_reservations+0x2a/0x2c
[<ffffffff81d2f6f2>] x86_64_start_kernel+0x108/0x117
---[ end trace 11d0aeb7d970f0a3 ]---

答案1

我发现解释这一点的最佳来源是来自 Redhat。它不是 Ubuntu 特有的,而是与内核(我们都共享)和您的硬件向内核返回错误信息有关。

在从链接复制的文本中将 Redhat 替换为 Ubuntu,并注意 3 个要点(也许您可以使用它来规避这个问题):


由于 BIOS 处理不完善且 IOMMU 处理出现故障,导致系统无法启动、USB 无法运行、网络适配器无法工作(或可能出现其他症状)

一些制造商在系统出厂时使用 BIOS,但其对 IOMMU 硬件的处理不正确。BIOS 应该告诉操作系统在内存中哪里可以找到 IOMMU 硬件,但有些 BIOS 无法正确执行此操作,提供垃圾位置或有效但不是设备实际所在位置的位置。内核尝试处理这些情况,但 Fedora 12 发行版内核仍未完全处理某些情况。如果您的系统受到此问题的影响,最常见的症状是 USB 子系统将无法工作(任何 USB 外围设备都无法工作),但其他症状包括系统完全无法启动以及网络适配器无法正常工作。

目前已知某些系统可能受此问题影响。对于除 HP xw4600 工作站和 Dell Precision M6400 之外的所有系统,必须满足以下所有条件才会遇到此错误:

  • 您必须使用 32 位版本的 Fedora 12
  • 您的内存不得超过 4GB 地址区域(实际上,这意味着您必须拥有大约 2.5GB 或更少的物理 RAM)
  • 必须在 BIOS 中禁用虚拟化功能 (VT-d)

如果上述任何一种情况都不是这种情况,那么您就不会遇到此问题。如果您认为自己可能遇到了此问题,请查找包含类似以下内容的内核日志消息:

Your BIOS is broken; DMAR reported at address fed10000 returns all ones!

或者:

Your BIOS is broken; DMAR reported at address zero!

请注意,如果您使用的系统有这样的损坏的 BIOS,则即使内核实际上正确处理了您的情况,或者您已成功解决了该问题,内核消息仍将出现。因此,不用担心在解决问题后您仍然会看到该消息。

有几种方法可以解决这个问题。在大多数情况下(见上文),安装 64 位版本的 Fedora 12 就足够了。如果您的 BIOS 有此选项,则在 BIOS 中启用虚拟化功能也应该可以解决这个问题。最后,您可以通过将内核参数 iommu=soft 附加到您的启动配置中来解决此问题。

已发布更新的内核包来解决此问题。如果您尚未安装此更新,请照常更新您的系统以接收此更新。显然,如果您受到此问题的影响,您将需要使用上述解决方法之一,首先将您的系统置于可以安装修复内核的状态。

相关内容