Зависает на «relocating modules and starting up the kernel»: причины и решение

Зависание на строке «relocating modules and starting up the kernel» — типичный симптом остановки загрузки macOS через загрузчик OpenCore на Hackintosh: текстовый лог доходит до этой фразы, после чего экран замирает или компьютер уходит в перезагрузку. Эта строка — последний этап работы самого загрузчика перед передачей управления ядру XNU, поэтому зависание именно здесь почти всегда указывает на проблему в конфигурации OpenCore, а не в установленной системе.

Хорошая новость в том, что сама macOS на диске обычно не повреждена: ядро ещё даже не начало стартовать. Плохая — диагностика требует внимательной проверки конфигурации config.plist, набора кекстов и настроек BIOS. Ниже разберём, как локализовать причину и что проверять в первую очередь.

Что означает эта строка в логе загрузки

Сообщение relocating modules and starting up the kernel выводит загрузчик OpenCore в момент, когда он закончил подготовку: применил патчи к ядру, подгрузил необходимые модули и собирается передать управление ядру macOS. Дальше должен появиться лог самого ядра — характерный «бегущий» текст с отметками времени.

Если после этой строки ничего не происходит, значит, ядро либо не получило корректное окружение для старта, либо упало с паникой до того, как успело вывести хоть что-то на экран. Ключевые подозреваемые — неверные настройки в разделе Kernel конфига, конфликтующие кексты, неправильные параметры boot-args и некорректные настройки BIOS/UEFI.

Наиболее вероятные причины зависания

По опыту сообщества Hackintosh, чаще всего остановка на этом этапе связана с ограниченным набором причин. Начинать проверку стоит с них.

  • 🔧 Неверные настройки в разделе Kernel → Quirks конфига — например, неподходящие для вашего процессора значения AppleXcpmCfgLock, DisableIoMapper или параметров, связанных с перезаписью областей памяти.
  • 🧩 Отсутствующий, устаревший или несовместимый Lilu.kext либо другие обязательные кексты, а также неверный порядок их загрузки в конфиге.
  • 💾 Проблемы с картой памяти: неправильные настройки DevirtualiseMmio, EnableWriteUnprotector, SetupVirtualMap или отсутствующие записи MMIO Whitelist.
  • ⚙️ Некорректные настройки BIOS/UEFI: включённый CFG Lock, отсутствие режима Above 4G Decoding, включённая опция Resizable BAR там, где она не поддерживается конфигурацией.
  • 🔄 Обновление macOS или OpenCore, после которого старый конфиг перестал соответствовать новой версии загрузчика или системы.

Важно понимать: точный набор «правильных» значений quirks зависит от поколения процессора и чипсета. Универсального конфига не существует — ориентиром служит официальное руководство OpenCore Install Guide (Dortania) под конкретную платформу.

Первичная диагностика: что проверить в первую очередь

Прежде чем менять конфиг, зафиксируйте, в какой момент появилась проблема. Зависание появилось на свежей установке, после обновления системы, после обновления OpenCore или после правки конфига? Ответ сильно сужает круг поиска: если проблема возникла после конкретного изменения, логично откатить именно его.

Далее включите подробный лог, если он ещё не включён. В boot-args должны присутствовать параметры -v keepsyms=1 debug=0x100. Также убедитесь, что в разделе Misc → Debug конфига задан Target со значением, включающим вывод на экран, — это позволит увидеть, на каком именно шаге останавливается загрузчик.

☑️ Первичная диагностика зависания

Выполнено: 0 / 5
⚠️ Внимание: не редактируйте config.plist обычным текстовым редактором «вслепую» и не копируйте чужие конфиги с других платформ. Используйте редакторы вроде ProperTree или OCAT, которые корректно работают со структурой plist, и сверяйте каждое изменение с документацией.

Проверка конфигурации OpenCore

Основной инструмент здесь — утилита ocvalidate, которая поставляется вместе с пакетом OpenCore. Она проверяет конфиг на синтаксические и логические ошибки относительно конкретной версии загрузчика. Запустите её, указав путь к вашему config.plist, и устраните все выявленные замечания.

./ocvalidate /путь/к/EFI/OC/config.plist

Далее сверьте раздел Kernel → Quirks с рекомендациями для вашей платформы. Особое внимание уделите параметрам, связанным с управлением памятью: ProvideCustomSlide, SetupVirtualMap, DevirtualiseMmio, EnableWriteUnprotector, RebuildAppleMemoryMap, SyncRuntimePermissions. Именно ошибки в этой группе чаще всего приводят к тому, что ядро не может стартовать после «relocating modules».

Проверьте и раздел Booter → Quirks, если он присутствует в вашей версии конфига (в новых версиях OpenCore часть настроек была перенесена между разделами — сверяйтесь с Sample.plist именно вашей версии загрузчика). Несоответствие структуры конфига версии OpenCore само по себе способно вызвать зависание.

📊 На каком этапе возникло зависание у вас?
Свежая установка macOS
После обновления macOS
После обновления OpenCore
После ручной правки config.plist

Кексты: порядок, версии, совместимость

Кексты в разделе Kernel → Add должны идти в строгом порядке: первым всегда Lilu.kext, затем плагины к нему (WhateverGreen, AppleALC и другие), после — остальные. Нарушение порядка или отключённый (Enabled = False), но фактически необходимый кекст может привести к панике ядра на самом раннем этапе.

Убедитесь, что версии кекстов совместимы с вашей версией macOS. Кекст, собранный под старую систему, после обновления ОС способен вызывать панику до появления лога ядра. Для теста можно временно отключить все необязательные кексты, оставив только Lilu и VirtualSMC (или его аналог, если он используется вашей конфигурацией), и проверить, пройдёт ли загрузка дальше проблемной строки.

Настройки BIOS/UEFI, влияющие на старт ядра

Часть причин зависания находится не в конфиге, а в прошивке материнской платы. Точные названия пунктов меню различаются у производителей, поэтому сверяйтесь с руководством к вашей плате и с OpenCore Install Guide для вашей платформы.

НастройкаТипичное требуемое состояниеНа что влияет
CFG LockОтключён (или компенсирован quirks)Управление питанием CPU, ранняя паника ядра
Above 4G DecodingВключёнРаспределение памяти, старт ядра на ряде плат
Secure BootОтключёнБлокировка неподписанного загрузчика
CSM (Compatibility Support Module)ОтключёнКорректная работа UEFI-загрузки
VT-dОтключён или компенсирован DisableIoMapperЗависания и паники на этапе инициализации

Если какая-то опция в вашем BIOS отсутствует (например, CFG Lock скрыт производителем), её функцию обычно компенсируют соответствующие quirks в конфиге — AppleXcpmCfgLock и AppleCpuPmCfgLock. Не пытайтесь модифицировать прошивку BIOS ради разблокировки скрытых пунктов: это рискованная процедура, и в большинстве случаев она не требуется.

⚠️ Внимание: сброс настроек BIOS до значений по умолчанию может вернуть включёнными Secure Boot и CSM, после чего загрузка снова остановится. После любого сброса или обновления прошивки заново выставите все необходимые параметры.
Как читать лог OpenCore при зависании

При включённом debug-режиме OpenCore сохраняет лог в файл на EFI-разделе (если задано в Target). Откройте файл opencore-*.txt и найдите последние строки перед остановкой — они укажут, какой модуль или патч обрабатывался последним. Ошибки вида «OC: ... failed» или упоминания конкретного кекста существенно сужают поиск.

Если проблема появилась после обновления

Обновление macOS нередко требует одновременного обновления OpenCore и кекстов: система меняет требования к загрузочному окружению, и старая связка перестаёт работать. Если зависание началось сразу после установки обновления, загрузитесь с резервной EFI, обновите OpenCore до актуальной стабильной версии, обновите все кексты и прогоните конфиг через ocvalidate новой версии.

Обратная ситуация — зависание после обновления самого OpenCore. Здесь типичная ошибка: перенос старого config.plist в новую версию без сверки со свежим Sample.plist. Структура конфига между версиями меняется, и устаревшие ключи могут интерпретироваться некорректно. Правильный путь — взять Sample.plist новой версии как образец и аккуратно перенести в него свои значения, сверяя каждый раздел.

Что делать, если ничего не помогло

Если после проверки quirks, кекстов и BIOS загрузка по-прежнему останавливается на той же строке, соберите минимальную рабочую конфигурацию: чистый Sample.plist под вашу платформу, только обязательные кексты и драйверы, минимальный набор quirks по официальному руководству. Если минимальная конфигурация загружается — добавляйте элементы по одному, пока не найдёте проблемный.

Параллельно стоит исключить аппаратный фактор: проверьте загрузку с другой флешки, сбросьте NVRAM через пункт Reset NVRAM в меню OpenCore, убедитесь, что SATA/NVMe-диск корректно определяется. При обращении за помощью на профильные ресурсы приложите полный лог OpenCore, фото экрана в момент зависания и точное описание железа — без этого диагностика удалённо практически невозможна.

Частые вопросы

Эта строка — ошибка или нормальная часть загрузки?

Сама по себе строка «relocating modules and starting up the kernel» — нормальное сообщение OpenCore. Проблемой она становится, только если загрузка на ней останавливается и лог ядра не появляется.

Поможет ли переустановка macOS?

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

Можно ли загрузиться без verbose-режима, чтобы не видеть эту строку?

Убрать -v из boot-args можно, но зависание никуда не денется — просто вместо текста вы увидите застывший логотип Apple. Для диагностики verbose-режим необходим.

Зависание появилось «само», без обновлений и правок. С чего начать?

Начните со сброса NVRAM и проверки настроек BIOS — они могли сброситься после обновления прошивки или сбоя питания. Затем проверьте конфиг через ocvalidate.

Подойдёт ли конфиг с такой же материнской платой, но другим процессором?

Только как отправная точка. Набор quirks и кекстов зависит от поколения CPU, видеокарты и периферии, поэтому чужой конфиг нужно адаптировать под своё железо по официальному руководству.