Microsoft Debug Port Table 2 (DBG2)
此規格會定義偵錯埠表 2 (DBG2) 的格式,用於平臺韌體來描述系統上可用的偵錯埠。 此資訊適用于下列作業系統:Windows 8和更新版本。
本文結尾會列出此處討論的參考和資源。
專利聲明:Microsoft 在兩個選項下提供此規格實作的特定專利權利:
- Microsoft 社群承諾,可在
https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
- 自 2012 年 10 月 1 日起,Open Web Foundation 最終規格合約 1.0 版 (「OWF 1.0」) 。
http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0
檔歷程記錄
Date | 變更 |
---|---|
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) 中參考。
DBG2 資料表會取代無法使用 DBGP 描述偵錯埠實作之平臺上的 ACPI 偵錯埠資料表 (DBGP) 。
偵錯埠資料表 2 (DBG2)
表 1. 偵錯埠表格 2 格式
表 1 定義 DBG2 中的欄位。
欄位 | 位元組長度 | 位元組位移 | 描述 |
---|---|---|---|
標頭 | |||
簽章 | 4 | 0 | 'DBG2'。 偵錯埠表 2 的簽章。 |
長度 | 4 | 4 | 整個偵錯埠表 2 的長度,以位元組為單位。 |
修訂版 | 1 | 8 | 針對此版本的規格,此值為 0。 |
總和檢查碼 | 1 | 9 | 整個資料表必須加總為零。 |
OEM 識別碼 | 6 | 10 | 原始設備製造商 (OEM) 識別碼。 |
OEM 簎翐礹蜞頇塈 | 8 | 16 | 針對偵錯埠表 2,資料表識別碼是製造商型號識別碼。 |
OEM 摷濻 | 4 | 24 | 所提供 OEM 資料表識別碼的偵錯埠表 2 OEM 修訂。 |
建立者識別碼 | 4 | 28 | 用來建立資料表的公用程式之廠商識別碼。 |
建立者修訂 | 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。 |
保留 | 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. 偵錯埠類型和子類型
連接埠 | 類型 | Subtype | 描述 |
---|---|---|---|
保留 | 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) 僅支援 32 位存取的一般 UART | ||
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 指派廠商識別碼 |
0x8004 | 全部 | 保留 (不使用) | |
保留 | 0x8005 – 0xFFFE | 全部 | 保留 (以供日後使用) |
一般位址結構的欄位附注
BaseAddressRegister[0] 中的泛型位址結構可用來指定某些序列子類型所使用的暫存器位寬度和存取大小。
[位址空間識別碼] 和 [註冊位移] 欄位必須是 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描述的所有序列埠,以及新的埠,例如需要泛型位址結構中非傳統存取大小和位寬度的埠。