Microsoft调试端口表 2 (DBG2)

此规范定义平台固件中使用的调试端口表 2(DBG2)的格式,用于描述系统上可用的调试端口。 此信息适用于以下作系统:Windows 8 及更新版本。

本文末尾列出了此处讨论的参考和资源。

专利通知:Microsoft在两个选项下使某些专利权可用于实施此规范:

  1. Microsoft的社区承诺,可在 https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
  2. 截至 2012 年 10 月 1 日,开放 Web 基础最终规范协议版本 1.0(“OWF 1.0”)已于 2012 年 10 月 1 日 http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0发布。

Document History

Date Change
2011 年 11 月 29 日 First publication.
2012 年 5 月 22 日 针对 Windows 8 的每个最终支持平台更新表 3。
2015 年 8 月 10 日 更新了专利通知。
2015 年 10 月 6 日 添加了新的串行调试子类型(Arm SBSA UART、Arm DCC)
2015 年 12 月 10 日 添加了新的串行调试子类型(BCM2835)
2017 年 5 月 31 日 添加了新的串行调试子类型(i.MX6,通用地址结构 16550 兼容)
2020 年 6 月 11 日 添加了新的串行调试子类型(SDM845v2)
2020 年 9 月 1 日 已将文档转换为 Markdown 语法和格式更改。
2020 年 9 月 21 日 添加了新的串行调试子类型(IALPSS)
2021 年 2 月 17 日 记录所有已知的串行调试子类型
2023 年 4 月 10 日 添加了新的串行调试子类型(RISC-V),并添加了有关 16550 兼容子类型的信息

Introduction

Microsoft需要所有系统上的调试端口。 若要描述平台上可用的调试端口,Microsoft定义特定于作系统的表(DBG2)。 此表指定用于调试的一个或多个独立端口。 存在调试端口表表示系统包含调试端口。 该表包含有关调试端口配置的信息。 该表位于具有其他高级配置和电源接口(ACPI)表的系统内存中,并且必须在 ACPI 根系统说明表(RSDT)中引用。

DBG2 表替换了不能使用 DBGP 描述其调试端口实现的平台上的 ACPI 调试端口表(DBGP)。

调试端口表 2 (DBG2)

Table 1. 调试端口表 2 格式

表 1 定义 DBG2 中的字段。

Field Byte length Byte offset Description
Header
Signature 4 0 'DBG2'. 调试端口表 2 的签名。
Length 4 4 整个调试端口表 2 的长度(以字节为单位)。
Revision 1 8 对于此版本的规范,此值为 0。
Checksum 1 9 整个表必须求和为零。
OEM ID 6 10 原始设备制造商(OEM)ID。
OEM 表 ID 8 16 对于调试端口表 2,表 ID 是制造商型号 ID。
OEM Revision 4 24 提供的 OEM 表 ID 的调试端口表 2 的 OEM 修订。
Creator ID 4 28 创建表的实用工具的供应商 ID。
Creator Revision 4 32 创建表的实用工具的修订。
OffsetDbgDeviceInfo 4 36 从此表的开头到第一个调试设备信息结构条目的偏移量(以字节为单位)。
NumberDbgDeviceInfo 4 40 指示调试设备信息结构条目的数目。
调试设备信息结构[NumberDbgDeviceInfo] Variable OffsetDbgDeviceInfo 此平台的调试设备信息结构列表。 结构格式在本文档后面的“调试设备信息结构”部分中定义。

调试设备信息结构

Table 2. 调试设备信息结构格式

Field Byte length Byte offset Description
Revision 1 0 调试设备信息结构的修订。 对于此版本的规范,必须为 0。
Length 2 1 此结构的长度(以字节为单位)包括 NamespaceString 和 OEMData。
NumberofGenericAddressRegisters 1 3 正在使用的通用地址寄存器数。
NamespaceStringLength 2 4 NamespaceString 的长度(以字节为单位)包括 NUL 字符。
NamespaceStringOffset 2 6 从此结构的开头到 Field NamespaceString[] 的偏移量(以字节为单位)。 此值必须有效,因为此字符串必须存在。
OemDataLength 2 8 OEM 数据块的长度(以字节为单位)。
OemDataOffset 2 10 从此结构的开头到字段 OemData[] 的偏移量(以字节为单位)。 如果没有 OEM 数据,此值将为 0。
Port Type 2 12 此调试设备的调试端口类型。 每个值都有相应的子类型值,如表 3 所示。
Port Subtype 2 14 此调试设备的调试端口子类型。 请参阅表 3。
Reserved 2 16 已保留,必须为 0。
BaseAddressRegisterOffset 2 18 从此结构的开头到 Field BaseaddressRegister[] 的偏移量(以字节为单位)。
AddressSizeOffset 2 20 从此结构开头到字段 AddressSize[] 的偏移量(以字节为单位)。
BaseAddressRegister[] (NumberofGenericAddressRegisters) * 12 BaseAddressRegisterOffset 泛型地址数组。
AddressSize[] (NumberofGenericAddressRegisters) * 4 AddressSizeOffset 对应于上述每个泛型地址的地址大小的数组。
NamespaceString[] NamespaceStringLength NamespaceStringOffset NUL 终止的 ASCII 字符串,用于唯一标识此设备。 此字符串包含对在 ACPI 命名空间中表示此设备的对象的完全限定引用。 如果不存在命名空间设备,则 NamespaceString[] 只能包含单个“.”(ASCII 句点) 字符。
OemData[] OemDataLength OemDataOffset 可选的可变长度 OEM 特定数据。

Table 3. 调试端口类型和子类型

Port 类型 Subtype Description
Reserved 0x0000 – 0x7FFF和0xFFFF All 保留(请勿使用)
Serial 0x8000 0x0000 Fully 16550-compatible
0x0001 与 DBGP 修订版 1 兼容的 16550 子集
0x0002 MAX311xE SPI UART
0x0003 Arm PL011 UART
0x0004 MSM8x60 (例如 8960)
0x0005 NVIDIA 16550
0x0006 TI OMAP
0x0007 保留(请勿使用)
0x0008 APM88xxxx
0x0009 MSM8974
0x000A SAM5250
0x000B Intel USIF
0x000C i.MX 6
0x000D (已弃用)Arm SBSA (仅限 2.x) 通用 UART 仅支持 32 位访问
0x000E Arm SBSA 泛型 UART
0x000F Arm DCC
0x0010 BCM2835
0x0011 时钟速率为 1.8432 MHz 的 SDM845
0x0012 16550 与泛型地址结构中定义的参数兼容
0x0013 时钟速率为 7.372 MHz 的 SDM845
0x0014 Intel LPSS
0x0015 RISC-V SBI 控制台(任何受支持的 SBI 机制)
0x0016 – 0xFFFF 保留(供将来使用)
1394 0x8001 0x0000 IEEE1394标准主机控制器接口
0x0001 – 0xFFFF 保留(供将来使用)
USB 0x8002 0x0000 具有调试接口的 XHCI 兼容控制器
0x0001 具有调试接口的符合 EHCI 的控制器
0x0002 – 0x0006 保留(请勿使用)
0x0007 – 0xFFFF 保留(供将来使用)
Net 0x8003 NNNN NNNN 必须是有效的 PCI 分配的供应商 ID
0x8004 All 保留(请勿使用)
Reserved 0x8005 – 0xFFFE All 保留(供将来使用)

有关泛型地址结构的字段的说明

  • BaseAddressRegister[0] 中的通用地址结构用于指定某些串行子类型使用的寄存器位宽度和访问大小。

  • 地址空间 ID 和寄存器位偏移字段必须为 0。

  • “寄存器位宽度”字段包含寄存器步幅,并且必须是至少与访问大小一样大的 2 的幂。 在 32 位平台上,此值不能超过 32。 在 64 位平台上,此值不能超过 64。

  • “访问大小”字段用于确定是否要使用字节、WORD、DWORD 或 QWORD 访问。 QWORD 访问仅在 64 位体系结构上有效。

有关基于 16550 的 UART 的说明

有三种接口子类型可用于基于 16550 的 UART。 它们之间的差异是微妙但重要的。

  • 接口子类型0x0是指使用“旧”端口 I/O 的串行端口,如基于 x86 的平台所示。 应在使用内存映射 I/O(如 ARM 或 RISC-V)的平台上避免此类型。

  • 接口子类型0x1支持内存映射 UART,但只有 DBGP ACPI 表中可描述的 UART。 作系统实现可以将它视为等效于 DBGP 提供的调试端口,并且仅遵循通用地址结构的基址字段。

  • 接口子类型0x12是最灵活的选择,建议在新平台上运行兼容的作系统。 此子类型支持所有串行端口,这些端口可由子类型0x0和0x1描述,以及新端口,例如需要泛型地址结构中的非传统访问大小和位宽度的端口。

Resources

ACPI Specification