Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Obietnica społeczności firmy Microsoft dostępna na stronie
https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx- 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.