Как это работает
С помощью таблиц ACPI прошивка описывает устройства, которые операционная система не может обнаружить самостоятельно, например батарею, кнопки, датчики, контроллеры I²C или TPM. У каждого из них есть аппаратный идентификатор (_HID), состоящий из префикса производителя и четырех шестнадцатеричных цифр, которые выбирает этот производитель.
Префиксы назначает UEFI Forum в двух реестрах: в реестре PNP ID (три буквы) и в реестре ACPI ID (четыре символа). Этот инструмент ищет префикс в обоих реестрах, а для стандартных идентификаторов, определенных Microsoft и спецификацией ACPI, также сообщает, что это за устройство.
Примеры
ACPI\PNP0A08Microsoft — PCI Express Root BridgeФормат диспетчера устройств Windows. PNP0xxx — универсальные идентификаторы, которые может использовать любой производитель.ACPI\VEN_INT&DEV_33A1Intel Corporation — Intel Power Engine Plug-in (Modern Standby)Форма VEN_/DEV_, которую Windows использует в ИД оборудования. Intel использует префикс INT еще с тех времен, когда реестра ACPI ID не существовало.Name (_HID, EisaId ("PNP0C0A"))PNP0C0A — Control Method Battery — EisaId 0x0A0CD041Строка дизассемблированной таблицы DSDT. Инструмент также принимает сжатое целое число, которое генерирует EisaId.10EC5640Realtek Semiconductor Co., Ltd.Некоторые производители используют в качестве префикса vendor ID, назначенный им PCI-SIG; в этом случае производитель берется из каталога PCI.Сценарии использования
- Определите неизвестное устройство в диспетчере устройств, ИД оборудования которого начинается с ACPI\.
- Найдите подходящий драйвер для датчиков, кнопок или контроллеров I²C ноутбука по их _HID.
- Разберитесь в устройствах, объявленных в таблице DSDT или SSDT, при отладке прошивки или написании ACPI-патча.
- Узнайте, какой компании соответствует трехбуквенный код производителя, который монитор сообщает в своем EDID.
Часто задаваемые вопросы
Где найти идентификатор ACPI устройства?
В Windows — в свойствах устройства в диспетчере устройств, на вкладке «Сведения», свойство «ИД оборудования». В Linux каждое устройство представлено папкой в /sys/bus/acpi/devices с идентификатором в имени, а сам идентификатор содержится в файле hid этой папки. В таблицах прошивки, дизассемблированных с помощью acpidump и iasl, это объект _HID каждого устройства.
Почему находится производитель, но не устройство?
Реестры UEFI Forum назначают только префикс. Значение следующих за ним четырех цифр определяет каждый производитель, и публичного каталога, как для PCI или USB, не существует. Устройство известно только для стандартных идентификаторов, таких как PNP0xxx от Microsoft или ACPI00xx из спецификации, а также для некоторых широко распространенных.
Чем PNP ID отличается от ACPI ID?
У PNP ID префикс из трех букв, и он восходит к Plug and Play девяностых годов; те же коды обозначают производителя монитора в EDID. У ACPI ID префикс из четырех букв или цифр, и это современный формат. В обоих после префикса идут четыре шестнадцатеричные цифры.
Что такое сжатый EisaId?
В языке ASL макрос EisaId преобразует PNP ID в 32-битное целое число: каждая буква занимает пять бит, а номер продукта — два следующих байта. Поэтому при дизассемблировании таблицы вместо PNP0C0A иногда встречается число вроде 0x0A0CD041. Инструмент принимает такое число и показывает сжатую форму любого PNP ID.
Как часто обновляются данные?
Инструмент использует копию реестров ACPI ID и PNP ID, которые публикует UEFI Forum, и периодически ее обновляет. Рядом с результатом показываются дата этой копии и дата утверждения префикса.