Microsoft Debug Port Table 2 (DBG2)
Cette spécification définit le format de la table de port de débogage 2 (DBG2), utilisée dans le microprogramme de plateforme pour décrire les ports de débogage disponibles sur le système. Ces informations s’appliquent aux systèmes d’exploitation suivants : Windows 8 et plus récents.
Les références et les ressources présentées ici sont répertoriées à la fin de ce document.
Avis de brevet : Microsoft rend certains droits de brevet disponibles pour les implémentations de cette spécification selon deux options :
- Promesse de la communauté microsoft, disponible à l’adresse
https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
- Le contrat de spécification final d’Open Web Foundation version 1.0 (« OWF 1.0 ») à compter du 1er octobre 2012, disponible à l’adresse
http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0
.
Historique des documents
Date | Modifier |
---|---|
29 novembre 2011 | Première publication. |
22 mai 2012 | Mises à jour au tableau 3 par plateforme finale prise en charge pour Windows 8. |
10 août 2015 | Mise à jour de l’avis de brevet. |
6 octobre 2015 | Ajout de nouveaux sous-types de débogage en série (Arm SBSA UART, Arm DCC) |
10 décembre 2015 | Ajout d’un nouveau sous-type de débogage série (BCM2835) |
31 mai 2017 | Ajout d’un nouveau sous-type de débogage série (i.MX6, compatible avec la structure d’adresse générique 16550) |
11 juin 2020 | Ajout d’un nouveau sous-type de débogage série (SDM845v2) |
1 septembre 2020 | Modification de la syntaxe et de la mise en forme du document converti en Markdown. |
21 septembre 2020 | Ajout d’un nouveau sous-type de débogage série (IALPSS) |
17 février 2021 | Documenter tous les sous-types de débogage série connus |
10 avril 2023 | Ajout d’un nouveau sous-type de débogage série (RISC-V) et ajout d’informations de clarification sur les sous-types compatibles 16550 |
Introduction
Microsoft nécessite un port de débogage sur tous les systèmes. Pour décrire le ou les ports de débogage disponibles sur une plateforme, Microsoft définit une table spécifique au système d’exploitation (DBG2). Ce tableau spécifie un ou plusieurs ports indépendants à des fins de débogage. La présence d’une table de port de débogage indique que le système inclut un port de débogage. La table contient des informations sur la configuration du port de débogage. La table se trouve dans la mémoire système avec d’autres tables ACPI (Advanced Configuration and Power Interface) et doit être référencée dans la table de description du système racine ACPI (RSDT).
La table DBG2 remplace la table de ports de débogage (DBGP) ACPI sur les plateformes dont les implémentations de port de débogage ne peuvent pas être décrites à l’aide de DBGP.
Debug Port Table 2 (DBG2)
Tableau 1. Format Debug Port Table 2
Le tableau 1 définit les champs dans DBG2.
Champ | Longueur d’octets | Décalage d’octets | Description |
---|---|---|---|
En-tête | |||
Signature | 4 | 0 | 'DBG2'. Signature pour la table de port de débogage 2. |
Longueur | 4 | 4 | Longueur, en octets, de l’intégralité du tableau de port de débogage 2. |
Révision | 1 | 8 | Pour cette version de la spécification, cette valeur est 0. |
Somme de contrôle | 1 | 9 | La table entière doit être égale à zéro. |
OEM ID | 6 | 10 | ID du fabricant d’équipement d’origine (OEM). |
OEM Table ID | 8 | 16 | Pour la table de port de débogage 2, l’ID de table est l’ID de modèle du fabricant. |
Révision OEM | 4 | 24 | Révision OEM de la table de port de débogage 2 pour l’ID de table OEM fourni. |
ID du créateur | 4 | 28 | ID de fournisseur de l’utilitaire qui a créé la table. |
Révision du créateur | 4 | 32 | Révision de l’utilitaire qui a créé la table. |
OffsetDbgDeviceInfo | 4 | 36 | Décalage, en octets, du début de cette table vers la première entrée de structure Informations sur l’appareil de débogage. |
NumberDbgDeviceInfo | 4 | 40 | Indique le nombre d’entrées de structure Informations sur l’appareil de débogage. |
Structure d’informations de périphérique de débogage[NumberDbgDeviceInfo] | Variable | OffsetDbgDeviceInfo | Liste des structures Debug Device Information pour cette plateforme. Le format de structure est défini dans la section Structure d’informations sur le périphérique de débogage, plus loin dans ce document. |
Structure d’informations sur les appareils de débogage
Tableau 2. Format de structure Debug Device Information
Champ | Longueur d’octets | Décalage d’octets | Description |
---|---|---|---|
Révision | 1 | 0 | Révision de la structure Informations sur l’appareil de débogage. Pour cette version de la spécification, il doit s’agir de 0. |
Longueur | 2 | 1 | Longueur, en octets, de cette structure, y compris NamespaceString et OEMData. |
NumberofGenericAddressRegisters | 1 | 3 | Nombre de registres d’adresses génériques en cours d’utilisation. |
NamespaceStringLength | 2 | 4 | Longueur, en octets, de NamespaceString, y compris les caractères NUL. |
NamespaceStringOffset | 2 | 6 | Décalage, en octets, du début de cette structure vers le champ NamespaceString[]. Cette valeur doit être valide, car cette chaîne doit être présente. |
OemDataLength | 2 | 8 | Longueur, en octets, du bloc de données OEM. |
OemDataOffset | 2 | 10 | Décalage, en octets, vers le champ OemData[] à partir du début de cette structure. Cette valeur sera 0 si aucune donnée OEM n’est présente. |
Type de port | 2 | 12 | Type de port de débogage pour cet appareil de débogage. Chacune de ces valeurs aura une valeur de sous-type correspondante, comme indiqué dans le tableau 3. |
Sous-type de port | 2 | 14 | Sous-type de port de débogage pour cet appareil de débogage. Voir le tableau 3. |
Réservé | 2 | 16 | Réservé, doit être 0. |
BaseAddressRegisterOffset | 2 | 18 | Décalage, en octets, du début de cette structure vers le champ BaseaddressRegister[]. |
AddressSizeOffset | 2 | 20 | Décalage, en octets, du début de cette structure vers le champ AddressSize[]. |
BaseAddressRegister[] | (NumberofGenericAddressRegisters) * 12 | BaseAddressRegisterOffset | Tableau d’adresses génériques. |
AddressSize[] | (NumberofGenericAddressRegisters) * 4 | AddressSizeOffset | Tableau de tailles d’adresses correspondant à chaque adresse générique ci-dessus. |
NamespaceString[] | NamespaceStringLength | NamespaceStringOffset | Chaîne ASCII terminée par nul pour identifier de manière unique cet appareil. Cette chaîne se compose d’une référence complète à l’objet qui représente cet appareil dans l’espace de noms ACPI. S’il n’existe aucun périphérique d’espace de noms, NamespaceString[] ne doit contenir qu’un seul ' . Caractère (période ASCII). |
OemData[] | OemDataLength | OemDataOffset | Données oem de longueur variable facultatives. |
Tableau 3. Types et sous-types de ports de débogage
Port | Type | Subtype | Description |
---|---|---|---|
Réservé | 0x0000 – 0x7FFF et 0xFFFF | Tous | Réservé (ne pas utiliser) |
Série | 0x8000 | 0x0000 | Entièrement compatible 16550 |
0x0001 | Sous-ensemble 16550 compatible avec DBGP Revision 1 | ||
0x0002 | MAX311xE SPI UART | ||
0x0003 | Arm PL011 UART | ||
0x0004 | MSM8x60 (par exemple, 8960) | ||
0x0005 | Nvidia 16550 | ||
0x0006 | TI OMAP | ||
0x0007 | Réservé (ne pas utiliser) | ||
0x0008 | APM88xxxx | ||
0x0009 | MSM8974 | ||
0x000A | SAM5250 | ||
0x000B | Intel USIF | ||
0x000C | i.MX 6 | ||
0x000D | (déconseillé) Arm SBSA (2.x uniquement) UART générique prenant en charge uniquement les accès 32 bits | ||
0x000E | UART générique SBSA Arm | ||
0x000F | Arm DCC | ||
0x0010 | BCM2835 | ||
0x0011 | SDM845 avec une fréquence d’horloge de 1,8432 MHz | ||
0x0012 | Compatible 16550 avec les paramètres définis dans la structure d’adresse générique | ||
0x0013 | SDM845 avec une fréquence d’horloge de 7,372 MHz | ||
0x0014 | Intel LPSS | ||
0x0015 | Console SBI RISC-V (tout mécanisme SBI pris en charge) | ||
0x0016 – 0xFFFF | Réservé (pour une utilisation ultérieure) | ||
1394 | 0x8001 | 0x0000 | Interface du contrôleur d’hôte standard IEEE1394 |
0x0001 – 0xFFFF | Réservé (pour une utilisation ultérieure) | ||
USB | 0x8002 | 0x0000 | Contrôleur compatible XHCI avec interface de débogage |
0x0001 | Contrôleur conforme à EHCI avec interface de débogage | ||
0x0002 – 0x0006 | Réservé (ne pas utiliser) | ||
0x0007 – 0xFFFF | Réservé (pour une utilisation ultérieure) | ||
Net | 0x8003 | NNNN | NNNN doit être un ID de fournisseur affecté par pci valide |
0x8004 | Tous | Réservé (ne pas utiliser) | |
Réservé | 0x8005 – 0xFFFE | Tous | Réservé (pour une utilisation ultérieure) |
Remarque sur les champs de la structure d’adresse générique
La structure d’adresse générique dans BaseAddressRegister[0] est utilisée pour spécifier la largeur de bits du registre et la taille d’accès utilisées par certains sous-types série.
Les champs ID de l’espace d’adressage et Décalage du bit d’enregistrement doivent être 0.
Le champ Register Bit Width contient la foulée de registre et doit avoir une puissance de 2 qui est au moins aussi grande que la taille d’accès. Sur les plateformes 32 bits, cette valeur ne peut pas dépasser 32. Sur les plateformes 64 bits, cette valeur ne peut pas dépasser 64.
Le champ Taille d’accès permet de déterminer si les accès byte, WORD, DWORD ou QWORD doivent être utilisés. Les accès QWORD ne sont valides que sur les architectures 64 bits.
Remarque sur les UART basés sur 16550
Il existe trois sous-types d’interface qui peuvent être utilisés pour les UART basés sur 16550. Les différences entre elles sont subtiles mais importantes.
Le sous-type d’interface 0x0 fait référence à un port série qui utilise les E/S de port « hérités », comme indiqué sur les plateformes x86. Ce type doit être évité sur les plateformes qui utilisent des E/S mappées en mémoire, telles qu’ARM ou RISC-V.
Le sous-type d’interface 0x1 prend en charge les UART mappés en mémoire, mais uniquement ceux qui sont déscribables dans la table DBGP ACPI. Les implémentations de système d’exploitation peuvent traiter cela comme équivalent à un port de débogage fourni par DBGP et respecter uniquement le champ Adresse de base de la structure d’adresse générique.
Le sous-type d’interface 0x12 est le choix le plus flexible et est recommandé lors de l’exécution de systèmes d’exploitation compatibles sur de nouvelles plateformes. Ce sous-type prend en charge tous les ports série qui peuvent être décrits par les sous-types 0x0 et 0x1, ainsi que par les nouveaux ports, tels que ceux nécessitant des tailles d’accès non traditionnelles et des largeurs de bits dans la structure d’adresse générique.