Таблица портов отладки Майкрософт 2 (DBG2)

Эта спецификация определяет формат таблицы портов отладки 2 (DBG2), используемой в встроенном ПО платформы для описания портов отладки, доступных в системе. Эта информация относится к следующим операционным системам: Windows 8 и более поздней версии.

Ссылки и ресурсы, рассмотренные здесь, перечислены в конце этого документа.

Уведомление о патентах: корпорация Майкрософт предоставляет определенные патенты для реализации этой спецификации в двух вариантах:

  1. Обещание сообщества Майкрософт, доступное по адресу https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
  2. Соглашение о окончательной спецификации Open Web Foundation версии 1.0 ("OWF 1.0") по состоянию на 1 октября 2012 г. доступно по адресу http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.

Document History

Date Change
29 ноября 2011 г. First publication.
22 мая 2012 г. Обновляется до таблицы 3 на последние поддерживаемые платформы для Windows 8.
10 августа 2015 г. Обновлено уведомление о патенте.
6 октября 2015 г. Добавлены новые подтипы последовательной отладки (Arm SBSA UART, Arm DCC)
10 декабря 2015 г. Добавлен новый подтип последовательной отладки (BCM2835)
31 мая 2017 г. Добавлен новый подтип последовательной отладки (i.MX6, универсальная структура адресов 16550)
11 июня 2020 г. Добавлен новый подтип последовательной отладки (SDM845v2)
1 сентября 2020 г. Преобразованный документ в синтаксис Markdown и изменения форматирования.
21 сентября 2020 г. Добавлен новый подтип последовательной отладки (IALPSS)
17 февраля 2021 г. Документируйте все известные подтипы последовательной отладки
10 апреля 2023 г. Добавлен новый подтип последовательной отладки (RISC-V) и добавлена уточняющая информация о подтипах, совместимых с 16550

Introduction

Корпорация Майкрософт требует отладочного порта во всех системах. Чтобы описать порты отладки, доступные на платформе, корпорация Майкрософт определяет таблицу для конкретной операционной системы (DBG2). Эта таблица задает один или несколько независимых портов для целей отладки. Наличие таблицы портов отладки указывает, что система включает порт отладки. Таблица содержит сведения о конфигурации порта отладки. Таблица находится в системной памяти с другими таблицами advanced Configuration and Power Interface (ACPI) и должна быть указана в таблице описания корневой системы ACPI (RSDT).

Таблица DBG2 заменяет таблицу портов отладки ACPI (DBGP) на платформах, реализация портов отладки которых не может быть описана с помощью 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 8 16 Для таблицы портов отладки 2 идентификатор таблицы — это идентификатор модели производителя.
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 Длина в байтах пространства именString, включая символы NUL.
NamespaceStringOffset 2 6 Смещение в байтах с начала этой структуры до поля NamespaceString[]. Это значение должно быть допустимым, так как эта строка должна присутствовать.
OemDataLength 2 8 Длина блока данных OEM в байтах.
OemDataOffset 2 10 Смещение в байтах в поле OemData[] с начала этой структуры. Это значение будет равно 0, если данные OEM отсутствуют.
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 Строка ASCII, завершаемая NUL, однозначно идентифицирует это устройство. Эта строка состоит из полной ссылки на объект, представляющий это устройство в пространстве имен ACPI. Если устройство пространства имен не существует, namespaceString[] должен содержать только один "". Символ (период ASCII).
OemData[] OemDataLength OemDataOffset Необязательные данные изготовителя оборудования переменной длины.

Table 3. Отладка типов портов и подтипов

Port Type Subtype Description
Reserved 0x0000 — 0x7FFF и 0xFFFF All Зарезервировано (не используйте)
Serial 0x8000 0x0000 Fully 16550-compatible
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) Generic UART, поддерживающий только 32-разрядный доступ
0x000E Arm SBSA Generic UART
0x000F Arm DCC
0x0010 BCM2835
0x0011 SDM845 с частотой 1,8432 МГц
0x0012 Совместимость 16550 с параметрами, определенными в структуре универсального адреса
0x0013 SDM845 с частотой 7,372 МГц
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 All Зарезервировано (не используйте)
Reserved 0x8005 — 0xFFFE All Зарезервировано (для дальнейшего использования)

Примечание к полям универсальной структуры адресов

  • Структура универсального адреса в BaseAddressRegister[0] используется для указания ширины регистра и размера доступа, используемого некоторыми серийными подтипами.

  • Идентификатор адресного пространства и поля "Регистрация битового смещения" должны иметь значение 0.

  • Поле "Ширина регистра" содержит шаг регистрации и должно иметь значение 2, которое по крайней мере равно размеру доступа. На 32-разрядных платформах это значение не может превышать 32. На 64-разрядных платформах это значение не может превышать 64.

  • Поле "Размер доступа" используется для определения того, следует ли использовать доступ к байтам, WORD, DWORD или QWORD. Доступ к QWORD действителен только в 64-разрядных архитектурах.

Примечание о UART на основе 16550

Существует три подтипа интерфейса, которые можно использовать для UART на основе 16550. Различия между ними являются тонкими, но важными.

  • Подтип интерфейса 0x0 относится к последовательному порту, который использует "устаревший" порт ввода-вывода, как показано на платформах на основе x86. Этот тип следует избегать на платформах, использующих операции ввода-вывода, сопоставленные с памятью, например ARM или RISC-V.

  • Подтип интерфейса 0x1 поддерживает сопоставленные UARTs памяти, но только те, которые описаны в таблице ACPI DBGP. Реализации операционной системы могут рассматриваться как эквивалентные порту отладки, предоставленному DBGP, и учитывать только поле базового адреса универсальной структуры адресов.

  • Подтип интерфейса 0x12 является наиболее гибким выбором и рекомендуется при запуске совместимых операционных систем на новых платформах. Этот подтип поддерживает все последовательные порты, которые можно описать подтипами 0x0 и 0x1, а также новые, например те, которые требуют не традиционных размеров доступа и ширины битов в структуре универсального адреса.

Resources

ACPI Specification