Microsoft 디버그 포트 테이블 2(DBG2)
이 사양은 시스템에서 사용할 수 있는 디버그 포트를 설명하기 위해 플랫폼 펌웨어에 사용되는 DBG2(디버그 포트 테이블 2)의 형식을 정의합니다. 이 정보는 Windows 8 이상 운영 체제에 적용됩니다.
여기에 설명된 참조 및 리소스는 이 문서의 끝에 나열되어 있습니다.
특허 고지: Microsoft는 다음 두 가지 옵션에 따라 이 사양의 구현에 사용할 수 있는 특정 특허 권한을 제공합니다.
- Microsoft의 커뮤니티 프라미스, 에서 사용 가능
https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
- Open Web Foundation 최종 사양 계약 버전 1.0("OWF 1.0")은 2012년 10월 1일 현재 에서
http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0
사용할 수 있습니다.
문서 기록
Date | 변경 |
---|---|
2011년 11월 29일 | 첫 번째 발행물입니다. |
2012년 5월 22일 | Windows 8 지원되는 최종 플랫폼당 표 3으로 업데이트. |
2015년 8월 10일 | 특허 고지가 업데이트되었습니다. |
2015년 10월 6일 | 새 직렬 디버깅 하위 유형이 추가됨(Arm SBSA UART, Arm DCC) |
2015년 12월 10일 | 새 직렬 디버깅 하위 유형이 추가됨(BCM2835) |
2017년 5월 31일 | 새 직렬 디버깅 하위 유형(i.MX6, 일반 주소 구조 16550 호환)이 추가되었습니다. |
2020년 6월 11일 | 새 직렬 디버깅 하위 유형이 추가됨(SDM845v2) |
2020년 9월 1일 | 문서를 Markdown 구문으로 변환하고 서식을 변경합니다. |
2020년 9월 21일 | IALPSS(새 직렬 디버깅 하위 형식)가 추가됨 |
2021년 2월 17일 | 알려진 모든 직렬 디버깅 하위 형식 문서화 |
2023년 4월 10일 | 새 직렬 디버깅 하위 유형(RISC-V)이 추가되고 16550 호환 하위 유형에 대한 명확한 정보가 추가되었습니다. |
소개
Microsoft는 모든 시스템에 디버그 포트가 필요합니다. 플랫폼에서 사용할 수 있는 디버그 포트를 설명하기 위해 Microsoft는 운영 체제별 테이블(DBG2)을 정의합니다. 이 표에서는 디버깅을 위해 하나 이상의 독립 포트를 지정합니다. 디버그 포트 테이블이 있으면 시스템에 디버그 포트가 포함되어 있음을 나타냅니다. 테이블에는 디버그 포트의 구성에 대한 정보가 포함되어 있습니다. 테이블은 다른 ACPI(고급 구성 및 전원 인터페이스) 테이블이 있는 시스템 메모리에 있으며 ACPI RSDT(루트 시스템 설명 테이블)에서 참조해야 합니다.
DBG2 테이블은 DBGP를 사용하여 디버그 포트 구현을 설명할 수 없는 플랫폼의 ACPI DBGP(디버그 포트 테이블)를 대체합니다.
디버그 포트 테이블 2(DBG2)
표 1. 포트 테이블 2 형식 디버그
표 1은 DBG2의 필드를 정의합니다.
필드 | 바이트 길이 | 바이트 오프셋 | Description |
---|---|---|---|
헤더 | |||
서명 | 4 | 0 | 'DBG2'. 디버그 포트 테이블 2에 대한 서명입니다. |
길이 | 4 | 4 | 전체 디버그 포트 테이블 2의 길이(바이트)입니다. |
수정 버전 | 1 | 8 | 이 버전의 사양에서는 이 값이 0입니다. |
체크섬 | 1 | 9 | 전체 테이블의 합계는 0이어야 합니다. |
OEM ID | 6 | 10 | OEM(원본 장비 제조업체) ID입니다. |
OEM 표 ID | 8 | 16 | 디버그 포트 테이블 2의 경우 테이블 ID는 제조업체 모델 ID입니다. |
OEM 수정 버전 | 4 | 24 | 제공된 OEM 테이블 ID에 대한 디버그 포트 테이블 2의 OEM 수정 버전입니다. |
작성자 ID | 4 | 28 | 표를 만든 유틸리티의 공급업체 ID입니다. |
작성자 수정 | 4 | 32 | 표를 만든 유틸리티의 수정 버전입니다. |
OffsetDbgDeviceInfo | 4 | 36 | 이 테이블의 시작 부분에서 첫 번째 디버그 디바이스 정보 구조 항목까지 오프셋(바이트)입니다. |
NumberDbgDeviceInfo | 4 | 40 | 디버그 디바이스 정보 구조 항목의 수를 나타냅니다. |
디바이스 정보 구조 디버그[NumberDbgDeviceInfo] | 변수 | OffsetDbgDeviceInfo | 이 플랫폼에 대한 디버그 디바이스 정보 구조 목록입니다. 구조체 형식은 이 문서의 뒷부분에 있는 디버그 디바이스 정보 구조 섹션에 정의되어 있습니다. |
디바이스 정보 구조 디버그
표 2. 디바이스 정보 구조 형식 디버그
필드 | 바이트 길이 | 바이트 오프셋 | Description |
---|---|---|---|
수정 버전 | 1 | 0 | 디버그 디바이스 정보 구조의 수정 버전입니다. 이 버전의 사양의 경우 0이어야 합니다. |
길이 | 2 | 1 | NamespaceString 및 OEMData를 포함하여 이 구조체의 길이(바이트)입니다. |
NumberofGenericAddressRegisters | 1 | 3 | 사용 중인 제네릭 주소 레지스터의 수입니다. |
NamespaceStringLength | 2 | 4 | NUL 문자를 포함하여 NamespaceString의 길이(바이트)입니다. |
NamespaceStringOffset | 2 | 6 | 이 구조체의 시작부터 NamespaceString[]필드까지 오프셋(바이트)입니다. 이 문자열이 있어야 하므로 이 값은 유효해야 합니다. |
OemDataLength | 2 | 8 | OEM 데이터 블록의 길이(바이트)입니다. |
OemDataOffset | 2 | 10 | 이 구조체의 시작 부분에서 OemData[] 필드까지 오프셋(바이트)입니다. OEM 데이터가 없으면 이 값은 0이 됩니다. |
포트 유형 | 2 | 12 | 이 디버그 디바이스에 대한 디버그 포트 유형입니다. 이러한 각 값은 표 3에 표시된 대로 해당 하위 형식 값을 갖습니다. |
포트 하위 형식 | 2 | 14 | 이 디버그 디바이스에 대한 디버그 포트 하위 형식입니다. 표 3을 참조하세요. |
예약됨 | 2 | 16 | 예약됨, 0이어야 합니다. |
BaseAddressRegisterOffset | 2 | 18 | 이 구조체의 시작부터 BaseaddressRegister[]필드까지 오프셋(바이트)입니다. |
AddressSizeOffset | 2 | 20 | 이 구조체의 시작부터 AddressSize[] 필드까지 오프셋(바이트)입니다. |
BaseAddressRegister[] | (NumberofGenericAddressRegisters) * 12 | BaseAddressRegisterOffset | 제네릭 주소의 배열입니다. |
AddressSize[] | (NumberofGenericAddressRegisters) * 4 | AddressSizeOffset | 위의 각 제네릭 주소에 해당하는 주소 크기의 배열입니다. |
NamespaceString[] | NamespaceStringLength | NamespaceStringOffset | 이 디바이스를 고유하게 식별하기 위해 NUL로 종료된 ASCII 문자열입니다. 이 문자열은 ACPI 네임스페이스에서 이 디바이스를 나타내는 개체에 대한 정규화된 참조로 구성됩니다. 네임스페이스 디바이스가 없는 경우 NamespaceString[]에는 단일 ''만 포함되어야 합니다. (ASCII 기간) 문자입니다. |
OemData[] | OemDataLength | OemDataOffset | 선택적 가변 길이 OEM 관련 데이터입니다. |
표 3. 포트 유형 및 하위 형식 디버그
포트 | 형식 | Subtype | Description |
---|---|---|---|
예약됨 | 0x0000 – 0x7FFF 및 0xFFFF | 모두 | 예약됨(사용하지 않음) |
직렬 | 0x8000 | 0x0000 | 완전 16550 호환 |
0x0001 | DBGP 수정 버전 1과 호환되는 16550 하위 집합 | ||
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만 해당) 32비트 액세스만 지원하는 일반 UART | ||
0x000E | Arm SBSA Generic UART | ||
0x000F | Arm DCC | ||
0x0010 | BCM2835 | ||
0x0011 | 클록 속도가 1.8432MHz인 SDM845 | ||
0x0012 | 제네릭 주소 구조에 정의된 매개 변수와 호환되는 16550 | ||
0x0013 | 클록 속도가 7.372MHz인 SDM845 | ||
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 할당 공급업체 ID여야 합니다. |
0x8004 | 모두 | 예약됨(사용하지 않음) | |
예약됨 | 0x8005 – 0xFFFE | 모두 | 예약됨(향후 사용) |
일반 주소 구조의 필드에 대한 참고 사항
BaseAddressRegister[0]의 제네릭 주소 구조체는 일부 직렬 하위 형식에서 사용되는 레지스터 비트 너비 및 액세스 크기를 지정하는 데 사용됩니다.
주소 공간 ID 및 레지스터 비트 오프셋 필드는 0이어야 합니다.
레지스터 비트 너비 필드는 레지스터 보폭을 포함하며 액세스 크기만큼 큰 2의 힘이어야 합니다. 32비트 플랫폼에서 이 값은 32를 초과할 수 없습니다. 64비트 플랫폼에서 이 값은 64를 초과할 수 없습니다.
액세스 크기 필드는 바이트, WORD, DWORD 또는 QWORD 액세스를 사용할지 여부를 결정하는 데 사용됩니다. QWORD 액세스는 64비트 아키텍처에서만 유효합니다.
16550 기반 UART에 대한 참고 사항
16550 기반 UART에 사용할 수 있는 세 가지 인터페이스 하위 형식이 있습니다. 둘 사이의 차이는 미묘하지만 중요합니다.
인터페이스 하위 형식 0x0 x86 기반 플랫폼에서 볼 수 있듯이 "레거시" 포트 I/O를 사용하는 직렬 포트를 나타냅니다. ARM 또는 RISC-V와 같은 메모리 매핑 I/O를 사용하는 플랫폼에서는 이 형식을 사용하지 않아야 합니다.
인터페이스 하위 유형 0x1 메모리 매핑된 UART를 지원하지만 DBGP ACPI 테이블에서 설명할 수 있는 UART만 지원합니다. 운영 체제 구현은 이를 DBGP 제공 디버그 포트와 동일하게 처리하고 일반 주소 구조의 기본 주소 필드만 적용할 수 있습니다.
인터페이스 하위 유형 0x12 가장 유연한 선택이며 새 플랫폼에서 호환되는 운영 체제를 실행할 때 권장됩니다. 이 하위 형식은 0x0 및 0x1 하위 형식으로 설명할 수 있는 모든 직렬 포트뿐만 아니라 일반 주소 구조에서 기존의 액세스 크기 및 비트 너비가 필요한 포트와 같은 새 포트를 지원합니다.