Ранний процесс начальной загрузки
ПЗУ начальной загрузки
Когда питание к компьютеру Macintosh включено, встроенное микропрограммное обеспечение BootROM активируется. BootROM (который является частью аппаратных средств компьютера) имеет две основной ответственности: это инициализирует оборудование системы, и это выбирает операционную систему для выполнения. BootROM имеет два компонента, чтобы помочь ему выполнить эти функции:
POST (Самотестирование при включении питания) инициализирует некоторые аппаратные интерфейсы и проверяет, что достаточная память доступна и в хорошем состоянии.
EFI делает инициализацию базового оборудования и выбирает который операционная система использовать.
Если многократные установки OS X доступны, BootROM выбирает тот, в последний раз выбранный Системным Предпочтением Загрузочного диска. Пользователь может переопределить этот выбор удержанием функциональной клавиши, в то время как загрузки компьютера, который заставляет EFI отображать экран для выбора загрузочного тома.
Загрузчик
Как только BootROM закончен, и раздел OS X был выбран, управление передает boot.efi загрузчику. Основное задание этого загрузчика должно загрузить среду ядра. Поскольку это делает это, загрузчик рисует «загружающееся» изображение на экране.
Если полное шифрование диска включено, загрузчик ответственен за рисование входа в систему UI и запрос пароля пользователя, который должен был получить доступ к зашифрованному диску для начальной загрузки от него. (Этот UI нарисован loginwindow
иначе.)
В самом простом случае загрузчик может быть найден в /System/Library/CoreServices
каталог на корневом разделе, в файле называют boot.efi
.
Для ускорения времени начальной загрузки загрузчик использует несколько кэшей. Содержание и расположение этих кэшей варьируются между версиями OS X, но знающий, что некоторые подробные данные о кэшировании могут быть полезными при отладке расширений ядра.
После того, как Вы устанавливаете или изменяете расширение ядра, затрагиваете /System/Library/Extensions
каталог; система восстанавливает кэши автоматически.
В OS X v10.7, загрузчик ищет объединенное предварительно соединенное ядро. Этот кэш содержит все расширения ядра, которые могут быть необходимы для начальной загрузки Mac с любой аппаратной конфигурацией с расширениями, уже соединенными против ядра. Это расположено в /System/Library/Caches/com.apple.kext.caches/Startup/kernelcache
.
В OS X v10.6 и ранее, загрузчик сначала ищет предварительно соединенное ядро (также названный кэшем ядра). Этот кэш содержит точно набор расширений ядра, которые были необходимы во время предыдущего системного запуска, уже соединенного против ядра. Если предварительно соединенное ядро отсутствует или неприменимое (например, потому что аппаратная конфигурация изменилась), футболист ищет mkext кэш, содержащий все расширения ядра, которые могут быть необходимы для начальной загрузки системы. Используя mkext кэш намного медленнее, потому что должен быть выполнен компоновщик. На OS X v10.5 и v10.6, эти кэши расположены в /System/Library/Caches/com.apple.kext.caches/Startup/
; на предыдущих версиях OS X это было расположено в /System/Library/Caches/com.apple.kernelcaches/
.
Наконец, если кэши не могут использоваться, поиски загрузчика /System/Library/Extensions
для драйверов и других расширений ядра, чей OSBundleRequired
свойство установлено в значение, надлежащее типу начальной загрузки (например, локальная или сетевая загрузка). Этот процесс является очень медленным, потому что Info.plist
файл каждого расширения ядра должен быть проанализирован, и затем компоновщик должен быть выполнен.
Для получения дополнительной информации о том, как драйверы загружаются, видят Основные принципы IOKit, страницу руководства для kextcache
, и темы программирования расширения ядра.
Укоренение
Как только ядро и все драйверы, необходимые для начальной загрузки, загружаются, загрузчик запускает процедуру инициализации ядра. В этой точке достаточно драйверов загружается для ядра для нахождения корневого устройства.
Ядро инициализирует Маха и структуры данных BSD и затем инициализирует Набор I/O. Набор I/O соединяет загруженные драйверы в ядро, с помощью дерева устройств для определения который драйверы соединиться. Как только ядро находит корневое устройство, оно базируется (*) BSD прочь его.
Начальная загрузка [≠] Корень является технологией, позволяющей системе загружаться от раздела кроме корневого раздела. Это используется для начальной загрузки систем, где корневой раздел шифруется с помощью полного шифрования диска, или где корневой раздел расположен на устройстве, требующем дополнительных драйверов (таких как Массив RAID). Начальная загрузка [≠] Корневое использование раздел помощника, чтобы хранить файлы должен был загрузиться, такие как кэш ядра. Для получения дополнительной информации о том, как установить свойство в драйвере схемы фильтра, посмотрите Разработку Схемы Фильтра в Руководстве по программированию Драйвера Устройства массового хранения.