此規範定義了調試埠表 2 (DBG2) 的格式,用於平台韌體中描述系統上可用的調試埠。 此資訊適用於下列作業系統:Windows 8 及更新版本。
本文末尾列出了此處討論的參考文獻和資源。
專利聲明: Microsoft 在兩個選項下提供某些專利權,以實作此規格:
- Microsoft 的社區承諾,可在以下網址獲得
https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx- 截至 2012 年 10 月 1 日,開放網絡基金會最終規範協議 1.0 版(“OWF 1.0”)可在以下網址獲取
http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0。
Document History
| Date | Change |
|---|---|
| 2011 年 11 月 29 日 | First publication. |
| 五月 22, 2012 | Windows 8 每個最終支援平臺的表 3 更新。 |
| 2015 年 8 月 10 日 | 更新專利聲明。 |
| 2015 年 10 月 6 日 | 新增序列偵錯子類型 (Arm SBSA UART、Arm DCC) |
| 十二月 10, 2015 | 新增序列偵錯子類型 (BCM2835) |
| 五月 31, 2017 | 新增了新的序列偵錯子類型(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) 識別碼。 |
| OEM 資料表 ID | 8 | 16 | 對於偵錯埠表2,表ID是製造商型號ID。 |
| OEM Revision | 4 | 24 | 針對所提供 OEM 資料表識別碼的偵錯埠資料表 2 的 OEM 修訂。 |
| Creator ID | 4 | 28 | 建立資料表之公用程式的廠商識別碼。 |
| 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 | 從此結構開頭到欄位 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 | 從此結構開頭到欄位 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 | 16550 子集與 DBGP 修訂版 1 相容 | ||
| 0x0002 | MAX311xE SPI UART | ||
| 0x0003 | 手臂 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 | SDM845,時脈速率為 1.8432 MHz | ||
| 0x0012 | 16550 與一般位址結構中定義的參數相容 | ||
| 0x0013 | SDM845,時脈速率為 7.372 MHz | ||
| 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描述的串列埠,以及新埠,例如在通用位址結構中需要非傳統存取大小和位元寬的埠。