Microsoft Debug Port Table 2 (DBG2)

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

本文件末尾列出了此处讨论的引用和资源。

专利声明:Microsoft 在以下两种选择下为本规范的实施提供某些专利权:

  1. Microsoft 社区承诺,请访问 https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
  2. Open Web Foundation 最终规范协议 1.0 版 ("OWF 1.0"),自 2012 年 10 月 1 日起生效,可在 http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0 上获取。

文档历史记录

日期 更改
2011 年 11 月 29 日 首次发布。
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 兼容子类型的信息

介绍

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

在调试端口实现无法使用 DBGP 描述的平台上,DBG2 表取代了 ACPI 调试端口表 (DBGP)。

调试端口表 2 (DBG2)

表 1. Debug Port Table 2 格式

表 1 定义 DBG2 中的字段。

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

调试设备信息结构

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

字段 字节长度 字节偏移量 说明
修订 1 0 调试设备信息结构的修订。 对于此版本的规范,此值必须为 0。
长度 2 1 此结构的长度(以字节为单位)包括 NamespaceString 和 OEMData。
NumberofGenericAddressRegisters 1 3 正在使用的通用地址寄存器数。
NamespaceStringLength 2 4 NamespaceString 的长度(以字节为单位),包括 NUL 字符。
NamespaceStringOffset 2 6 从此结构的开头到字段 NamespaceString[] 的偏移量(以字节为单位)。 此值必须有效,因为此字符串必须存在。
OemDataLength 2 8 OEM 数据块的长度(以字节为单位)。
OemDataOffset 2 10 从该结构开始到字段 OemData[] 的偏移量(以字节为单位)。 如果没有 OEM 数据,此值将为 0。
端口类型 2 12 此调试设备的调试端口类型。 这些值中的每一个都将具有相应的子类型值,如表 3 所示。
端口子类型 2 14 此调试设备的调试端口子类型。 请参阅表 3。
Reserved 2 16 已保留,必须为 0。
BaseAddressRegisterOffset 2 18 从此结构的开头到字段 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 特定数据。

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

端口 类型 子类型 说明
保留 0x0000 – 0x7FFF 和 0xFFFF 全部 预留(请勿使用)
串行 0x8000 0x0000 完全兼容 16550
0x0001 16550 子集与 DBGP 修订 1 兼容
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 预留(供以后使用)
净额 0x8003 NNNN NNNN 必须是有效的 PCI 分配的供应商 ID
0x8004 全部 预留(请勿使用)
Reserved 0x8005 – 0xFFFE 全部 预留(供以后使用)

关于通用地址结构字段的说明

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

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

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

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

有关基于 16550 的 UART 的说明

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

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

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

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

资源

ACPI 规范