ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 18 章

    • 总览
    • 18.1. 硬件错误和错误源
    • 18.2. OSPM 与系统固件之间的关系
    • 18.3. 错误源发现
      • 18.3.1. 启动错误源
      • 18.3.2. ACPI 错误源
    • 18.4. 固件优先错误处理
    • 18.5. 错误串行化
    • 18.6. 错误注入
    • 18.7. GHES_ASSIST 错误报告

18.5. 错误串行化

  • 错误记录串行化功能用于将硬件错误信息保存到持久存储并从中检索。OSPM 通过平台接口与平台交互。如果存在错误记录串行化表(ERST),则 OSPM 使用下面描述的 ACPI 方案。否则,在基于 UEFI 的平台上,OSPM 使用 UEFI 运行时变量服务来执行错误记录持久化操作。

    • 为了实现跨重启的错误持久化,平台必须实现某种形式的非易失性存储来保存错误记录。所需空间量取决于平台的处理器架构。通常,此存储将是闪存或某种其他形式的非易失性 RAM。

    • 串行化错误按照通用平台错误记录(CPER)格式进行编码,该格式在 UEFI 规范的附录中描述。这些条目称为错误记录。

    • 错误记录串行化接口的设计足够抽象,以便硬件供应商在如何实现其错误记录串行化硬件方面具有灵活性。平台通过使用一组串行化指令条目填充 ERST 来提供与其串行化硬件通信所需的详细信息。一个或多个串行化指令条目组成一个串行化操作。OSPM 通过执行一系列串行化操作来执行串行化操作。串行化操作和串行化指令将在以下章节中详细描述。

下表详细说明了 ERST 布局,系统固件负责构建该布局。

表 18.16 错误记录串行化表(ERST)

字段字节长度字节偏移描述
ACPI 标准头
Header Signature40“ERST”。错误记录串行化表的签名。
Length44整个 ERST 的长度(以字节为单位)。整个表必须是连续的。
Revision181
Checksum19整个表的总和必须为零。
OEMID610OEM ID。
OEM Table ID816制造商型号 ID。
OEM Revision424针对所提供 OEM 表 ID 的 ERST 的 OEM 修订版本。
Creator ID428创建该表的工具的供应商 ID。
Creator Revision432创建该表的工具的修订版本。
串行化头
Serialization Header Size436串行化头的长度(以字节为单位)。
Reserved440必须为零。
Instruction Entry Count444串行化操作表中串行化指令条目的数量。
串行化操作表
Serialization Instruction Entries48一系列错误日志记录指令条目。

18.5.1. 串行化操作表

串行化操作被定义为对寄存器执行的一系列串行化指令,这些指令会产生一个众所周知的操作。串行化指令是串行化操作的原语,由读取或写入抽象化硬件寄存器组成。串行化操作表包含平台支持的所有串行化操作的串行化指令条目。

在大多数情况下,一个序列化动作仅包含一条序列化指令,但可以设想,更复杂的设备将需要多于一条序列化指令。当一个动作确实包含多于一条指令时,这些指令必须连续列出,因此它们将按照其在序列化动作表中的位置顺序执行。

18.5.1.1. 序列化动作

本节标识构成错误记录序列化接口的序列化动作,如下表所示。

表 18.17 错误记录序列化动作

值名称描述
0x0BEGIN_WRITE_OPERATION向平台指示一个错误记录写操作即将开始。这使平台能够设置其操作上下文。
0x1BEGIN_READ_OPERATION向平台指示一个错误记录读操作即将开始。这使平台能够设置其操作上下文。
0x2BEGIN_CLEAR_OPERATION向平台指示一个错误记录清除操作即将开始。这使平台能够设置其操作上下文。
0x3END_OPERATION向平台指示当前错误记录操作已经结束。这使平台能够清除其操作上下文。
0x4SET_RECORD_OFFSET设置从错误日志基址开始传输错误记录的偏移量。
0x5EXECUTE_OPERATION指示平台基于当前操作上下文执行当前操作。
0x6CHECK_BUSY_STATUS返回当前操作的状态。一旦某个操作已通过 EXECUTE_OPERATION 动作执行,在该操作完成之前,平台必须返回该操作正在进行中的指示。这使 OS 能够通过重复执行 CHECK_BUSY_STATUS 动作轮询完成状态,直到平台指示该操作不忙为止。
0x7GET_COMMAND_STATUS返回当前操作的状态。预期平台为每个操作维护一个状态码。从寄存器区域返回值的位 [8:1] 指示命令状态,这要求寄存器区域的 GAS 的位偏移设置为 1。有关有效命令状态码的列表,请参见“命令状态定义”。
0x8GET_RECORD_IDENTIFIER返回持久存储中现有错误记录的记录标识符。错误记录标识符是 UEFI 规范附录中定义的 64 位无符号值。如果记录存储为空,则此动作必须返回 0xFFFFFFFFFFFFFFFF。
0x9SET_RECORD_IDENTIFIER设置记录标识符。错误记录标识符是 UEFI 规范附录中定义的 64 位无符号值。
0xAGET_RECORD_COUNT检索当前存储在平台持久存储中的错误记录数量。预期平台维护其持久存储中驻留的错误记录数量计数。
0xBBEGIN_DUMMY_WRITE-_OPERATION向平台指示一个虚拟错误记录写操作即将开始。这使平台能够设置其操作上下文。虚拟错误记录写操作不会实际将信息从错误日志地址范围传输到持久存储。
0xCRESERVED保留。
0xDGET_ERROR_LOG-_ADDRESS_RANGE返回 OSPM 用作读取/写入错误记录缓冲区的 64 位物理地址。
0xEGET_ERROR_LOG-_ADDRESS_RANGE_LENGTH返回错误日志地址范围的字节长度
0xFGET_ERROR_LOG-_ADDRESS_RANGE_ATTRIBUTES返回描述错误日志地址范围行为的属性:位 [0] (0x1) - 保留。位 [1] (0x2) - 非易失性:指示错误日志地址范围位于非易失性 RAM 中。位 [2] (0x4) - 慢速:指示错误日志地址范围所在的内存具有较慢的访问时间。所有其他位保留。
0x10GET_EXECUTE-_OPERATION_TIMINGS返回一个编码的 QWORD:[63:32] 的值(单位为微秒)表示平台预计处理并完成一个 EXECUTE_OPERATION 所需的最长时间。[31:0] 的值(单位为微秒)表示平台预计处理并完成一个 EXECUTE_OPERATION 所需的标称时间。

下表定义了从 GET_COMMAND_STATUS 返回的序列化动作状态码。

表 18.18 命令状态定义

值描述
0x00成功
0x01空间不足
0x02硬件不可用
0x03失败
0x04记录存储为空
0x05未找到记录

18.5.1.2. 序列化指令项

每个序列化动作由一个或多个序列化指令组成。序列化指令表示对抽象硬件寄存器执行的一个基本操作,该寄存器由序列化指令项中定义的寄存器区域表示。

序列化指令项描述了序列化硬件寄存器中的一个区域,以及要对该区域执行的序列化指令。下表详细说明了序列化指令项的布局。

表 18.19 序列化指令项

字段字节长度字节偏移描述
Serialization Action1N+0该序列化指令所属的序列化动作。
Instruction1N+1标识要执行的指令。有关有效序列化指令的列表,请参见“序列化指令”表。
Flags1N+2对该指令进行限定的标志。
Reserved1N+3必须为零。
Register Region12N+4Section 5.2.3.2 中定义的通用地址结构,用于描述地址和位。
Value8N+16与 READ_REGISTER_VALUE 和 WRITE_REGISTER_VALUE 指令一起使用的值。
Mask8N+24在由寄存器区域定义的给定位范围中,获取与序列化指令对应的位所需的位掩码。

寄存器区域被描述为通用地址结构。该结构描述寄存器的物理地址,以及与期望寄存器区域对应的位范围。位范围被定义为包含寄存器中与该序列化指令相关的每一位的最小连续位集合。如果位 [6:5] 和位 [3:2] 都对应于某个序列化指令,则该指令的位范围将是 [6:2]。

由于一个位范围可能包含与特定序列化指令无关的位(即上述示例中的位 4),因此需要使用位掩码来区分该区域中与该指令对应的所有位。Mask 字段被定义为该位掩码,对于位范围内(由寄存器区域定义)对应于该序列化指令的每一位,其对应位设置为“1”。请注意,位掩码的位 0 对应于该位范围中的最低位。在上面使用的示例中,掩码将为 11011b 或 0x1B。

Instruction 字段标识该指令项要在寄存器区域上执行的操作。下表标识了所支持的指令。

表 18.20 序列化指令

值名称描述
0x00READ_REGISTERREAD_REGISTER 指令从指定的寄存器区域读取指定的信息。
0x01READ_REGISTER_VALUEREAD_REGISTER_VALUE 指令从指定的寄存器区域读取指定的信息,并将结果与 Value 字段的内容进行比较。如果读取的信息与 Value 字段的内容匹配,则返回 TRUE,否则返回 FALSE。
0x02WRITE_REGISTERWRITE_REGISTER 指令将一个值写入指定的寄存器区域。Value 字段被忽略。
0x03WRITE_REGISTER_VALUEWRITE_REGISTER_VALUE 指令将 Value 字段的内容写入指定的寄存器区域。
0x04NOOP该指令是一个 NOOP。
0x05LOAD_VAR1从寄存器区域加载 VAR1 变量。
0x06LOAD_VAR2从寄存器区域加载 VAR2 变量。
0x07STORE_VAR1将 VAR1 中的值存储到指示的寄存器区域。
0x08ADD将 VAR1 与 VAR2 相加,并将结果存储到 VAR1 中。
0x09SUBTRACT从 VAR2 中减去 VAR1,并将结果存储到 VAR1 中。
0x0AADD_VALUE将指定寄存器区域的内容与 Value 相加,并将结果存储到该寄存器区域中。
0x0BSUBTRACT_VALUE从指定寄存器区域的内容中减去 Value,并将结果存储到该寄存器区域中。
0x0CSTALL停顿 Value 中指定的微秒数。
0x0DSTALL_WHILE_TRUEOSPM 持续将指定寄存器区域的内容与 Value 进行比较,直到这些值不相等为止。OSPM 在每次连续比较之间停顿。停顿时间由 VAR1 指定,单位为微秒。
0x0ESKIP_NEXT_INSTRUCTION_IF_TRUE这是一个控制指令,它将寄存器区域的内容与 Value 进行比较。如果值匹配,OSPM 将跳过当前动作序列中的下一条指令。
0x0FGOTOOSPM 将转到 Value 指定的指令。该指令以从零开始的索引指定。给定动作的每条指令都基于其在该动作指令数组中的相对位置具有一个索引。
0x10SET_SRC_ADDRESS_BASE将 MOVE_DATA 指令使用的 SRC_BASE 变量设置为寄存器区域的内容。
0x11SET_DST_ADDRESS_BASE将 MOVE_DATA 指令使用的 DST_BASE 变量设置为寄存器区域的内容。
0x12MOVE_DATA将 VAR2 字节的数据从 SRC_BASE + Offset 移动到 DST_BASE + Offset,其中 Offset 为寄存器区域的内容。

Flags 字段允许将限定标志与该指令相关联。下表标识了可与序列化指令关联的标志。

表 18.21 指令标志

值名称描述
0x01PRESERVE_REGISTER对于 WRITE_REGISTER 和 WRITE_REGISTER_VALUE 指令,该标志指示寄存器中未被写入的位必须被保留而不是被破坏。对于 READ_REGISTER 指令,该标志被忽略。

18.5.1.2.1. READ_REGISTER_VALUE

读取寄存器值指令读取寄存器区域,并将结果与指定值进行比较。如果这些值不相等,则该指令失败。这可以用如下伪代码描述:

X = Read(register)
X = X >> Bit Offset described in Register Region
X = X & Mask
If (X != Value) FAIL
SUCCEED

18.5.1.2.2. READ_REGISTER

读取寄存器指令读取寄存器区域。结果是一个通用值,不应与 Value 进行比较。Value 将被忽略。这可以用如下伪代码描述:

X = Read(register)
X = X >> Bit Offset described in Register Region
X = X & Mask
Return X

18.5.1.2.3. WRITE_REGISTER_VALUE

写寄存器值指令将指定的值写入寄存器区域。如果在指令标志中设置了 PRESERVE_REGISTER,则与写值指令不对应的位会被保留。如果寄存器被保留,则写值指令需要先读取该寄存器。可用如下伪代码描述:

X = Value & Mask
X = X << Bit Offset described in Register Region
If (Preserve Register)
Y = Read(register)
Y = Y & ~(Mask << Bit Offset)
X = X \| Y
Write(X, Register)

18.5.1.2.4. WRITE_REGISTER

写寄存器指令将一个值写入寄存器区域。值将被忽略。如果在指令标志中设置了 PRESERVE_REGISTER,则与写指令不对应的位会被保留。如果寄存器被保留,则写值指令需要先读取该寄存器。可用如下伪代码描述:

X = supplied value
X = X & Mask
X = X << Bit Offset described in Register Region
If (Preserve Register)
Y = Read(register)
Y = Y & ~(Mask << Bit Offset)
X = X \| Y
Write(X, Register)

18.5.1.3. 错误记录序列化信息

APEI 错误记录包含一个称为 OSPM Reserved 的 8 字节字段。下表定义了该字段的布局。错误记录序列化信息是平台可用于序列化簿记的一个小缓冲区。平台可自由使用从位偏移 16 开始的 48 位以满足其自身用途。它可以使用这些位来指示错误记录的忙/空闲状态、记录内部标识符等。

表 18.22 错误记录序列化信息

字段位长度位偏移描述
Signature160标识错误记录序列化数据起始位置的 16 位签名(‘ER’)。
Platform Serialization Data4816平台私有的错误记录序列化信息。

18.5.2. 操作

错误记录序列化接口由三种操作组成:写入、读取和清除。OSPM 使用写入操作将单个错误记录写入持久存储。读取操作用于取回先前通过写入操作记录到持久存储中的单个错误记录。清除操作允许 OSPM 通知平台某个给定错误记录已经被完全处理且不再需要,从而允许平台回收与已清除错误记录关联的存储。

当 Error Log Address Range 为 NVRAM 时,由于无需将数据从 Error Log Address Range 传输到单独的存储设备,因此可以进行显著优化。不过,如果平台选择这样做,它仍然可以将记录从 NVRAM 复制到另一设备。例如,这允许平台将错误记录复制到私有日志文件。为了给平台提供这样做的机会,即使 Error Log Address Range 是 NVRAM,OSPM 也必须使用写入操作来持久化错误记录。然而,在这种情况下,读取和清除操作是不必要的,因为 OSPM 能够在无需平台协助的情况下读取和清除错误记录。

18.5.2.1. 写入

为了写入单个 HW 错误记录,OSPM 执行以下步骤:

  1. 初始化错误记录的序列化信息。OSPM 必须填写 Signature。

  2. 将要持久化的错误记录写入 Error Log Address Range。

  3. 执行 BEGIN_WRITE_OPERATION 动作,以通知平台记录写入操作即将开始。

  4. 执行 SET_RECORD_OFFSET 动作,以通知平台在

  5. Error Log Address Range 中错误记录所在的位置偏移。

  6. 执行 EXECUTE_OPERATION 动作,以指示平台开始写入操作。

  7. 通过持续执行 CHECK_BUSY_STATUS 动作进行忙等待,直到返回 FALSE。

  8. 执行 GET_COMMAND_STATUS 动作,以确定写入操作的状态。如果指示出现错误,OS

  9. PM 可以重试该操作。

  10. 执行 END_OPERATION 动作,以通知平台记录写入操作已完成。

当 OSPM 在记录写入操作的上下文中执行 EXECUTE_OPERATION 动作时,平台会尝试将错误记录从 Error Log Address Range 中指定的偏移位置传输到其选择的持久存储中。如果 Error Log Address Range 是非易失性 RAM,则无需传输。

当平台需要将错误记录从 Error Log Address Range 传输到持久存储时,它在收到写入命令后执行以下步骤:

  1. 设置某些内部状态以表明其正忙。OSPM 通过执行 CHECK_BUSY_STATUS 动作进行轮询,直到操作完成。

  2. 读取错误记录的 Record ID 字段,以确定应将提供的错误记录写入存储介质上的哪个位置。平台尝试在持久存储中定位指定的错误记录。

    • 如果指定的错误记录不存在,则平台尝试将新记录写入持久存储。

    • 如果指定的错误记录确实存在,那么若现有错误记录足够大,能够被提供的错误记录覆盖,则平台可以进行原地替换。如果现有记录不足以被覆盖,则平台必须尝试定位可写入新记录的空间。它可以将现有记录标记为空闲,并合并相邻的空闲记录以创建所需空间。

  3. 将错误记录传输到持久存储上的选定位置。

  4. 如果写入了新记录,则更新内部的 Record Count。

  5. 记录该操作的状态,以便 OSPM 能够通过执行 GET_COMMAND_STATUS 动作来获取该状态。

  6. 根据需要修改内部忙状态,以便当 OSPM 执行 CHECK_BUSY_STATUS 时,结果表明该操作已完成。

如果 Error Log Address Range 位于 NVRAM 中,则平台所需执行的最少步骤为:

  1. 设置某些内部状态以表明其正忙。OSPM 通过执行 CHECK_BUSY_STATUS 动作进行轮询,直到操作完成。

  2. 记录该操作的状态,以便 OSPM 能够通过执行 GET_COMMAND_STATUS 动作来获取该状态。

  3. 清除内部忙状态,以便当 OSPM 执行 CHECK_BUSY_STATUS 时,结果表明该操作已完成。

18.5.2.2. 读取

在引导期间,OSPM 尝试从持久存储中取回所有序列化的错误记录。如果 Error Log Address Range 不位于 NVRAM 中,则 OSPM 执行以下步骤来取回所有错误记录:

  1. 执行 BEGIN_ READ_OPERATION 动作,以通知平台记录读取操作即将开始。

  2. 执行 SET_ RECORD_OFFSET 动作,以通知平台应将错误记录传输到 Error Log Address Range 中哪个偏移位置。

  3. 执行 SET_RECORD_IDENTIFER 动作,以通知平台应从其持久存储中读取哪个错误记录。

  4. 执行 EXECUTE_OPERATION 动作,以指示平台开始读取操作。

  5. 通过持续执行 CHECK_BUSY_STATUS 动作进行忙等待,直到返回 FALSE。

  6. 执行 GET_COMMAND_STATUS 动作,以确定读取操作的状态。

    • 如果状态是 Record Store Empty (0x04),继续执行步骤 7。

    • 如果在读取有效错误记录时发生错误,则状态将为 Failed (0x03),继续执行步骤 7。

    • 如果状态是 Record Not Found (0x05),表示指定的错误记录不存在,则 OSPM 通过执行 GET_RECORD_IDENTIFIER 动作来获取一个有效标识符。平台将返回一个有效的记录标识符。

    • 如果状态为 Success,则 OSPM 将检索到的记录从 Error Log Address Range 传输到私有缓冲区,然后执行 GET_RECORD_IDENTIFIER 动作,以确定持久存储中下一条记录的标识符。

  7. 执行 END_OPERATION,以通知平台记录读取操作已完成。

平台为执行读取请求而执行的步骤如下:

  1. 设置某些内部状态以表明其正忙。OSPM 通过执行 CHECK_BUSY_STATUS 动作进行轮询,直到操作完成。

  2. 使用 OSPM 通过 SET_RECORD_IDENTIFIER 操作提供的记录标识符,确定要读取哪个错误记录:

    • 如果标识符为 0x0(未指定),则平台从其持久存储中读取“第一条”错误记录(“第一条”的定义由具体实现决定)。

    • 如果标识符非零,则平台尝试在持久存储中定位指定的错误记录。

    • 如果指定的错误记录不存在,则将状态寄存器的 Status 设为 Record Not Found (0x05),并使用“第一条”错误记录的标识符更新状态寄存器的 Identifier 字段。

  3. 将记录从持久存储传输到由 OSPM 指定的、相对于 Error Log Address Range 基地址的偏移位置。

  4. 记录位于持久存储中的“下一条”有效错误记录的 Identifier。这允许 OSPM 通过执行 GET_RECORD_IDENTIFIER 操作来获取一个有效的记录标识符。

  5. 记录该操作的状态,以便 OSPM 能够通过执行 GET_COMMAND_STATUS 动作来获取该状态。

  6. 清除内部忙状态,以便当 OSPM 执行 CHECK_BUSY_STATUS 时,结果表明该操作已完成。

当 Error Log Address Range 确实位于 NVRAM 中时,OSPM 在读取持久化错误记录时不需要平台支持。OSPM 可以自行扫描 Error Log Address Range 并取回其先前持久化的错误记录。

18.5.2.3. 清除

在 OSPM 完成对错误记录的处理后,它会通过清除该记录来通知平台。这使平台能够从持久存储中删除该记录,或对其进行标记,使该空间为空闲且可重用。OSPM 执行以下步骤来清除错误记录:

  1. 执行 BEGIN_ CLEAR_OPERATION 动作,以通知平台记录清除操作即将开始。

  2. 执行 SET_RECORD_IDENTIFER 动作,以通知平台应清除哪个错误记录。该值不得设置为 0x0(未指定)。

  3. 执行 EXECUTE_OPERATION 动作,以指示平台开始清除操作。

  4. 通过持续执行 CHECK_BUSY_STATUS 动作进行忙等待,直到返回 FALSE。

  5. 执行 GET_COMMAND_STATUS 动作,以确定清除操作的状态。

  6. 执行 END_OPERATION,以通知平台记录读取操作已完成。

平台通过执行以下步骤来完成清除请求:

  1. 设置某些内部状态以表明其正忙。OSPM 通过执行 CHECK_BUSY_STATUS 动作进行轮询,直到操作完成。

  2. 使用 OSPM 通过 SET_RECORD_IDENTIFIER 操作提供的记录标识符,确定要清除哪个错误记录。该值不得为 0x0(未指定)。

  3. 在持久存储中定位指定的错误记录。

  4. 通过更新其序列化头中的 Attributes 将该记录标记为空闲。

  5. 更新内部记录计数。

  6. 清除内部忙状态,以便当 OSPM 执行 CHECK_BUSY_STATUS 时,结果表明该操作已完成。

当 Error Log Address Range 位于 NVRAM 中时,OS 在清除错误记录时不需要平台支持。

18.5.2.4. 用法

本节描述了错误记录序列化机制可能实现的几种方式。

18.5.2.4.1. 错误日志地址范围位于 NVRAM 中

如果 错误日志地址范围 位于 NVRAM 中,那么当 OSPM 向日志记录范围写入一条记录时,该记录会自动持久化,且忙位可以立即清除。在随后的引导中,OSPM 可以直接从持久存储范围读取任何已持久化的错误记录。在这种情况下,持久存储的大小应足以容纳若干条错误记录。

18.5.2.4.2. 错误日志地址范围位于(易失性)RAM 中

在这种实现中,错误日志地址范围描述的是错误记录的中间位置。为了持久化一条记录,OSPM 会将该记录复制到错误日志地址范围中并设置执行,此时平台会运行必要的代码(非 UEFI 系统上的 SMM 代码,以及启用 UEFI 的系统上的 UEFI 运行时代码),将错误记录从主内存转移到某个持久存储中。要读取一条记录,OSPM 会要求平台将一条记录从持久存储复制到错误日志地址范围内的指定偏移处。错误日志地址范围的大小至少应足以容纳一条错误记录。

18.5.2.4.3. 错误日志地址范围位于服务处理器上

在这种类型的实现中,错误日志地址范围实际上是 MMIO。当 OSPM 向错误日志地址范围写入一条错误记录时,实际上是在向服务处理器上的内存写入。当 OSPM 设置执行控制位时,平台就知道 OSPM 已完成该记录的写入,并且可以对其进行某些处理,例如将其移入服务处理器上的永久位置(即硬盘)。这种实现类型中的持久存储大小通常足以容纳一条错误记录。

18.5.2.4.4. 错误日志地址范围通过网络复制

在这种类型的实现中,错误日志地址范围是错误记录的中间缓存。为了持久化一条错误记录,OSPM 会将该记录复制到错误日志地址范围中并设置执行控制位,平台随后运行代码通过网络传输该错误记录。这种实现类型中的错误日志地址范围大小通常足以容纳一条错误记录。

Prev
18.4. 固件优先错误处理
Next
18.6. 错误注入