Установка Mac OS X на PC. Часть 15: Настройки загрузчика XPC

Последняя статья нашего цикла об установке Mac OS X на PC была посвящена одному из самых перспективных на сегодняшних день загрузчиков для хакинтошей — XPC от немецкого разработчика iPhoneTom. Эта задумка позволяет эмулировать на PC-компьютерах EFI-среду, в которой настоящие модули EFI могут относительно спокойно запускаться и работать; исключением не является и родной EFI-загрузчик Mac OS X boot.efi. В результате вы получаете хакинтош, который ещё больше похож на настоящий Мак, который работает более стабильно и «нативно».

При работе с XPC возникает две главные проблемы: как поставить это чудо и как его настроить под свои нужды. Про первую проблему мы говорить не рискнём: хотя за прошедшее время совместимость XPC с материнками выросла в разы, всё равно этот загрузчик куда менее универсален, нежели Chameleon. А вот про настройки загрузчика XPC поговорить стоит, именно этим мы и займёмся сегодня.

Большинство настроек загрузчика XPC записаны в файле settings.plist, лежащем в папке /EFI/XPC загрузочного носителя. Среднестатистический файл settings.plist выглядит как-то так:

[php]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

<key>OSXSettings</key>
<dict>
<key>LanguageKeyboard</key>
<string>ru:0</string>
</dict>

<key>DsdtRTCLength</key>
<integer>0</integer>

<key>PciRootOverride</key>
<string>0</string>

<key>InjectAmd</key>
<integer>0</integer>

<key>InjectNvidia</key>
<integer>0</integer>

<key>InjectIntel</key>
<integer>0</integer>

<key>ForceEnableHPET</key>
<integer>0</integer>

<key>USBFix</key>
<integer>1</integer>

<key>CustomNvidiaCard</key>
<dict>
<key>ForceCustomCard</key>
<integer>0</integer>
<key>@0,compatible</key>
<string>NVDA,NVMac</string>
<key>@0,device_type</key>
<string>display</string>
<key>@0,display_cfg</key>
<string>0xffffff</string>
<key>@0,name</key>
<string>NVDA,Display-A</string>
<key>@1,compatible</key>
<string>NVDA,NVMac</string>
<key>@1,device_type</key>
<string>display</string>
<key>@1,display_cfg</key>
<string>0xffffffff</string>
<key>@1,name</key>
<string>NVDA,Display-B</string>
<key>@2,#adress-cells</key>
<string>0x01000000</string>
<key>@2,#size-cells</key>
<string>0x00000000</string>
<key>@2,compatible</key>
<string>NVDA,sensor-parent</string>
<key>@2,device_type</key>
<string>NVDA,gpu-diode</string>
<key>@2,hwctrl-params-version</key>
<string>0x02000000</string>
<key>@2,hwsensor-params-version</key>
<string>0x02000000</string>
<key>@2,name</key>
<string>sensor-parent</string>
<key>@2,reg</key>
<string>0x02000000</string>
<key>NVCAP</key>
<string>04000000-00000300-1C000000-00000000-00000000</string>
<key>VRAM,totalsize</key>
<string>0x38000000</string>
<key>device_type</key>
<string>NVDA,GeForce</string>
<key>model</key>
<string>NVIDIA GeForce GTX 275</string>
<key>rom-revision</key>
<string>3172a</string>
</dict>

<key>CustomAmdCard</key>
<dict>
<key>ForceCustomCard</key>
<integer>0</integer>
<key>Framebuffer</key>
<string>Vervet</string>
<key>Model</key>
<string>ATI Radeon 5770 Series</string>
<key>DeviceId</key>
<string>0x68B8</string>
<key>VendorId</key>
<string>0x1002</string>
</dict>

<key>SmbiosTables</key>
<dict>
<key>Table_01</key>
<dict>
<key>Type</key>
<integer>0</integer>
<key>BiosVersion</key>
<string>MP51.007F.B00.0903051113</string>
<key>BiosVendor</key>
<string>Apple Inc.</string>
</dict>
<key>Table_02</key>
<dict>
<key>Type</key>
<integer>1</integer>
<key>Manufacturer</key>
<string>Apple Inc.</string>
<key>ProductName</key>
<string>MacPro5,1</string>
<key>Family</key>
<string>Mac</string>
<key>SerialNumber</key>
<string>G8031788GWR</string>
<key>SKUNumber</key>
<string>SKUNumber</string>
<key>Version</key>
<string>0.0</string>
</dict>
<key>Table_03</key>
<dict>
<key>Type</key>
<integer>2</integer>
<key>Manufacturer</key>
<string>Apple Inc.</string>
<key>ProductName</key>
<string>Mac-F221BEC8</string>
<key>AssetTag</key>
<string>MacPro</string>
<key>SerialNumber</key>
<string>G8031788GWR</string>
<key>LocationInChassis</key>
<string>None</string>
<key>Version</key>
<string>0.0</string>
<key>BoardType</key>
<integer>10</integer>
</dict>
<key>Table_04</key>
<dict>
<key>Type</key>
<integer>3</integer>
<key>Manufacturer</key>
<string>Apple Inc.</string>
<key>AssetTag</key>
<string>MacBla</string>
<key>SerialNumber</key>
<string>123456789</string>
<key>Version</key>
<string>0.0</string>
<key>ChassisType</key>
<integer>3</integer>
</dict>
<key>Table_05</key>
<dict>
<key>Type</key>
<integer>131</integer>
<key>ProcessorType</key>
<integer>1537</integer>
</dict>
<key>Table_06</key>
<dict>
<key>Type</key>
<integer>132</integer>
<key>ProcessorBusSpeed</key>
<integer>667</integer>
</dict>
<key>Table_07</key>
<dict>
<key>Type</key>
<integer>17</integer>
<key>Id</key>
<integer>1</integer>
<key>BankLocator</key>
<string>BANK 1</string>
<key>DeviceLocator</key>
<string>DIMM 1</string>
<key>MemoryType</key>
<integer>24</integer>
<key>Speed</key>
<integer>1333</integer>
<key>Manufacturer</key>
<string>Kingston Inc.</string>
<key>SerialNumber</key>
<string>1.KVR1333D3S9</string>
<key>PartNumber</key>
<string>1.17687434767465</string>
<key>AssetTag</key>
<string>AssetTag1</string>
<key>Size</key>
<integer>2048</integer>
</dict>
<key>Table_08</key>
<dict>
<key>Type</key>
<integer>17</integer>
<key>Id</key>
<integer>2</integer>
<key>BankLocator</key>
<string>BANK 2</string>
<key>DeviceLocator</key>
<string>DIMM 2</string>
<key>MemoryType</key>
<integer>24</integer>
<key>Speed</key>
<integer>1333</integer>
<key>Manufacturer</key>
<string>Kingston Inc.</string>
<key>SerialNumber</key>
<string>1.KVR1333D3S9</string>
<key>PartNumber</key>
<string>1.17687434767466</string>
<key>AssetTag</key>
<string>AssetTag2</string>
<key>Size</key>
<integer>2048</integer>
</dict>
<key>Table_09</key>
<dict>
<key>Type</key>
<integer>17</integer>
<key>Id</key>
<integer>3</integer>
<key>BankLocator</key>
<string>BANK 3</string>
<key>DeviceLocator</key>
<string>DIMM 3</string>
<key>MemoryType</key>
<integer>24</integer>
<key>Speed</key>
<integer>1333</integer>
<key>Manufacturer</key>
<string>Kingston Inc.</string>
<key>SerialNumber</key>
<string>1.KVR1333D3S9</string>
<key>PartNumber</key>
<string>1.17687434767467</string>
<key>AssetTag</key>
<string>AssetTag3</string>
<key>Size</key>
<integer>2048</integer>
</dict>
<key>Table_10</key>
<dict>
<key>Type</key>
<integer>17</integer>
<key>Id</key>
<integer>4</integer>
<key>BankLocator</key>
<string>BANK 4</string>
<key>DeviceLocator</key>
<string>DIMM 4</string>
<key>MemoryType</key>
<integer>24</integer>
<key>Speed</key>
<integer>1333</integer>
<key>Manufacturer</key>
<string>Kingston Inc.</string>
<key>SerialNumber</key>
<string>1.KVR1333D3S9</string>
<key>PartNumber</key>
<string>1.17687434767469</string>
<key>AssetTag</key>
<string>AssetTag4</string>
<key>Size</key>
<integer>2048</integer>
</dict>
</dict>

<key>FacpFix</key>
<dict>
<key>PMProfile</key>
<string>0x01</string>
<key>Flags</key>
<string>0x400</string>
<key>SpaceID</key>
<string>0x01</string>
<key>BitWidth</key>
<string>0x08</string>
<key>BitOffset</key>
<string>0x00</string>
<key>AccessWidth</key>
<string>0x01</string>
<key>Address</key>
<string>0x0CF9</string>
<key>Value</key>
<string>0x06</string>
</dict>

<key>SSDTHandling</key>
<dict>
<key>RemoveSSDT</key>
<integer>0</integer>
<key>CreateCST2</key>
<integer>0</integer>
<key>CreateCST3</key>
<integer>0</integer>
<key>CreateCST4</key>
<integer>0</integer>
</dict>

<key>OSXKernelSettings</key>
<dict>
<key>KernelName</key>
<string>mach_kernel</string>
<key>KernelFlags</key>
<string></string>
</dict>

<key>PlatformUUID</key>
<string>8D1FED6C-8F0D-58AC-8866-15B0A1FD6578</string>
<key>ScreenMode</key>
<integer>277</integer>

<key>DeviceProperties</key>
<string></string>

<key>DefaultBoot</key>
<string>Acpi(PNP0A08,0x0)/Pci(0x1F,0x2)/Sata(0x4,0x0,0x0)/HD(2,GPT,A2D0218B-6E24-4C3E-A691-33E062B48AB1,0x64028,0x90B64A0)\Lion</string>

</dict>
</plist>[/php]

Любого новичка такое обилие опций шокирует, что, впрочем, нормально — XPC никогда не рассматривался как простое решение. Тем не менее, разобраться во всём этом хаосе опций не так уж и трудно. Давайте двигаться по порядку:

  • LanguageKeyboard — секция, позволяющая прописать в настройки загрузчика регион клавиатуры по умолчанию. На реальных Маках эта информация хранится в памяти NVRAM, на хакинтошах её заменяет файл настроек XPC. Для русского языка нужно прописывать ru:0
  • DsdtRTCLength — опция, включающая патч RTC, предотвращающий сброс BIOS после перезагрузки или режима сна
  • PciRootOverride — принудительное указание PCI-шины по умолчанию. Опция нужна, если у вас не хочет заводиться видеокарточка
  • InjectAmd, InjectIntel и InjectNvidia — отвечают за включение/отключение автоматической заводки видеокарточек Radeon, Intel GMA и GeForce соответственно
  • ForceEnableHPET — принудительная активация HPET и управления питанием через AppleIntelCPUPowerManagement.kext. Пригодится в том случае, если у вас в DSDT не прописаны соответствующие секции
  • USBFix — исправление неработающих USB-устройств. Тоже избавляет от необходимости править USB-секции в DSDT
  • CustomNvidiaCard — задание параметров видеокарты NVIDIA вручную. Все дочерние опции берутся из видеосекции в DSDT (если, конечно, она у вас есть)
  • CustomAmdCard — задание параметров видеокарты Radeon. Этих опций не так уж и много — ID вендора и устройства, наименование и подходящий вам фреймбуфер (тут вам не обойтись без внимательного перелопачивания тем об AMD-графике на InsanelyMac, потому что подобрать нужный фреймбуфер бывает очень трудно, и приходится прибегать к методу тыка). И в секции CustomAmdCard, и в CustomNvidiaCard есть важнейший параметр ForceCustomCard. Если он равен нулю, никакого значения остальные параметры в данных секциях иметь не будут. Если вы хотите использовать свои параметры, поставьте вместо нуля единицу

Далее следует самая огромная секция параметров — SmbiosTables. Здесь собраны ключевые сведения о «железной» начинке вашего хакинтоша. Несмотря на то, что XPC самостоятельно умеет определять практически все эти параметры, качество определения на разных материнках сильно варьируется. В любом случае, всегда можно вписать то, что нужно именно вам:

  • Table_01 содержит сведения о версии EFI Мака. Сведения по настоящим Макам можно найти на сайте Apple
  • Table_02 содержит идентификатор модели Мака. MacPro5,1 вы можете заменить на iMac11,1, MacMini5,1 или любой другой идентификатор Мака, оборудование которого наилучшим образом совпадает с вашим хакинтошем. Менять здесь можно только поля ProductName и SerialNumber. Серийник нельзя брать наугад, он должен соответствовать модели. Искать серийнике надо в Гугле по выбранному вами идентификатору модели, некоторые подробности есть здесь.
  • Table_03 снова содержит серийный номер «Мака» и модель его материнки (ProductName). Модели материнок можно найти здесь.
  • Table_04 не требует редактирования содержимого
  • Table_05 задаёт сведения о марке процессора. Для Core Solo вводится 513, для Core 2 Solo нужно ввести в поле ProcessorType 257, для Core 2 Duo — 769, для Xeon (примерный эквивалент Core 2 Quad) — 1281, для Core i3 — 2305, для Core i5 — 1537, для Core i7 — 1793
  • Table_06 указывает скорость процессорной шины (ProcessorBusSpeed)
  • Table_07, 08, 09, 10 — это информация об оперативке. Вы вводите в каждой из этих таблиц номера слотов под оперативку (например, для второго слота в таблице Table_08 должно быть указано: Id — 2, BankLocator — BANK 2, DeviceLocator — DIMM 2, AssetTag — AssetTag4). Другие ключевые параметры — тип оперативки в поле MemoryType (18 означает DDR, 19 — DDR2, 20 — DDR2 FB-DIMM, 24 — DDR3), частота (поле Speed) и объём в мегабайтах (Size). Всё, что вводится в поля Manufacturer, SerialNumber, PartNumber — исключительно «косметика». Эти значения ни на что не влияют и будут отображаться только в сведениях о системе.

Завершающая часть файла настроек содержит ещё ряд опций:

  • секцию FacpFix трогать категорически не рекомендуется; она отвечает за обеспечение нормальной перезагрузки хакинтоша
  • SSDTHandling отвечает за удаление родных для материнки таблиц SSDT и принудительное использование ваших SSDT таблиц. Смысла в этом не так уж и много, на качество работы хакинтоша это редко влияет
  • OSXKernelSettings позволяет задать другое ядро (по умолчанию это файл mach_kernel в корне раздела, с которого стартует загрузка Mac OS X) и вписать для него флаги (-x для сейф-мода, -v для загрузки в текстовом режиме, arch=i386 для принудительного переключения ядра в 32-битный режим и пр. — всё, как в Хамелеоне)
  • PlatformUUID — UUID вашего хакинтоша, уникальный идентификатор оборудования, по которому Mac OS X определяет, что она работает на том же компьютере, что и раньше. Если вы меняете UUID, вы рискуете потерять активацию в iTunes Store и Mac App Store, так что будьте осторожны
  • ScreenMode — графический режим самого XPC. Посмотреть номера рабочих режимов для вашей видеокарты можно, нажав Y на экране выбора диска в XPC
  • DeviceProperties — строка для вставки старых добрых «стрингов», которыми в хакинтошном мире пользовались пару лет назад. Через стринги можно завести видеокарту, Ethernet, звук. Учтите, что если вы вставляете hex-стринг для видеокарточки в это поле, все остальные опции, касающиеся видео, в настройках XPC должны быть отключены!
  • DefaultBoot — путь к загрузочному разделу в дереве устройств. Вы вряд ли сумеете вписать его вручную, поэтому лучше полагаться на автоматику. Выберите на стартовом экране XPC нужный раздел, нажмите D, и нужное значение пропишется в данное поле

Вот и всё на сегодня. Надеемся, что информация будет полезна хакинтошникам ;)