작동 방식
펌웨어는 배터리, 버튼, 센서, I²C 컨트롤러, TPM처럼 운영 체제가 스스로 검색할 수 없는 장치를 ACPI 테이블로 기술합니다. 각 장치에는 제조업체 접두사와 해당 제조업체가 정한 16진수 네 자리로 구성된 하드웨어 식별자(_HID)가 있습니다.
접두사는 UEFI Forum이 두 개의 레지스트리에서 할당합니다. 세 글자로 된 PNP ID 레지스트리와 네 글자로 된 ACPI ID 레지스트리입니다. 이 도구는 두 레지스트리에서 접두사를 검색하고, Microsoft와 ACPI 사양이 정의한 표준 식별자의 경우 어떤 장치인지도 알려 줍니다.
예시
ACPI\PNP0A08Microsoft — PCI Express Root BridgeWindows 장치 관리자의 형식입니다. PNP0xxx는 모든 제조업체가 사용할 수 있는 범용 식별자입니다.ACPI\VEN_INT&DEV_33A1Intel Corporation — Intel Power Engine Plug-in (Modern Standby)Windows가 하드웨어 ID에 사용하는 VEN_/DEV_ 형식입니다. Intel은 ACPI ID 레지스트리가 생기기 전부터 INT 접두사를 사용해 왔습니다.Name (_HID, EisaId ("PNP0C0A"))PNP0C0A — Control Method Battery — EisaId 0x0A0CD041디스어셈블한 DSDT 테이블의 한 줄입니다. 이 도구는 EisaId가 생성하는 압축된 정수도 허용합니다.10EC5640Realtek Semiconductor Co., Ltd.일부 제조업체는 PCI-SIG가 할당한 공급업체 ID를 접두사로 사용합니다. 이 경우 제조업체는 PCI 카탈로그에서 가져옵니다.활용 사례
- 하드웨어 ID가 ACPI\로 시작하는 장치 관리자의 알 수 없는 장치를 식별합니다.
- _HID를 바탕으로 노트북의 센서, 버튼 또는 I²C 컨트롤러에 맞는 드라이버를 찾습니다.
- 펌웨어를 디버깅하거나 ACPI 패치를 작성할 때 DSDT 또는 SSDT 테이블에 선언된 장치를 해석합니다.
- 모니터가 EDID에서 보고하는 세 글자 제조업체 코드가 어느 회사의 것인지 알아봅니다.
자주 묻는 질문
장치의 ACPI 식별자는 어디서 찾을 수 있나요?
Windows에서는 장치 관리자에서 장치 속성을 열고 자세히 탭의 "하드웨어 ID" 속성에서 확인할 수 있습니다. Linux에서는 각 장치가 /sys/bus/acpi/devices 아래에 이름에 식별자가 포함된 폴더로 나타나며, 해당 폴더의 hid 파일에도 식별자가 들어 있습니다. acpidump와 iasl로 디스어셈블한 펌웨어 테이블에서는 각 장치의 _HID 개체입니다.
제조업체는 찾는데 장치는 찾지 못하는 이유는 무엇인가요?
UEFI Forum 레지스트리는 접두사만 할당합니다. 뒤따르는 네 자리의 의미는 각 제조업체가 정하며, PCI나 USB 같은 공개 카탈로그는 없습니다. 장치를 알 수 있는 것은 Microsoft의 PNP0xxx나 사양의 ACPI00xx 같은 표준 식별자와 널리 쓰이는 일부 식별자뿐입니다.
PNP ID와 ACPI ID의 차이는 무엇인가요?
PNP ID는 세 글자 접두사를 가지며 1990년대 플러그 앤 플레이에서 유래했습니다. 같은 코드가 EDID에서 모니터 제조업체를 식별합니다. ACPI ID는 영문자 또는 숫자 네 자리로 된 접두사를 가지며 현재 사용되는 형식입니다. 둘 다 접두사 뒤에 16진수 네 자리가 붙습니다.
압축된 EisaId란 무엇인가요?
ASL 언어에서 EisaId 매크로는 PNP ID를 32비트 정수로 변환합니다. 각 문자는 5비트를 차지하고 제품 번호는 그다음 2바이트를 차지합니다. 그래서 테이블을 디스어셈블하면 PNP0C0A 대신 0x0A0CD041 같은 숫자가 나타나기도 합니다. 이 도구는 그런 숫자를 허용하며, 모든 PNP ID의 압축 형식도 보여 줍니다.
데이터는 얼마나 자주 업데이트되나요?
이 도구는 UEFI Forum이 게시하는 ACPI ID 및 PNP ID 레지스트리의 사본을 사용하며 주기적으로 갱신합니다. 결과와 함께 해당 사본의 날짜와 접두사가 승인된 날짜가 표시됩니다.