Зависание на строке «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 со значением, включающим вывод на экран, — это позволит увидеть, на каком именно шаге останавливается загрузчик.
☑️ Первичная диагностика зависания
⚠️ Внимание: не редактируйте 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 само по себе способно вызвать зависание.
Кексты: порядок, версии, совместимость
Кексты в разделе 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, видеокарты и периферии, поэтому чужой конфиг нужно адаптировать под своё железо по официальному руководству.