SSDT-EC-USBX.aml: назначение, создание и настройка для Hackintosh

Отсутствие файла SSDT-EC-USBX.aml в папке EFI/OC/ACPI — одна из самых частых причин, по которой Hackintosh зависает на этапе загрузки с сообщением о AppleIntelCPUPowerManagement или не видит часть USB-портов после установки macOS. Эта ACPI-таблица решает сразу две задачи: подменяет встроенный контроллер Embedded Controller (EC), несовместимый с macOS, и задаёт корректные параметры питания для USB-портов через объект USBX.

Без корректного SSDT-EC система может вести себя непредсказуемо: не работать сон, «отваливаться» периферия, неправильно отображаться статус батареи на ноутбуках. Разберёмся, как устроена эта таблица, когда она обязательна, а когда её наличие, наоборот, навредит, и как создать файл под конкретную материнскую плату.

Что такое SSDT-EC-USBX и зачем он нужен

SSDT (Secondary System Description Table) — это дополнительная ACPI-таблица, которая загружается поверх заводского DSDT прошивки материнской платы. Загрузчик OpenCore подставляет такие таблицы до старта ядра macOS, позволяя исправить несовместимости оборудования без перепрошивки BIOS.

Файл SSDT-EC-USBX.aml объединяет два патча. Первый создаёт фиктивное устройство EC с идентификатором PNP0C09: macOS требует наличия Embedded Controller, но настоящий EC десктопных плат вызывает конфликты и панику ядра. Второй блок — объект USBX, который сообщает системе параметры питания USB: ток для портов и режимы зарядки. Без него macOS использует значения по умолчанию, что иногда ломает быструю зарядку устройств и работу портов в сне.

Когда таблица обязательна, а когда вредна

Нужен ли вам этот SSDT, зависит от типа машины и версии macOS. Универсального ответа нет — проверяйте по конфигурации.

  • 🖥️ Десктопы — SSDT-EC почти всегда обязателен: реальный EC отсутствует или несовместим, macOS ждёт устройство PNP0C09.
  • 💻 Ноутбуки — фиктивный EC применять нельзя: там есть настоящий контроллер, управляющий батареей и клавиатурой. Обычно требуется лишь переименование методов или отдельный SSDT-EC без подмены устройства.
  • 🔌 Объект USBX актуален преимущественно для Skylake и новее; на старых платформах его можно опустить.
  • ⚙️ Двойная загрузка с Windows — корректно собранный SSDT активируется только под macOS (проверка _OSI), поэтому Windows он не затрагивает.
⚠️ Внимание: установка десктопного SSDT-EC с фиктивным устройством EC на ноутбук — типичная причина неработающей батареи, клавиш яркости и сна. Для ноутбуков используйте вариант, рассчитанный на сохранение родного контроллера.

Способы получения SSDT-EC-USBX.aml

Существует три рабочих пути: скачать готовый файл из репозитория OpenCorePkg или сборок Dortania, сгенерировать таблицу утилитой SSDTTime либо скомпилировать её вручную из исходника на языке ASL.

Наиболее надёжный вариант — SSDTTime. Утилита анализирует дамп именно вашего DSDT и генерирует SSDT-EC с учётом реального пути устройства EC в прошивке. Готовые универсальные файлы работают на большинстве плат, но при нестандартных именах устройств могут не сработать.

📊 Как вы получали SSDT-EC-USBX для своей сборки?
Готовый файл из OpenCore/Dortania
Генерировал через SSDTTime
Писал и компилировал ASL вручную
Ещё не настраивал, только изучаю

Создание таблицы через SSDTTime

Утилита SSDTTime запускается из Windows, Linux или macOS и требует установленного Python. Порядок действий выглядит так:

  • 📥 Запустите SSDTTime.bat (Windows) или SSDTTime.command (macOS) от имени пользователя с нужными правами.
  • 🧩 В главном меню выберите пункт генерации SSDT-EC — утилита сама найдёт путь к EC в дампе DSDT.
  • 📂 Готовый файл появится в папке Results рядом со скриптом.
  • 📋 Скопируйте SSDT-EC.aml в EFI/OC/ACPI и добавьте запись о нём в config.plist в разделе ACPI → Add.

☑️ Проверка после добавления SSDT-EC-USBX

Выполнено: 0 / 5

После перезагрузки проверьте результат: в IORegistryExplorer должно появиться устройство EC и объект USBX, а загрузка системы — проходить без зависаний на ACPI-этапе.

⚠️ Внимание: перед любыми правками EFI сохраните заведомо рабочую копию раздела EFI на USB-флешку. Если система перестанет грузиться после добавления таблицы, вы сможете загрузиться с внешнего носителя и откатить изменение.

Ручная компиляция из ASL-исходника

Если нужен полный контроль, таблицу пишут на языке ASL и компилируют утилитой iasl. Типовой исходник содержит блок, который под macOS создаёт фиктивный EC, а для десктопов дополнительно отключает реальный контроллер через _STA, возвращая ноль.

iasl SSDT-EC-USBX.dsl

На выходе получится SSDT-EC-USBX.aml. Ошибки компиляции обычно указывают на строку с проблемой — чаще всего это неверный путь к устройству вида \_SB.PCI0.LPCB.EC, который в вашей прошивке может называться иначе (EC0, H_EC). Точный путь смотрите в дампе DSDT своей платы.

Как узнать путь к EC в своём DSDT

Снимите дамп ACPI-таблиц (например, через SSDTTime или acpidump), откройте DSDT в MaciASL и найдите устройства с HID PNP0C09. Полный путь вида \_SB.PCI0.LPCB.EC0 и нужно подставить в исходник SSDT.

Сравнение вариантов получения таблицы

СпособСложностьУчёт особенностей платыКому подходит
Готовый файл из OpenCore/DortaniaМинимальнаяНет, универсальныйНовичкам на типовых платах
Генерация через SSDTTimeНизкаяДа, анализ вашего DSDTБольшинству пользователей
Ручная правка ASL + iaslВысокаяПолный контрольОпытным, при нестандартном EC
Готовый конфиг чужой сборкиМинимальнаяРиск несовпаденияТолько при идентичной плате

Типичные ошибки и их диагностика

Самая частая проблема — таблица добавлена в папку ACPI, но не прописана в config.plist, поэтому загрузчик её просто игнорирует. Второе место занимают конфликты: одновременно подключены несколько SSDT, патчащих EC, либо включён ACPI-ренейм, который дублирует логику таблицы.

Для диагностики включите в OpenCore отладочный лог и проверьте, что таблица реально подгружается. Если после добавления SSDT появилась паника ядра — вероятнее всего, путь к устройству EC в таблице не совпадает с вашим DSDT, и файл нужно перегенерировать под конкретную плату.

Часто задаваемые вопросы

Можно ли загрузить macOS вообще без SSDT-EC?

На части плат macOS стартует и без этой таблицы, но возможны нестабильность сна, ошибки управления питанием и проблемы с USB. Для десктопных сборок корректный SSDT-EC считается обязательным элементом настройки.

Чем SSDT-EC отличается от SSDT-EC-USBX?

SSDT-EC содержит только фиктивный Embedded Controller. Версия с USBX дополнительно описывает объект питания USB-портов. Для платформ Skylake и новее обычно рекомендуют комбинированный вариант.

Нужно ли менять таблицу при обновлении macOS?

Как правило, нет: SSDT привязан к железу, а не к версии системы. Пересматривать его стоит только при смене материнской платы, обновлении BIOS с изменением ACPI или появлении специфических проблем с USB и сном.

Почему SSDTTime не находит EC на ноутбуке?

На ноутбуках EC присутствует всегда, но может называться нестандартно или находиться в другом пространстве имён. Проверьте дамп DSDT вручную через MaciASL и помните: для ноутбука фиктивный EC создавать нельзя — нужен иной тип патча.