Microsoft Debug Port Table 2 (DBG2)
Essa especificação define o formato da DBG2 (Tabela de Porta de Depuração 2), usada no firmware da plataforma para descrever as portas de depuração disponíveis no sistema. Essas informações se aplicam aos seguintes sistemas operacionais: Windows 8 e mais recentes.
As referências e os recursos discutidos aqui são listados no final deste artigo.
Aviso de Patente: a Microsoft está disponibilizando certos direitos de patente para implementações dessa especificação em duas opções:
- Promessa da Comunidade da Microsoft, disponível em
https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
- O Open Web Foundation Final Specification Agreement versão 1.0 ("OWF 1.0") a partir de 1º de outubro de 2012, disponível em
http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0
.
Histórico de Documentos
Data | Alterar |
---|---|
29 de novembro de 2011 | Primeira publicação. |
22 de maio de 2012 | Atualizações à Tabela 3 por plataformas finais com suporte para Windows 8. |
10 de agosto de 2015 | Aviso de patente atualizado. |
6 de outubro de 2015 | Adicionados novos subtipos de depuração serial (Arm SBSA UART, Arm DCC) |
10 de dezembro de 2015 | Adicionado novo subtipo de depuração serial (BCM2835) |
31 de maio de 2017 | Adicionado novo subtipo de depuração serial (i.MX6, estrutura de endereço genérico compatível com 16550) |
11 de junho de 2020 | Adicionado novo subtipo de depuração serial (SDM845v2) |
1 de setembro de 2020 | Documento convertido em sintaxe markdown e alterações de formatação. |
21 de setembro de 2020 | Adicionado novo subtipo de depuração serial (IALPSS) |
17 de fevereiro de 2021 | Documentar todos os subtipos de depuração serial conhecidos |
10 de abril de 2023 | Adicionado novo subtipo de depuração serial (RISC-V) e adicionado informações de esclarecimento sobre subtipos compatíveis com 16550 |
Introdução
A Microsoft requer uma porta de depuração em todos os sistemas. Para descrever as portas de depuração disponíveis em uma plataforma, a Microsoft define uma tabela específica do sistema operacional (DBG2). Esta tabela especifica uma ou mais portas independentes para fins de depuração. A presença de uma tabela de porta de depuração indica que o sistema inclui uma porta de depuração. A tabela contém informações sobre a configuração da porta de depuração. A tabela está localizada na memória do sistema com outras tabelas ACPI (Advanced Configuration and Power Interface) e deve ser referenciada na Tabela de Descrição do Sistema Raiz do ACPI (RSDT).
A tabela DBG2 substitui a Tabela de Porta de Depuração do ACPI (DBGP) em plataformas cujas implementações de porta de depuração não podem ser descritas usando DBGP.
Tabela de porta de depuração 2 (DBG2)
Tabela 1. Formato da Tabela de Porta de Depuração 2
A Tabela 1 define os campos no DBG2.
Campo | Comprimento do byte | Deslocamento de bytes | Descrição |
---|---|---|---|
Cabeçalho | |||
Assinatura | 4 | 0 | 'DBG2'. Assinatura para a Tabela 2 da Porta de Depuração. |
Comprimento | 4 | 4 | Comprimento, em bytes, de toda a Tabela de Porta de Depuração 2. |
Revisão | 1 | 8 | Para esta versão da especificação, esse valor é 0. |
Checksum (soma de verificação) | 1 | 9 | A tabela inteira deve somar a zero. |
OEM ID | 6 | 10 | ID original do fabricante do equipamento (OEM). |
ID da Tabela OEM | 8 | 16 | Para a Tabela de Porta de Depuração 2, a ID da tabela é a ID do modelo do fabricante. |
Revisão do OEM | 4 | 24 | Revisão OEM da Tabela 2 da Porta de Depuração para a ID da Tabela OEM fornecida. |
ID do Criador | 4 | 28 | ID do fornecedor do utilitário que criou a tabela. |
Revisão do Criador | 4 | 32 | Revisão do utilitário que criou a tabela. |
OffsetDbgDeviceInfo | 4 | 36 | Deslocamento, em bytes, desde o início desta tabela até a primeira entrada de estrutura de Informações do Dispositivo de Depuração. |
NumberDbgDeviceInfo | 4 | 40 | Indica o número de entradas de estrutura de Informações do Dispositivo de Depuração. |
Depurar estrutura de informações do dispositivo[NumberDbgDeviceInfo] | Variável | OffsetDbgDeviceInfo | Uma lista de estruturas de Informações do Dispositivo de Depuração para essa plataforma. O formato da estrutura é definido na seção Estrutura de Informações do Dispositivo de Depuração, posteriormente neste documento. |
Estrutura de informações do dispositivo de depuração
Tabela 2. Formato da estrutura Depurar Informações do Dispositivo
Campo | Comprimento do byte | Deslocamento de bytes | Descrição |
---|---|---|---|
Revisão | 1 | 0 | Revisão da estrutura Depurar Informações do Dispositivo. Para esta versão da especificação, isso deve ser 0. |
Comprimento | 2 | 1 | Comprimento, em bytes, dessa estrutura, incluindo NamespaceString e OEMData. |
NumberofGenericAddressRegisters | 1 | 3 | Número de registros de endereço genéricos em uso. |
NamespaceStringLength | 2 | 4 | Comprimento, em bytes, de NamespaceString, incluindo caracteres NUL. |
NamespaceStringOffset | 2 | 6 | Deslocamento, em bytes, desde o início dessa estrutura até o campo NamespaceString[]. Esse valor deve ser válido porque essa cadeia de caracteres deve estar presente. |
OemDataLength | 2 | 8 | Comprimento, em bytes, do bloco de dados OEM. |
OemDataOffset | 2 | 10 | Deslocamento, em bytes, para o campo OemData[] desde o início dessa estrutura. Esse valor será 0 se nenhum dado OEM estiver presente. |
Tipo de Porta | 2 | 12 | Tipo de porta de depuração para este dispositivo de depuração. Cada um desses valores terá um valor de subtipo correspondente, conforme mostrado na Tabela 3. |
Subtipo de porta | 2 | 14 | Subtipo de porta de depuração para este dispositivo de depuração. Consulte Tabela 3. |
Reservado | 2 | 16 | Reservado, deve ser 0. |
BaseAddressRegisterOffset | 2 | 18 | Deslocamento, em bytes, desde o início dessa estrutura até o campo BaseaddressRegister[]. |
AddressSizeOffset | 2 | 20 | Deslocamento, em bytes, desde o início dessa estrutura até o campo AddressSize[]. |
BaseAddressRegister[] | (NumberofGenericAddressRegisters) * 12 | BaseAddressRegisterOffset | Matriz de endereços genéricos. |
AddressSize[] | (NumberofGenericAddressRegisters) * 4 | AddressSizeOffset | Matriz de tamanhos de endereço correspondentes a cada endereço genérico acima. |
NamespaceString[] | NamespaceStringLength | NamespaceStringOffset | Cadeia de caracteres ASCII terminada por NUL para identificar exclusivamente esse dispositivo. Essa cadeia de caracteres consiste em uma referência totalmente qualificada ao objeto que representa esse dispositivo no namespace ACPI. Se nenhum dispositivo de namespace existir, NamespaceString[] deverá conter apenas um único '.' Caractere (período ASCII). |
OemData[] | OemDataLength | OemDataOffset | Dados opcionais específicos do OEM de comprimento variável. |
Tabela 3. Depurar tipos de porta e subtipos
Porta | Tipo | Subtype | Descrição |
---|---|---|---|
Reservado | 0x0000 – 0x7FFF e 0xFFFF | Tudo | Reservado (Não Usar) |
Serial | 0x8000 | 0x0000 | Totalmente compatível com 16550 |
0x0001 | Subconjunto 16550 compatível com a Revisão 1 do DBGP | ||
0x0002 | MAX311xE SPI UART | ||
0x0003 | Arm PL011 UART | ||
0x0004 | MSM8x60 (por exemplo, 8960) | ||
0x0005 | Nvidia 16550 | ||
0x0006 | TI OMAP | ||
0x0007 | Reservado (Não Usar) | ||
0x0008 | APM88xxxx | ||
0x0009 | MSM8974 | ||
0x000A | SAM5250 | ||
0x000B | Intel USIF | ||
0x000C | i.MX 6 | ||
0x000D | (preterido) Arm SBSA (somente 2.x) UART genérico com suporte apenas a acessos de 32 bits | ||
0x000E | Arm SBSA Generic UART | ||
0x000F | Arm DCC | ||
0x0010 | BCM2835 | ||
0x0011 | SDM845 com taxa de relógio de 1,8432 MHz | ||
0x0012 | 16550 compatível com parâmetros definidos na Estrutura de Endereço Genérico | ||
0x0013 | SDM845 com taxa de relógio de 7,372 MHz | ||
0x0014 | Intel LPSS | ||
0x0015 | Console do SBI do RISC-V (qualquer mecanismo de SBI com suporte) | ||
0x0016 – 0xFFFF | Reservado (para uso futuro) | ||
1394 | 0x8001 | 0x0000 | Interface do controlador de host padrão IEEE1394 |
0x0001 – 0xFFFF | Reservado (para uso futuro) | ||
USB | 0x8002 | 0x0000 | Controlador compatível com XHCI com interface de depuração |
0x0001 | Controlador compatível com EHCI com interface de depuração | ||
0x0002 – 0x0006 | Reservado (Não Usar) | ||
0x0007 – 0xFFFF | Reservado (para uso futuro) | ||
Net | 0x8003 | NNNN | NNNN deve ser uma ID de fornecedor atribuída por PCI válida |
0x8004 | Tudo | Reservado (Não Usar) | |
Reservado | 0x8005 – 0xFFFE | Tudo | Reservado (para uso futuro) |
Observação nos campos da Estrutura de Endereço Genérico
A Estrutura de Endereço Genérico em BaseAddressRegister[0] é usada para especificar a largura do bit de registro e o tamanho de acesso usados por alguns subtipos serial.
Os campos ID de Espaço de Endereço e Deslocamento de Bit de Registro devem ser 0.
O campo Registrar Largura do Bit contém o passo de registro e deve ser uma potência de 2 que seja pelo menos tão grande quanto o tamanho do acesso. Em plataformas de 32 bits, esse valor não pode exceder 32. Em plataformas de 64 bits, esse valor não pode exceder 64.
O campo Tamanho do Acesso é usado para determinar se os acessos byte, WORD, DWORD ou QWORD devem ser usados. Os acessos QWORD só são válidos em arquiteturas de 64 bits.
Observação sobre UARTs baseados em 16550
Há três subtipos de interface que podem ser usados para UARTs baseados em 16550. As diferenças entre eles são sutis, mas importantes.
O subtipo de interface 0x0 refere-se a uma porta serial que usa E/S de porta "herdada", conforme visto em plataformas baseadas em x86. Esse tipo deve ser evitado em plataformas que usam E/S mapeada pela memória, como ARM ou RISC-V.
O subtipo de interface 0x1 dá suporte a UARTs mapeados em memória, mas apenas os que podem ser descritos na tabela ACPI do DBGP. As implementações do sistema operacional podem tratar isso como equivalente a uma porta de depuração fornecida pelo DBGP e respeitar apenas o campo Endereço Base da Estrutura de Endereço Genérico.
O subtipo de interface 0x12 é a opção mais flexível e é recomendado ao executar sistemas operacionais compatíveis em novas plataformas. Esse subtipo dá suporte a todas as portas serial que podem ser descritas pelos subtipos 0x0 e 0x1, bem como as novas, como aquelas que exigem tamanhos de acesso não tradicionais e larguras de bits na Estrutura de Endereço Genérica.