Udostępnij przez


Tabela portów debugowania Microsoft 2 (DBG2)

Ta specyfikacja definiuje format tabeli portów debugowania 2 (DBG2) używany w oprogramowaniu układowym platformy do opisywania portów debugowania dostępnych w systemie. Te informacje dotyczą następujących systemów operacyjnych: Windows 8 i nowszych.

Dokumentacja i zasoby omówione tutaj znajdują się na końcu tego dokumentu.

Powiadomienie o patentach: Firma Microsoft udostępnia pewne prawa patentowe do implementacji tej specyfikacji w ramach dwóch opcji:

  1. Obietnica społeczności firmy Microsoft dostępna na stronie https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
  2. Umowa o ostatecznej specyfikacji programu Open Web Foundation w wersji 1.0 ("OWF 1.0") od 1 października 2012 r., dostępna pod adresem http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.

Document History

Date Change
29 listopada 2011 r. First publication.
22 maja 2012 r. Aktualizacje tabeli 3 na ostateczne obsługiwane platformy dla systemu Windows 8.
10 sierpnia 2015 r. Zaktualizowano powiadomienie o patentach.
6 października 2015 r. Dodano nowe podtypy debugowania szeregowego (Arm SBSA UART, Arm DCC)
10 grudnia 2015 r. Dodano nowy podtyp debugowania szeregowego (BCM2835)
31 maja 2017 r. Dodano nowy podtyp debugowania szeregowego (i.MX6, ogólna struktura adresów 16550)
11 czerwca 2020 r. Dodano nowy podtyp debugowania szeregowego (SDM845v2)
1 września 2020 r. Przekonwertowany dokument na składnię języka Markdown i zmiany formatowania.
21 września 2020 r. Dodano nowy podtyp debugowania szeregowego (IALPSS)
17 lutego 2021 r. Dokumentowanie wszystkich znanych podtypów debugowania szeregowego
10 kwietnia 2023 r. Dodano nowy podtyp debugowania szeregowego (RISC-V) i dodano wyjaśnienie informacji na temat podtypów zgodnych z 16550

Introduction

Firma Microsoft wymaga portu debugowania we wszystkich systemach. Aby opisać porty debugowania dostępne na platformie, firma Microsoft definiuje tabelę specyficzną dla systemu operacyjnego (DBG2). Ta tabela określa co najmniej jeden niezależny port na potrzeby debugowania. Obecność tabeli portów debugowania wskazuje, że system zawiera port debugowania. Tabela zawiera informacje o konfiguracji portu debugowania. Tabela znajduje się w pamięci systemowej z innymi tabelami Advanced Configuration and Power Interface (ACPI) i musi się odwoływać w tabeli opisu systemu głównego ACPI (RSDT).

Tabela DBG2 zastępuje tabelę portów debugowania ACPI (DBGP) na platformach, których implementacje portów debugowania nie mogą być opisane przy użyciu protokołu DBGP.

Debugowanie tabeli portów 2 (DBG2)

Table 1. Format tabeli portów debugowania 2

Tabela 1 definiuje pola w bazie danych DBG2.

Field Byte length Byte offset Description
Header
Signature 4 0 'DBG2'. Podpis dla tabeli portów debugowania 2.
Length 4 4 Długość w bajtach całej tabeli portów debugowania 2.
Revision 1 8 Dla tej wersji specyfikacji ta wartość to 0.
Checksum 1 9 Cała tabela musi być równa zero.
OEM ID 6 10 Identyfikator producenta oryginalnego sprzętu (OEM).
Identyfikator tabeli producenta OEM 8 16 W przypadku tabeli portów debugowania 2 identyfikator tabeli jest identyfikatorem modelu producenta.
OEM Revision 4 24 Poprawka producenta OEM tabeli portów debugowania 2 dla podanego identyfikatora tabeli OEM.
Creator ID 4 28 Identyfikator dostawcy narzędzia, które utworzyło tabelę.
Creator Revision 4 32 Poprawka narzędzia, które utworzyło tabelę.
OffsetDbgDeviceInfo 4 36 Przesunięcie w bajtach od początku tej tabeli do pierwszego wpisu struktury Debugowanie informacji o urządzeniu.
NumberDbgDeviceInfo 4 40 Wskazuje liczbę wpisów struktury Informacje o urządzeniu debugowania.
Debugowanie struktury informacji o urządzeniu[NumberDbgDeviceInfo] Variable OffsetDbgDeviceInfo Lista struktur informacji o urządzeniach debugowania dla tej platformy. Format struktury jest definiowany w sekcji Debugowanie struktury informacji o urządzeniu w dalszej części tego dokumentu.

Debugowanie struktury informacji o urządzeniu

Table 2. Debugowanie formatu struktury informacji o urządzeniu

Field Byte length Byte offset Description
Revision 1 0 Poprawka struktury debugowania informacji o urządzeniu. W przypadku tej wersji specyfikacji musi to być wartość 0.
Length 2 1 Długość w bajtach tej struktury, w tym namespaceString i OEMData.
NumberofGenericAddressRegisters 1 3 Liczba rejestrów adresów ogólnych w użyciu.
NamespaceStringLength 2 4 Długość ( w bajtach) ciągu NamespaceString, w tym znaki NUL.
NamespaceStringOffset 2 6 Przesunięcie w bajtach od początku tej struktury do pola NamespaceString[]. Ta wartość musi być prawidłowa, ponieważ ten ciąg musi być obecny.
OemDataLength 2 8 Długość w bajtach bloku danych OEM.
OemDataOffset 2 10 Przesunięcie w bajtach do pola OemData[] od początku tej struktury. Ta wartość będzie wynosić 0, jeśli żadne dane OEM nie są obecne.
Port Type 2 12 Typ portu debugowania dla tego urządzenia debugowania. Każda z tych wartości będzie mieć odpowiednią wartość podtypu, jak pokazano w tabeli 3.
Port Subtype 2 14 Debuguj podtyp portu dla tego urządzenia debugowania. Zobacz Tabelę 3.
Reserved 2 16 Wartość zarezerwowana musi mieć wartość 0.
BaseAddressRegisterOffset 2 18 Przesunięcie w bajtach od początku tej struktury do pola BaseaddressRegister[].
AddressSizeOffset 2 20 Przesunięcie w bajtach od początku tej struktury do pola AddressSize[].
BaseAddressRegister[] (NumberofGenericAddressRegisters) * 12 BaseAddressRegisterOffset Tablica adresów ogólnych.
AddressSize[] (NumberofGenericAddressRegisters) * 4 AddressSizeOffset Tablica rozmiarów adresów odpowiadających każdemu adresowi ogólnemu powyżej.
NamespaceString[] NamespaceStringLength NamespaceStringOffset Ciąg ASCII zakończony przez NUL w celu unikatowego zidentyfikowania tego urządzenia. Ten ciąg składa się z w pełni kwalifikowanego odwołania do obiektu reprezentującego to urządzenie w przestrzeni nazw ACPI. Jeśli żadne urządzenie przestrzeni nazw nie istnieje, element NamespaceString[] musi zawierać tylko jeden element "". Znak (kropka ASCII).
OemData[] OemDataLength OemDataOffset Opcjonalne dane specyficzne dla producenta OEM o zmiennej długości.

Table 3. Debugowanie typów portów i podtypów

Port Typ Subtype Description
Reserved 0x0000 — 0x7FFF i 0xFFFF All Zarezerwowane (nie używaj)
Serial 0x8000 0x0000 Fully 16550-compatible
0x0001 Podzestaw 16550 zgodny z poprawką DBGP 1
0x0002 MAX311xE SPI UART
0x0003 Arm PL011 UART
0x0004 MSM8x60 (np. 8960)
0x0005 NVIDIA 16550
0x0006 TI OMAP
0x0007 Zarezerwowane (nie używaj)
0x0008 APM88xxxx
0x0009 MSM8974
0x000A SAM5250
0x000B Intel USIF
0x000C i.MX 6
0x000D (przestarzałe) Arm SBSA (tylko 2.x) Ogólny UART obsługujący tylko dostęp 32-bitowy
0x000E Ogólny UART SBSA arm
0x000F Arm DCC
0x0010 BCM2835
0x0011 SDM845 z częstotliwością zegara 1,8432 MHz
0x0012 16550 zgodne z parametrami zdefiniowanymi w ogólnej strukturze adresów
0x0013 SDM845 z częstotliwością zegara 7,372 MHz
0x0014 Intel LPSS
0x0015 RISC-V konsoli SBI (dowolny obsługiwany mechanizm SBI)
0x0016 — 0xFFFF Zarezerwowane (do użytku w przyszłości)
1394 0x8001 0x0000 interfejs standardowego kontrolera hosta IEEE1394
0x0001 — 0xFFFF Zarezerwowane (do użytku w przyszłości)
USB 0x8002 0x0000 Kontroler zgodny ze standardem XHCI z interfejsem debugowania
0x0001 Kontroler zgodny ze standardem EHCI z interfejsem debugowania
0x0002 — 0x0006 Zarezerwowane (nie używaj)
0x0007 — 0xFFFF Zarezerwowane (do użytku w przyszłości)
Net 0x8003 NNNN Nazwa sieci NNNN musi być prawidłowym identyfikatorem dostawcy przypisanego przez pci
0x8004 All Zarezerwowane (nie używaj)
Reserved 0x8005 — 0xFFFE All Zarezerwowane (do użytku w przyszłości)

Uwaga dotycząca pól ogólnej struktury adresów

  • Ogólna struktura adresów w baseAddressRegister[0] służy do określania szerokości bitów rejestru i rozmiaru dostępu używanego przez niektóre podtypy szeregowe.

  • Pola Identyfikator przestrzeni adresowej i Przesunięcie bitu rejestru muszą mieć wartość 0.

  • Pole Zarejestruj szerokość bitów zawiera krok rejestru i musi być mocą 2, która jest co najmniej tak duża, jak rozmiar dostępu. Na 32-bitowych platformach ta wartość nie może przekroczyć 32. Na 64-bitowych platformach ta wartość nie może przekroczyć 64.

  • Pole Rozmiar dostępu służy do określania, czy mają być używane dostępy bajtów, WORD, DWORD lub QWORD. Dostęp do QWORD jest prawidłowy tylko w architekturach 64-bitowych.

Uwaga dotycząca 16550 opartych na UARTs

Istnieją trzy podtypy interfejsu, które mogą być używane dla 16550 opartych na UARTs. Różnice między nimi są subtelne, ale ważne.

  • Podtyp interfejsu 0x0 odnosi się do portu szeregowego, który używa "starszej" operacji we/wy portu, jak pokazano na platformach opartych na architekturze x86. Ten typ należy unikać na platformach korzystających z we/wy mapowanych pamięci, takich jak ARM lub RISC-V.

  • Podtyp interfejsu 0x1 obsługuje mapowane UARTs pamięci, ale tylko te, które można opisać w tabeli ACPI protokołu DBGP. Implementacje systemu operacyjnego mogą traktować je jako równoważne portowi debugowania dostarczonemu przez protokół DBGP i honorować tylko pole Adres podstawowy struktury adresów ogólnych.

  • Podtyp interfejsu 0x12 jest najbardziej elastycznym wyborem i jest zalecany podczas uruchamiania zgodnych systemów operacyjnych na nowych platformach. Ten podtyp obsługuje wszystkie porty szeregowe, które mogą być opisane przez podtypy 0x0 i 0x1, a także nowe, takie jak te wymagające nie tradycyjnych rozmiarów dostępu i szerokości bitów w ogólnej strukturze adresów.

Resources

ACPI Specification