Как исправлять ошибки в dsdt


Technical background

DSDT — Differentiated System Description Table — is the biggest and most complex ACPI table. The minimal length is 36 bytes, in reality it is about 20 kb or even more. This table describes devices and methods for accessing them. These methods can contain arithmetic and logical expressions, representing a program written in a C-like programming language. Correcting this table means you need to have some sort of programming knowledge. Clover offers an option to automatically apply corrections, however it is important to understand that an artificial intelligence was not created yet and that the automatic method is far from being complete. It is better to do the corrections manually.
Why does it need to be fixed at all? DSDT patching was created with the intention to fix device HPET — High Precision Events Timer. The point is that OS X includes a kext named AppleIntelCPUPowerManagement for power management control (SpeedStep), which — by all means — needs interrupts IRQ 0 and 8. Otherwise it will create a kernel panic. This kext can either be removed or blocker, however you can alternatively correct the DSDT to ensure a normal behaviour of this kext.

Nr. 1 : This is a necessity. Does Mac OS X really need HPET? Not really, but BIOS vendors tend to be slow and they just started writing the correct parameters. Usually a DSDT will still need to be corrected.

Nr. 2 : A DSDT contains certain dependencies on the operating system like Windows 98, Windows 2001, Windows 2006 or Linux. Mac OS X uses identifier Darwin, which usually is missing. Even if it is not, it was created for FreeBSD. Mac OS X makes great use of the ACPI system and uses a DSDT to its maximum, as does Windows 2001; but not Linux, Windows 98 and not Windows 2006. It is always correct to mask the system as Windows 2001. Even if you find Darwin in your DSDT, mask it as Windows2001.
New computers have ACPI more like Windows 2009. For this case Clover has a fix FixDarwin7
Many BIOS variants can use the variable OSYS = 0x07D2, but not 0x07D6, 0x07D9 or 0x2410 as written into a real Mac’s DSDT.

Nr. 3 : The vendor of a motherboard’s and thus the creator of a DSDT, cannot predict the devices you will be using (CPU, video card, etc.). They should be written into the DSDT however! Vice versa, devices like the internal speaker, floppy drive or parallel port should be excluded. Their drivers do not exist and are not even needed. Additionally it is often necessary to add or remove framebuffers/ports to devices like video cards or SATA controllers.
The DSDT is is written into the BIOS and is used by the system in AML binary code. It can be de-/compiled using IASL, which translates binary code into human readable DSL source code. A user will use this path to apply corrections: AML>DSL>edit>DSL>AML — this is the next point.

Nr. 4 : The last part is made impossible because of syntax and logical errors initially present in the OEM DSDT. You will need to correct them, too. Additionally, you can fix other mistakes, which prevent the PC from sleeping or waking up, or add new devices. (It is a bit strange, compiling/decompiling is not a strictly reversible operation and will change the table or even prevent further compiler operations. From my point of view the compiler is not bug-free. Non-conformance to the specification, however, should be considered as a warning, not as an error).

When you reached this step you can instruct Clover to use your modified DSDT by placing it into the directory EFI/CLOVER/OEM/xxx/ACPI/patched or — when the computer’s name is not known yet — into EFI/CLOVER/ACPI/patched. Alternatively the OS can have its own DSDT in the root of the system partition.
Where can you obtain the initial DSDT that needs to be patched? There are different ways involving Windows, Linux or OS X. If you were able to start Clover somehow, you can enter its GUI and press F4. If Clover was installed on a FAT32 partition, then it will be able to save all ORM ACPI tables, including DSDT and FADT. The process can take a while, especially when saving many tables to a USB flash drive. This is especially useful when you have no access to other means of extracting the table set, for example with AIDA64. Also you can save the patched DSDT variant: enter Options in CloverGUI, change the DSDT mask, exit Options and press F5. A DSDT with the specified patches will be saved, which are represented in the file name, for example: DSDT-F597.aml. You can save multiple variants for comparison.
Now you can edit the DSDT and if you are not really comfortable doing this, Clover offers some automatic patches:


DSDT mask



AddDTGP bit(0)

For injecting device properties you can — apart from DeviceProperties — use a variant involving method _DSM (Device Specific Method), which is written into the DSDT table. _DSM is widely used since OS X 10.5. It contains properties for a device and makes use of the method DTGP, which is universal for all devices. This fix simply adds the DTGP method for later use with other fixes. It has no significance on its own.


FixDarwin bit(1)

Provide a set of corrections to DSDT to make your system «Darwin» identified as «Windows 2001» like the most ACPI system. More ACPI devices will work in this mode.


FixDarwin7 bit(16)

Provide a set of corrections to DSDT to make your system «Darwin» identified as «Windows 2009». More ACPI devices will work in this mode. Recommended for IvyBridge and up hardware.


FixShutdown bit(2)

A condition is added to method _PTS: if the argument is 5 (shutdown), then no other actions shall be performed. Many reports confirmed this option to fix shutdown issues with ASUS boards, maybe even with other vendors. Some DSDT tables already contain such a condition and it is advised to turn the fix off in this case.


AddMCHC bit(3)

Added device MCHC to DSDT. For board H61M this is obligatory, else KP.


FixHPET bit(4)

Add IRQ(0, 8, 11) to device HPET. Obligatory for SandyBridge and recommended for others.


FakeLPC bit(5)

Changes the DeviceID of the LPC controller to allow the loading of kext AppleLPC. This fix is necessary when the chipset is not recognised by OS X. However, the list of supported Intel and NForce chipsets is so big that the fix is rarely needed. Verify if AppleLPC is loaded and use this fix, if it is not. Moreover, the kext can unload itself even if the chipset is supported.


FixIPIC bit(6)

Removes the interrupt from device IPIC. Helpful for Power button will work.


FixSBUS bit(7)

Adds an SMBusController to the device tree, which fixes a warning about its absence in the system log. Helps to sleep/wake.


FixDisplay bit(8)

Create device GFX0 if still absent. It is needed for correct Power Management but the device is usually absent in DSDT because it is not a part of the motherboard. Added also device HDAU that is HDMI sound device on the videocard. If we set FakeID in config.plist it will be inserted here. Intel video will be patched separately.


FixIDE bit(9)

10.6.1 introduces a kernel panic related to AppleIntelPIIXATA. There are two options to solve the problem: using a patched kext or patching the DSDT. Probably not needed for recent systems.
Not recommended.


FixSATA bit(10)

Fixes several SATA problems and removes yellow hard drive icons by masking the controller as ICH6. The method is controversial but it can fix the DVD drive and simply replacing the hard drive icons is not enough in this case. An alternative is to patch the kext AppleAHCIPort.kext.
Not recommended.


FixFirewire bit(11)

Add device Firewire into DSDT if absent and if the device really present. Adds the property fwhub to the device.


FixUSB bit(12)

Tries fixing USB the countless USB issues for USB1.0, USB2.0 and USB3.0.


FixLAN bit(13)

Injects the property built-in to the Ethernet card, which is necessary for correct operation. Additionally injects the card’s name for a better looking System Profiler. Also made FakeID for some known substitutions.


FixAirport bit(14)

Same as above for WiFi. Furthermore, the actual device is created and written into DSDT. A DeviceID will automatically written for known cards to enable airport functionality. Not recommended.


FixHDA bit(15)

Corrects sound card properties to enable the native AppleHDA driver. The name is changed from AZAL to HDEF, layout-id and PinConfiguration are injected. Adding HMDI device if absent.


FixRTC

Exclude IRQ(0) from RTC device.


FixTMR

Exclude IRQ(8) from TMR device. This is ancient DOS device and not needed in modern computers. Just wonder it present.


AddIMEI

This device is used for IntelHDxxx graphics. Adding them if very desirable operation. This bit also needed for use FakeID->IMEI. Do nothing for Core 2 systems.


FixIntelGfx

Correct device class for the IGPU from 038000 to display class 030000


FixWAK

adding Return(Package(0)) into method _WAK if absent. This patch is for warning elimination. I don’t know about working influence.


DeleteUnused

There are not used devices like Floppy drive, LPT port and others that will be good to delete from DSDT to not occupy interrupts.


FixADP1

Rename AC0 device to ADP1 device.


AddPNLF

Adding device PNLF is very useful: only with it you may have brightness control. This patch is also influence on good Sleep/Wake of the system.

In my case there are:
DSDT_FIX: AddPNLF
OEM SSDT NvdTable, but _DSM -> ZDSM corrected by Clover. No new _DSM
No additional kexts.

A trick to assign keys to reduce/increase brightness:

  1. Insert temporarily USB keyboard
  2. Control Panel -> Keyboard -> Shotcuts -> Screen (appeared due to USB keyboard)
  3. Assign F1 to Reduce brightness and F2 to Increase. No other combinations!
  4. After removing the USB keyboard assigning will continue working.

FixS3D

Also resolving some Sleep/Wake problems by correcting _S3D methods.


FixACST

Name ACST have different use for Apple and for ASUS. For ASUS it is AC adapter state. For Apple it is a replacement for _CST, c-states table. To not conflict it is needed to rename such names to something else.


FixRegions

Address of some regions in DSDT depends on many factors and may change time to time

OperationRegion (GNVS, SystemMemory, 0xDE6A4E18, 0x01CD)

The presence of floating regions make impossible to use custom DSDT because this region may be shifted and will not correspond to current state. This patch is intended to find all such regions in BIOS and correct them in custom DSDT. So now you can produce your custom DSDT with wrong regions and set this patch.


Choosing the right mask

How can you choose the necessary patches and how do you know which ones are harmless or dangerous? The computer will not be harmed either way. All the changes are stored memory only and will be removed after rebooting.
You can try setting different combinations in CloverGUI and save them by pressing F5 in the Options menu.
To make sure the currently patched DSDT is not creating a conflict, you can change the DSDT name in the menu — DSDT name: BIOS.aml. This file will not be found, Clover will extract the original OEM DSDT from BIOS and apply fixes set in the DSDT mask section. In case the OS did not load successfully, your previously set (working) values will be used.
0xFFFFFFFF enables all fixes and if the OS loads successfully this way, you will know that our efforts were not for nothing. Given the descriptions above you already realised that some fixes are not needed for your system (for example WiFi), they can even make things worse.

You may make patched DSDT once with full mask. Then correct patched DSDT manually. Then use this manually patched DSDT.aml loading but set FixRegions (10000000) only. The mask will be 0x10000000

DSDT (Different System Description Table) — Таблица Дифференцирования Описания Системы, т.е. это таблицы, в которых описывается как наша система и наши устройства должны работать и где их найти.

В каждом компьютере этот DSDT храниться в BIOS системы, и так система понимает с чем она имеет дело. Но Mac OS X не знает что такое BIOS и поэтому просто не может получить к нему доступ и узнать, что же у нас есть в системе. Поэтому мы должны объяснить Mac OS X, и рассказать ей, что же в нашей системе есть и как же оно будет работать.

Ни в коем случае нельзя использовать DSDT другого компьютера у себя, так как у вас или не загрузиться Mac OS X, или же не определяться устройства, или же есть шанс повредить компьютеру.

Получаем DSDT в Windows

Для этого нам необходим некоторый инструментарий. С Windows проще. Необходима всего лишь FinalWire AIDA64.

Необходимо нажать правой кнопкой на строке состояния. Именно внизу, возможно левее от середины экрана. И должно появиться меню как на рисунке и выбрать в меню пункт ACPI Tool.

Нажимаем кнопку Save DSDT. И указываем куда сохранять этот файл. Дайте ему имя dsdt. После нажатия на кнопку “Save DSDT” у нас появиться файл dsdt.bin.

Нажимаем кнопку Save DSDT. И указываем куда сохранять этот файл. Дайте ему имя dsdt. После нажатия на кнопку “Save DSDT” у нас появиться файл dsdt.bin.

Переименовываем этот файл в dsdt.aml и вот это наш dsdt.aml.

Получили DSDT. Что дальше?

Вот так мы получили DSDT, но это еще не все. Перед редактированием или каким либо изменением нужно исправить в нем все ошибки и скомпилировать. Для этого нам понадобиться программа DSDT SE. Это редактор для редактирования DSDT файлов, а также компилирование их.

Начнем. Запускаем наш DSDT SE и открываем ранее полученный dsdt файл. Чтобы открыть файл, нужно или войти в меню File-> Open .aml.

Слева главное окно нашего DSDT SE, которое вы видели ранее. справа окно редактора, в котором открытый нами файл. Вот в нем мы и будем работать основное время.

Слева главное окно нашего DSDT SE, которое вы видели ранее. справа окно редактора, в котором открытый нами файл. Вот в нем мы и будем работать основное время.

Дело в том что вот этот текст, который мы редактируем, нужно перевести в такой вид чтобы наша Mac OS поняла его и внесла изменения. Для этого необходимо сделать компиляцию. Естественно это делается с помощью кнопки Compile DSDT.

  • Поле Locate используеться для быстрого перехода в большом файле по секциям. Каждая секция отвечает за свою функциональность и свою часть устройств.
  • Поле Search необходимо для поиска какого либо слова. Дело в том что если ввести слово и нажать Search, то он найдет только первое его совпадение. Если нажать на Next, то последующие совпадения.
  • Поле Replace соответственно для замены слова, которое мы ищем на слово, которое введем в поле Replace.
  • Поле Go to line используеться для быстрого перехода на нужную строку.

Теперь приведем наш dsdt файл в порядок. Нажимаем на кнопку Compile DSDT. У нас отображаеться окно с ошибками в нашем dsdt.

Intel ACPI Component Architecture

ASL Optimizing Compiler version 20091214 [Dec 16 2009]

Copyright (C) 2000 — 2009 Intel Corporation

Supports ACPI Specification Revision 4.0

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 10618:             Method (GLCS, 1, NotSerialized)

Warning  1088 —                                                       Not all control paths return a value ^  (GLCS)

Это значит что ваш метод должен возвращать значение, а не возвращает. Достаточно в конце метода написать Return (0x00) и ошибка исправлена.

Intel ACPI Component Architecture

ASL Optimizing Compiler version 20091214 [Dec 16 2009]

Copyright (C) 2000 — 2009 Intel Corporation

Supports ACPI Specification Revision 4.0

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 10618:             Method (GLCS, 1, NotSerialized)

Warning  1088 —                                                       Not all control paths return a value ^  (GLCS)

Это значит что ваш метод должен возвращать значение, а не возвращает. Достаточно в конце метода написать Return (0x00) и ошибка исправлена.

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 13331:         Method (OCRT, 1, NotSerialized)

Warning  1088 —                                                   Not all control paths return a value ^  (OCRT)

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 13503:         Method (OCR2, 1, NotSerialized)

Warning  1088 —                                                   Not all control paths return a value ^  (OCR2)

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 13503:         Method (OCR2, 1, NotSerialized)

Warning  1088 —                                                   Not all control paths return a value ^  (OCR2)

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 15986:                                 Name (_T_0, Zero)

Remark   5111 —                                                                                Use of compiler reserved name ^  (_T_0)

Это значит что вы используетет уже зарезервированое имя. То есть достаточно убрать подчеркивание спереди и все.

Исходный код:

Исправленный код:

Исправленный код:

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16538:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16552:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16567:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16552:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16567:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16582:             Acquire (MUTE, 0x0FFF)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16596:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16611:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16626:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 16626:             Acquire (MUTE, 0x03E8)

Warning  1105 —                                                                Possible operator timeout is ignored ^ 

~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 17506:                     And (CTRL, 0x1E)

Warning  1106 —                                                      Result is not used, operator has no effect ^ 

ASL Input:  ~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl — 18351 lines, 510844 bytes, 7281 keywords

AML Output: ~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/./dsdt.aml — 61573 bytes, 1884 named objects, 5397 executable opcodes

Compilation complete. 0 Errors, 11 Warnings, 1 Remarks, 2612 Optimizations

По окончанию редактирования и исправления ошибок вы получите чистый dsdt.aml файл, который можно будет установить в систему для дальнейшего использования и редактирования. этот файл что у вас получился, сохраните для будущего редактирования и сделайте копию.

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20091214 [Dec 16 2009]
Copyright (C) 2000 — 2009 Intel Corporation
Supports ACPI Specification Revision 4.0


ASL Input:  ~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl — 18351 lines, 510933 bytes, 7284 keywords
AML Output: ~/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/./dsdt.aml — 61582 bytes, 1884 named objects, 5400 executable opcodes


Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 2615 Optimizations

При выходе из редактора согласимся сохранить файл dsdt.dsl в окне «Save .dsl».

Всем привет.

Хочу отремонтировать DSDT таблицы у своего ноутбука. Но никак не могу найти решения двух вопросов:

  1. Как вести отладку
  2. Нужна русская литература

1)

Писать из ACPI в dmesg довольно просто, но не понятно, как получить информацию об ошибках на подобие traceback. Например здесь:

ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [_S1_] (20150410/hwxface-580)

Ошибка есть, но как понять почему не найден? Где искал?

Увеличение уровня логов ACPI выводит тонны сообщений, вида:

[   23.213726]   exutils-0136 ex_exit_interpreter   : ----Exit-
[   23.213732]    nseval-0324 ns_evaluate           : ----Exit- AE_OK
[   23.213735]  utobject-0461 ut_get_simple_object_s: ----Entry ffff880000083b88
[   23.213739]  utobject-0564 ut_get_simple_object_s: ----Exit- AE_OK
[   23.213742]    utcopy-0398 ut_copy_iobject_to_eob: ----Entry
[   23.213745]    utcopy-0118 ut_copy_isimple_to_esi: ----Entry

но не понятно где и в каких блоках/методах это всё происходит.

Давно с переменным успехом борюсь с ASPM, уже не на первом ноуте.

_SB_.PCI0:_OSC invalid UUID

Выводил значения входящих аргументов метода _OSC, возвращаемые значения — появилось ещё больше вопросов: как работают эти методы, почему вызываются только один раз, когда PCIe устройств целая куча: на одних ASPM автоматически включается, на других нет, а сообщения от метода приходят только один раз. При этом спецификация говорит, что «The OS is permitted to evaluate _OSC an arbitrary number of times».

Хочу исправить другие косяки биосаписателей, например:

ACPI Warning: SystemIO range 0x0000000000002000-0x000000000000201F conflicts with OpRegion 0x0000000000002000-0x000000000000200F (_SB_.PCI0.SBUS.SMBI) (20150410/utaddress-254)

Для всего этого требуется что-то вроде traceback. Или есть хорошие решения для отладки?

2)

ACPI спецификация составлена хорошо, на многие вопросы нашёл ответы, но тем не менее хочется какого-нибудь русскоязычного руководства. В русских интернетах почти все найденые мною блоги и форумы сводятся к решению ошибок компиляции DSDT таблиц для установки проприетарщины, которую я не хочу здесь упоминать. Ничего толкового.

Прошу русское сообщество линуксоводов помочь в решении этих вопросов. Спасибо всем, кто может поделиться знаниями или дать хорошие ссылки.

Сержант

  • Группа:Администраторы
  • Сообщений:39
  • Регистрация:25.07.2011
  • 5

Предисловие

Для того, чтобы завести некоторые функции в OS X (в особенности на ноутбуках), мы вынуждены прибегать к изменению DSDT и SSDT. В этом мануале мы расскажем основополагающие понятия работы с вашими оригинальными файлами ACPI.

Вы, конечно, можете использовать чужой DSDT и прочие файлы (config.plist, какие-то кастомные кексты), но это не гарантирует полноценной работоспособности, и даже наоборот приводит к непонятным, жутким, дичайшим багам. Вы банально не можете проверить происхождение этих файлов, и разобраться в них вы тоже вряд ли сможете. Любое маленькое изменение в настройках биоса, любое маленькое отличие по железу (будь то даже жёсткий диск другой модели), приводит к трагическим последствиям, вплоть до чрезмерного накала процессора, ведущего к износу компонентов железа.

Поэтому, давайте договоримся сразу – используем только оригинальные файлы, к которым причастны только производитель и мы.

Основные принципы работы с ACPI:

Основные, и в то же время эталонные принципы работы с DSDT:
Всегда использовать только оригинальные таблицы;
Нельзя брать таблицы из программ, наподобие AIDA64 или подобных, поскольку они подхватывают DSDT, который уже отредактирован загрузчиком операционной системы, а так же нельзя использовать патченный DSDT какими-либо программами, типа DSDTPatcher. Только оригинал, правленный руками, может выступать в качестве вашей основы для корректировки.
Никогда не брать чужие DSDT в сети;
Потому что даже из-за одного несовпадения значения в биосе, дсдт может работать криво, и вы не разберетесь в синтаксисе другого человека. А бед это может принести немало.
Используйте только MaciASL;
Никаких DSDTEditor, DSDTPatcher, и прочих программ. Ничего, кроме MaciASL. Актуальная версия лежит здесь.
Процесс патчинга происходит в несколько этапов:
Извлечение оригинальных файлов;
Разбор (disassembling) нативных файлов;
Анализ и фильтрация;
Патчинг;
Компилирование, и установка файлов.
Также, в статье есть несколько лайфхаков, как можно подправить некоторые вещи. Список “Якорей”:

Извлечение оригинальных файлов:
Patchmatic;
Clover (F4);
Linux.
Сборка iASL-декомпилятора через терминал;
Исправление проблемы с просыпанием компьютера.

Начинаем.

1. Извлечение оригинальных файлов.

Любой биос сообщает ACPI-таблицы операционной системе. Следовательно, их можно извлечь из любой ОС, для дальнейшей работы по корректировке файлов.
Успешное извлечение возможно в Linux, OS X, Windows, а так же с помощью Clover’а. Нативные файлы в целом идентичны, но могут иметь различные названия (в зависимости от софта). В этой статье мы сфокусируемся на трёх методах извлечения: Используя patchmatic в OS X; Используя Clover; Используя Debian-образный Linux.

Рекомендуем ознакомиться со всеми, чтобы выбрать для себя что-то наиболее подходящее.

Извлечение с помощью Patchmatic:

Если вы уже установили OS X, но вы не использовали опции загрузчика по корректировке ACPI, вы можете извлечь нативные DSDT/SSDT через patchmatic. Скачайте Patchmatic здесь: https://github.com/RehabMan/OS-X-MaciASL-patchmatic. Для большей лёгкости использования в терминале, положите копию (необходимо разархивировать) в директорию “/usr/bin”.
После установки patchmatic’а, вызывайте терминал, и вводите следующее:

Код

cd ~/Desktop
mkdir extract
cd extract
patchmatic -extract

Patchmatic извлечёт все загруженные ACPI-таблицы и поместит их в прописанную директорию. Если вы использовали какие-нибудь патчи на DSDT/SSDT, то у вас будет уже не нативные файлы, которые будут непригодны для использования нами в дальнейшем. Для примера, если вы использовали ключ DropSSDT=yes (Хамелеон), или параметр DropOem=true (Клевер), нативные SSDT будут отброшены до загрузки, и вы получите совершенно другой “выхлоп”, и, как следствие, вся дальнейшая работа пойдёт насмарку. Отключите все генерации SSDT в клевере, все фиксы на DSDT, и вообще любые проявления изменения таблиц. Даже отключите дроп Cpu0lst и CpuPM.

Именно по всем этим причинам, часто легче извлекать с помощью Linux или с помощью Clover.

Извлечение с помощью Clover:

В GUI* Clover’а мы должны нажать клавишу F4, после чего клевер сохранит все OEM таблицы по пути /EFI/Clover/ACPI/origin. А так же приложит DumpLog.txt, который поможет разобраться, какие из таблиц сохранены, какую длину они имеют, и ещё много интересных вещей. Примечание: на некоторых ноутбуках функциональные клавиши срабатывают по нажатию Fn+F1-12. Следовательно, нам необходимо нажать именно Fn+F4, если на ноутбуке инверсия фн. клавиш.

Это не сработает, если диск, на котором установлен клевер, имеет файловую систему, отличную от FAT32. Говоря простым языком – у клевера должны быть права не только на чтение, но и на запись. Для нашей цели подойдёт либо клевер, установленный на ESP (EFI System Partition), либо чистая флешка, отформатированная в FAT32 (В OS X эта файловая система называется MS-DOS FAT), на которую установлен клевер.

Время от времени, клевер грешит тем, что дублирует SSDT. Эти дубликаты могут создать проблемы для дизассемблирования. Мы просто сверяем все таблицы, и избавляемся от дубликатов. В этом плане, мне больше нравится использовать Linux, так как я никогда не видел, чтобы Linux показывал дубликаты SSDT.

Извлечение через Linux:

В Linux’е нативные файлы просто лежат на жёстком диске по путям /sys/firmware/acpi/tables и /sys/firmware/acpi/tables/dynamic. Просто идите и заберите их на флешку, скиньте себе архивом, или заберите их на OS X любыми другими способами!

Для этого даже не нужно устанавливать Linux, можно просто воспользоваться live-загрузкой: http://www.ubuntu.com/download/desktop

2. Дизассемблирование ACPI-файлов.
Хотя извлеченные родные файлы могут быть открыты непосредственно в MaciASL, это не рекомендуется. Открытие файла .aml непосредственно в MaciASL заставит MaciASL разобрать файл, и сделать его автономным. И, если .aml имеет упоминания других .aml, он неправильно его разберёт. Из-за чего вы будете мучатся, исправляя кучу ошибок. Особенно сильно это касается синтаксиса.

Как результат, лучше разобрать все файлы в виде группы с помощью iASL в Терминале. Подготовим файлы: соберите все DSDT и SSDT файлы в одной папке (не копируйте ACPI файлы, которые не начинаются с DSDT или SSDT), и измените имена, таким образом, чтобы они имели .aml расширение (если это не так). Вам понадобится последняя версия iASL, чтобы правильно их разобрать, которая лежит здесь: https://bitbucket.org/RehabMan/acpica/downloads. Вы можете положить iASL так, чтобы был быстрый доступ из терминала (Опять же, ZIP в /usr/bin).

В терминале OS X:

cd «путь к папке, куда вы положили DSDT и SSDT файлы»
iasl -da -dl *.aml
Примечание: Не пытайтесь разобрать другие ACPI файлы с помощью флага “-da“. Это банально не будет работать.

Новая версия iASL в конечном итоге будут доступна по ссылке на Bitbucket выше, но для тех, кто хочет быть на ‘передовой’…
Примечание: Вы так же можете собрать последнюю версию iASL из гитхаба RehabMan’а. Для этого должен быть установлен Xcode:

cd ~/Documents
git clone https://github.com/RehabMan/Intel-iasl.git iasl.git
cd iasl.git
make
После чего, вы уже можете его установить:

sudo make install

С этого момента, вы будете работать исключительно с вытекающими *.dsl файлами при помощи MaciASL. Конечно, чтобы использовать их необходимо сохранить как “ACPI Machine Language Binary” с расширением .aml, и разместить их, где они будут загружены клевером (~/EFI/Clover/ACPI/patched). Но, мы рекомендуем иметь исправленные файлы .dsl, на случай необходимости изменить что-либо в будущем.

Позвольте мне заявить довольно понятным языком (потому что это самая частая ошибка, которая происходит из-за невнимательности, и после чего приходит много жалоб): Если вы открываете файл .aml непосредственно в MaciASL, и нажимаете “Compile”, вы делаете это НЕПРАВИЛЬНО. Пусть это сохранится в вашем сером веществе между ушами в течение минуты. (Оригинальная мысль автора сохранена).

Дизассемблирование refs.txt.
Иногда бывают дополнительные обращения к внешним названиям (названия, которые находятся в таблице, отличной от DSDT/SSDT). iASL дизассемблер будет пытаться к ним обратиться, но это далеко не всегда срабатывает. Вы можете исправить это, предоставляя компилятору информацию о них в текстовом файле. К примеру, вот некоторые внешние названия (будь то метод, или девайс): SGPO, ECRD, ECWT, и MMTB.

Для начала создайте файл refs.txt в той же папке, где лежат ваши DSDT/SSDT файлы, с следующим содержимым:

Код

External(_SB_.PCI0.PEG0.PEGP.SGPO, MethodObj, 2)
External(_SB_.PCI0.LPCB.H_EC.ECWT, MethodObj, 2)
External(_SB_.PCI0.LPCB.H_EC.ECRD, MethodObj, 1)
External(_GPE.MMTB, MethodObj, 0)

После чего мы его сохраняем, и дизассемблируем, подобно тому, что мы делали во втором пункте:

В терминале OS X:

Код

iasl -da -dl -fe refs.txt *.aml

iASL дизассемблер будет учитывать эти обращения к внешним таблицам для всего кода. В то же время, это не есть хорошо. Большую часть времени вам необходимо будет таскать внешние файлы за собой, вместо того, чтобы они были просто частью кода. Это станет очевидно, как только вы получите ошибку от внешнего обращения к файлу, который отсутствует в refs.txt.

3. Фильтрация ACPI файлов.

Для старых компьютеров (Sandy Bridge и старее), SSDT, связанные с CPU, могут вызвать проблемы. Если дело обстоит именно так (подразумевается, что вы уже попробовали альтернативные методы дропа таблиц), то вы не должны оставлять такие SSDT в ~/ACPI/patched.

Я бы включил все SSDT в их первоначальном виде, и патчить их надлежащим образом, если известно, что они не вызывают проблем.

Примечание: таблицы с пометкой “X” для клевера, а так же таблицы, взятые из папки динамических таблиц в Linux, являются динамичными таблицами, которые являются изменёнными в процессе загрузки (и из-за других параметров). Такие таблицы никогда не кладутся в ~/ACPI/patched!

После того как вы успешно дизассемблировали свои файлы, рассмотрим каждый из них, в попытке определить роль того или иного SSDT. Если это SSDT процессора, которые, как известно, любят вызывать проблемы, откиньте их в сторону, и не кладите их в свой окончательный набор для инжекции через загрузчик. По большей части, SSDT, которые имеют в оглавлении “_PR.CPUx”, и есть SSDT процессора.

Вот типичные SSDT, которые вы можете найти:
CPU: уже обсуждалось выше. Включить в набор, если проблем не возникает.
SATA: можете включить, а можете и не включать. На ваш выбор.
PTID: обычно этот файл бесполезен OS X, и, к тому же, содержит много ошибок. В редких случаях (например, на ноутбуках Acer и HP), это может дать информацию системе, как читать скорость вентилятора, температуру, и другие датчики.
IAOE: Если это SSDT присутствует, то он, как правило, является выходцем из DSDT (метод _WAK). Без него сон может не работать, или работать кривым образом.
GFX0: Обычно SSDT с GFX0 существует для интегрированной графики. Этот SSDT вы патчите для контроля подсветки. На старых ноутбуках, GFX0 обычно находится в DSDT. А в ноутбуках Haswell и выше, она обычно находится в SSDT (хотя она также может быть и в DSDT).
PEGP: PEGP обычно существует для дискретной карты в конфигурациях с двумя GPU. Таких SSDT может быть более одного, и обычно вы должны будете включить всю группу, чтобы достигнуть каких-либо значимых исправлений. Эти SSDT должны быть исправлены, если вы хотите отключить дискретную карту при запуске OS X.
Остальные SSDT следует рассматривать в отдельности. Если, конечно, они вам встретились.
Как мне кажется, было бы неплохо вести заметки о том, какие SSDT вам нужно дропнуть, какие SSDT вам нужно модифицировать, а какие SSDT вам нужно оставить неизменными.

4. Исправление ошибок (Патчинг).

Даже когда вы дизассемблировали все таблицы сразу (iASL с флагом -da), оригинальные файлы по-прежнему могут содержать ошибки. В дизассемблированном состоянии файлы имеют ошибки, связанные с изменениями в самом iASL (обновления), недостатками в iASL, и различии в компиляции среды между нашими компьютерами и производителем. Распространенной причиной ошибок (согласно моей теории), например, в том, что некоторые из упомянутых методов, на самом деле, существуют только внутри Windows (Например, MMTB и MDBG (их, кстати, можно смело удалять, если вы не планируете использовать эти таблицы и для Windows)). Также существуют случаи, когда были допущены ошибки в коде, или же код был написан умышленно неправильно (иногда трудно отличить).

Так что… После определения того, какие файлы вам нужны, вы должны исправить их, чтобы они скомпилировались без ошибок. Есть много общих патчей для таких ошибок, в репозиториях патчей для MaciASL.
MaciASL: https://osxpc.ru/downloads/programs/maciasl/
Репозитории: https://osxpc.ru/articles/osxpc-repo/
Примечание: Мы не проверяем патчи с помощью DSDT Editor. Он имеет слишком много ошибок, и очень старую версию iASL. Пожалуйста, не спрашивайте нас и RehabMan’а об этом.

Чтобы быть уверенным, всегда читайте README, чтобы загружать из правильного места, и для того, чтобы настройки MaciASL были правильными. Патчи для задач синтаксисических ошибок начинаются с “[syn]” в названии. Типичные примеры для старых DSDT: “Fix _PLD Buffer/Package Error”, “Fix TNOT Error”, and “Fix FPED Parse Error”. Для того чтобы определить, какие патчи вам нужны, вы можете посмотреть на сообщение об ошибке, поступающей из iASL компилятора, и кода, на какой линии была обнаружена ошибка. Вы можете также попытаться применить патч, чтобы посмотреть, вносит ли он изменения, как показано в окне предварительного просмотра в MaciASL. Если вы не знакомы с ошибками, это может занять некоторое время, полное экспериментов, проб и ошибок.

Для некоторых ошибок, вы можете просто удалить строку кода, вызвавшего ошибку. Но это зависит от того, является ли строчка необходимой для правильной работы кода, или нет. Например, ошибки, причиной которых являются “внешние” (“External”) параметры, решаются удалением строки.

Эти занятия помогают приобрести опыт в ACPI-спецификациях, и просто опыт программирования. А нынче, этот опыт очень полезен, согласитесь

Ваша цель – получить каждый файл .dsl, в котором не будет ошибок (Предупреждения/примечания/оптимизации приемлемы. Тем не менее, исправить предупреждения, всё-таки желательно.). Если у вас есть файлы, которые компилируются без ошибок, вы можете переходить к патчингу. А после патчинга, вы можете повторно установить OS X, с грамотными таблицами. И, как следствие, с грамотным NVRAM-переменными, и прочими прелестями.

Дополнительные сведения о патчинге.
Минимальные фиксы.

Как правило, DSDT патч применяется только после выявления его необходимой пользы. Но есть несколько патчей, которые необходимы по дефолту, и, обычно, не вызывают никаких проблем. Они находятся в репоизтории перечислены здесь:
Fix _WAK Arg0 v2;
HPET Fix;
SMBUS Fix;
IRQ Fix;
RTC Fix;
*Очень сильно любит делать вид, что патч необходим, хотя нет отличий между Before и After в меню патчинга. Будьте внимательны.
OS Check Fix;
*Не имеет ничего общего с версией Windows. Изучите описание, которое прилагается в MaciASL, а после решите – нужен ли вам патч.
Fix Mutex with non-zero SyncLevel;
Fix PNOT/PPNT;
*Используется только при дропе CPU SSDT.
Add IMEI.

Проблема с моментальным пробуждением.

Проблема с сном:

Патчи на USB убирают просыпания после секунды сна, если в консоли присутствует сообщение “Wake Reason: USB”, “Wake Reason: EHC1/2”, или же “Wake Reason: XHC”. Если у вас есть такая же проблема, но проблема не в USB, то попробуйте применить это:

Если вы испытываете проблемы с пробуждением компьютера или ноутбука, воспользуйтесь следующим методом:
Откройте DSDT, нажимаете cmd+f, и в поиске ищите “_PRW”;
Ищите его в устройстве, которое вызывает пробуждение. Пусть это будет XHC. Вот кусок кода:

Код

Device (XHC)
{
Name (_ADR, 0x00140000) // _ADR: Address
OperationRegion (XPRT, PCI_Config, Zero, 0x0100)
Field (XPRT, AnyAcc, NoLock, Preserve)
{
DVID, 16,
Offset (0x40),
, 11,
SWAI, 1,
Offset (0x44),
, 12,
SAIP, 2,
Offset (0x48),
Offset (0x74),
D0D3, 2,
Offset (0x75),
PMEE, 1,
, 6,
PMES, 1,
Offset (0xA8),
, 13,
MW13, 1,
MW14, 1,
Offset (0xAC),
Offset (0xB0),
, 13,
MB13, 1,
MB14, 1,
Offset (0xB4),
Offset (0xD0),
PR2, 32,
PR2M, 32,
PR3, 32,
PR3M, 32
}

Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x6D, 0x03))
}

Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
Store (Arg0, PMEE)
}

И меняем это

Код

Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x6D, 0x03))
}

На это:

Код

Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake
{
0x6D,
Zero
})

И получаем это

Код

Device (XHC)
{
Name (_ADR, 0x00140000) // _ADR: Address
OperationRegion (XPRT, PCI_Config, Zero, 0x0100)
Field (XPRT, AnyAcc, NoLock, Preserve)
{
DVID, 16,
Offset (0x40),
, 11,
SWAI, 1,
Offset (0x44),
, 12,
SAIP, 2,
Offset (0x48),
Offset (0x74),
D0D3, 2,
Offset (0x75),
PMEE, 1,
, 6,
PMES, 1,
Offset (0xA8),
, 13,
MW13, 1,
MW14, 1,
Offset (0xAC),
Offset (0xB0),
, 13,
MB13, 1,
MB14, 1,
Offset (0xB4),
Offset (0xD0),
PR2, 32,
PR2M, 32,
PR3, 32,
PR3M, 32
}

Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake
{
0x6D,
Zero
})
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
Store (Arg0, PMEE)
}

И так проделать со всеми устройствами, что пробуждают компьютер.
Работа с USB.

Следующие патчи используйте только в соответствии с вашим железом:
6-series USB
7-series/8-series USB
Мультиплекс-патч на USB3 исправляет работу AppleUSBXHCI.kext, чтобы не прибегать к использованию GenericUSBXHCI.kext. Он основан на информации, опубликованной Mieze. Большинство DSDT нуждаются в этом патче. А так же, ProBook, например, использует модифицированную версию этого патча. А вот Lenovo U310/U410 может использовать его как есть. Ах, да. Имя патчу: “7-series USB3 Multiplex“.

Если вы используете GenericUSBXHCI.kext на 10.10, убедитесь, что вы используете только его. Кроме того, чтобы избежать мгновенного пробуждения, вам может понадобиться флаг ядра ‘-gux_defer_usb2′.
Чипсет.

На хасвелле существуют некоторые проблемы с подгрузкой AppleLPC.kext. Если у вас в загруженных кекстах нет AppleLPC, то примените этот патч: “Haswell LPC”
Немного о переименовании.

Переименовывание должно быть “сбалансированным”. То есть, переименование должно быть в равной степени как в DSDT, так и в SSDT. А так же это нужно, чтобы лучше соответствовать требованиям OS X (пример “Rename GFX0 to IGPU” для правильного управления питанием IGPU). В этом случае, во всех DSDT/SSDT, где есть ссылки на это имя, также должны быть переименованы.
Информация относительно идентификаторов дубликатов.

Вы должны быть уверены, что ваши патченные файлы не содержат дубликатов. Общим правилом можно считать добавление метода _DSM в один из SSDT, где производитель определил _DSM в другой SSDT. Чтобы избежать этой проблемы, можно использовать патч “Remove _DSM methods”, в качестве одного из самых первых патчей, который вы применяете для всех DSDT/SSDT.

Исправления конкретных проблем.
Скоро будет перевод статей, а пока:

Статус батареи: https://www.tonymacx86.com/threads/guide-how-to-pat…y-status.116102/
Настройка яркости: https://www.tonymacx86.com/threads/guide-patching-d…-control.152659/
Отключение nVidia/Radeon на ноутбуках: https://www.tonymacx86.com/threads/guide-disabling-…-laptops.163772/
Примите во внимание!

Многие патчи образуют синергию с config’ом и кекстами, а по одиночке не имеют никакого смысла.
Патчи для AppleHDA.

С патченным AppleHDA, есть два момента, которые необходимо соблюсти:
IRQ Fix;
Audio Layout 12.

5. Компиляция и установка файлов.

Использование файлов загрузчиком.

Для того, чтобы использовать свои патченные DSDT/SSDT файлы, необходимо сохранить в то место, откуда их подхватит загрузчик, и начнёт подгружать. Файлы должны быть сохранены в “ACPI Machine Language Binary” (MaciASL -> Сохранить как…). Сохранение файла .dsl с расширением .aml просто вызвает панику, или же очень странное поведение OS X.

Clover: сохраняем наши .dsl в .aml, и подкладываем все нужные файлы по пути ~/EFI/CLOVER/ACPI/patched. Клевер подхватит все .aml файлы, которые лежат по этому пути (начиная с версии 3062).

Для SSDT очень важен порядок в цифрах в названии. То есть, SSDT-1.aml, после всех изменений, должен быть именно SSDT-1.aml, а SSDT-5.aml – SSDT-5.aml. Это необходимо, потому что патченные файлы заменяют те, что подхватываются из биоса. Если назвать неправильно, то произойдёт дубляж одного и того же SSDT, что неминуемо приведёт к панике ядра.

В то же время, для DSDT порядок несколько иной – имя файла DSDT, который необходимо подхватывать, должен быть указан в config.plist, по пути Config.plist/ACPI/DSDT/Name, тип значения “string”. К тому же, можно положить несколько DSDT с разными именами, например DSDT.aml, DSDT-original.aml, DSDT-test.aml, и прямо из GUI выбирать, с каким DSDT нужно загрузиться. Это удобно для тестов: если что-то пошло не так, можно просто взять и поменять название на один из лежащих вариантов, или же вообще загрузить оригинальный, указав имя BIOS.aml.
Примечание: если указано неверное имя, будет грузиться оригинальный DSDT, взятый из биоса.
“Плавающие” регионы.

В ACPI есть такая вещь, как регионы-операторы (Например: MMIO-регион, SystemMemory регион, EmbeddedControl регион, и т.д.). Эти регионы имеют фиксированные адреса, которые зависят только от компьютера, модели биоса, и настроек биоса. Малейшее изменение этих регионов приводит к краху весь дсдт, и как итог мы имеем паники, или неправильно работающую OS X. Это и называется “плавающие” регионы.

Так, исправляя DSDT/SSDT, мы делаем снимок этих адресов в тот момент, когда мы снимали таблицы. Они не могут совпасть, если вы меняли параметры биоса, меняли компоненты железа, и производили подобные операции. Такие регионы останутся, но будут доступны по другому адресу. Если это так, то вы заметите, что некоторые вещи начинают работать криво, или возникают другие проблемы со стабильностью. Которые, к слову, кажутся случайностью.

Чтобы избежать этого, нам необходимо использовать фикс клевера “Fix_Regions”, который сравнивает регионы при каждой загрузке, и, при несовпадении, исправляет. Находится этот фикс рядом с остальными фиксами DSDT, а именно: Config.plist/ACPI/DSDT/Fixes.

Вот только с SSDT таких хитростей пока что не придумано. Лечения, следовательно, тоже нет. Единственное, что хочется отметить – регионы в SSDT не так сильно играют роль в поведении OS X, из-за чего сильного удара по юзабилити не предвидится. А исследования методов исправления выходит далеко за рамки этого мануала.

[FAQ] Редактирование DSDT: с чего начать?

Если вы хотите увидеть на нашем сайте ответы на интересующие вас вопросы обо всём, что связано с техникой Apple, операционной системой Mac OS X (и её запуском на PC), пишите нам через форму обратной связи.

К нам поступил следующий вопрос:

Расскажите подробно, с чего
начинать и как правильно редактировать
DSDT под свою материнскую плату.

Как и в других областях знаний, касающихся хакинтоша, в редактировании DSDT нет единого рецепта. Во-первых, вам надо определиться с тем, для чего вам нужна правка DSDT. Она поможет лучше завести материнку, видеокарту, звук и сеть, но лишь в том случае, если драйверы системы хотя бы теоретически поддерживают ваше оборудование. В обратном случае ничего не получится.

Сама правка DSDT идёт по стандартному сценарию:

  • сначала вам нужно извлечь чистую таблицу DSDT. Лучше всего это делать из-под Windows или прямо из BIOS, с помощью поддерживающих такую возможность загрузчиков (например, XPC)
  • затем таблицу DSDT из бинарного формата AML надо декомпилировать в текстовый формат DSL, с которым можно работать в текстовом редакторе. Сделать это можно через Терминал или с помощью удобного редактора DSDTSE
  • затем необходим ряд обязательных правок — в частности, исправление HPET и LPC, а также прописывание процессора (актуально для всех процессоров старше Nehalem — Core 2 Duo, Core 2 Quad и пр.). Это позволит вам использовать встроенное в Mac OS X управление питанием и избавиться от драйверов типа NullCPUPowerManagement.kext
  • затем имеет смысл заниматься правками «по вкусу» — завести видеокарту, звуковую карточку и Ethernet. Содержание этих процедур состоит в том, что вы либо добавляете в DSDT новое устройство с нужными характеристиками, либо дополняете информацию об уже содержащемся там устройстве
  • наконец, в случае избытка свободного времени можно заняться т.н. DSDT-косметикой. Это незначительные правки, направленные на то, чтобы в свойствах компьютера информация о ваших хакинтошных компонентах отображалась должным образом. Практического смысла в этом нет
  • по итогам любой правки DSDT можно обратно скомпилировать код и положить отредактированный файл DSDT.aml в папку загрузчика (у разных версий разных загрузчиков свои требования к местоположению пропатченного файла)

Что касается толковых примеров того, как нужно править DSDT, можем посоветовать вам встроенную в DSDTSE коллекцию твиков — там подробно расписано почти всё, что может потребоваться; или хорошую тему на форуме AppleLife.

Источник

Установка Mac OS X на PC. Часть 6: DSDT

Пришла пора продолжить наш разговор о премудростях хакинтоша. В сегодняшней статье об установке Mac OS на PC мы поговорим о смысле аббревиатуры DSDT, которую всё чаще можно встретить в различных мануалах, касающихся инсталляции и настройки системы.

DSDT — сравнительно молодой метод в искусстве хакинтоша: он зародился пару лет назад, и сегодня стал практически незаменимым подспорьем для любого владельца «хака». Тем не менее, многие пользователи, слышавшие о хакинтоше, смутно представляют себе сущность DSDT. Ещё больше заблуждений касаются его возможностей. Сегодня мы рассмотрим случаи, в которых метод DSDT действительно полезен, и ситуации, когда он совершенно бессилен.

Для начала — расшифровка, которая, увы, мало что вам объяснит. DSDT означает Differentiated System Description Table. Эта «дифференцированная таблица описания системы» содержит сведения обо всех ключевых устройствах, из которых состоит компьютер, а также о параметрах и режимах их функционирования.

Зачем это всё нужно на хакинтоше? Не секрет, что Маки и PC устроены по-разному, и сильно отличаются по целому ряду технических параметров. Начать можно с BIOS — на Маках его вообще нет, а в качестве замены выступает EFI. И хотя появление полноценного эмулятора EFI для PC не за горами, пока приходится сглаживать это различие другими способами. Если бы не было DSDT, то для корректной работы целого ряда устройств ПК с драйверами, входящими в состав Mac OS X, потребовались бы значительные усилия: например, пропатчивание BIOS.

DSDT выступает посредником между драйверами и оборудованием, и это своего рода «подкладка» под BIOS. Специальный загрузчик Mac OS X при включении подгружает таблицу DSDT, и система думает, что имеет дело с немного другим BIOS. Файл с таблицей DSDT имеет расширение .aml, и работать с ним могут практически все современные загрузчики для хакинтоша: Chameleon, PC EFI, Boot Think и пр.

Будем считать всё вышенаписанное небольшим вступлением, и перейдём к практической части в формате FAQ.

В чём преимущества использования DSDT?

В том, что Mac OS X сможет значительно лучше взаимодействовать с рядом устройств, что благополучно скажется на стабильности и производительности системы.

Для чего подойдёт DSDT?

Вот неполный список:

  • видеокарточка сможет работать без каких-либо сторонних кекстов
  • процессор от Intel сможет работать с профилями управления питанием и производительностью Apple (иными словами, не потребуется кекст NullCpuPowerManagement.kext)
  • вы избавитесь от всевозможных проблем с USB
  • выключение и перезагрузка компьютера будут работать без каких-либо дополнительных драйверов
  • значительно повысятся шансы иметь работающий режим сна

Поработав над правкой DSDT, можно добиться поразительных результатов. Например, на компьютере автора установлен только один дополнительный кекст — FakeSMC.kext. Всё остальное — от Apple, и отлично работает.

DSDT — это замена драйверам?

Это самое распространённое заблуждение. Нет. DSDT — не драйвер, это способ указать системным драйверам Apple, как надо работать с вашими устройствами. Таким образом, если какое-нибудь устройство даже чисто теоретически несовместимо ни с одним из кекстов Mac OS X, то никакой DSDT-патчинг делу не поможет.

Но ведь выше написано, что DSDT позволяет сократить количество кекстов! Как же так?

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

А зачем возиться с DSDT, если со «всякими инжекторами» отлично всё работает?

Довода два. Первый — сугубо практический. Чем меньше посторонних кекстов, тем проще будет переустановить систему. Второй — для людей, думающих о будущем. Есть вероятность, то с выходом очередного обновления Mac OS X инжекторы перестанут работать. А вот с DSDT такого не произойдёт — таблица делается раз и навсегда. Подложив один небольшой файлик с ней загрузчику, вы избавите себя от рутины по установке и подстройке многих кекстов.

Неужели DSDT никогда не придётся менять?

Увы, ничто не вечно. Стоит вам заменить процессор, нарастить количество оперативки или прикупить новую видеокарточку, как DSDT утратит актуальность, и его придётся переделать.

Где взять это чудо?

Лучше нигде не брать. Строго говоря, все DSDT-таблицы уникальны. Вы можете извлечь таблицу, актуальную именно для вашего компьютера. Тем не менее, если вам попалась DSDT-таблица от вашей же материнской платы, то можете смело пробовать. Для извлечения DSDT есть целый ряд инструментов, из которого особо выделим DSDTSE.

А как происходит правка?

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

Пример DSDT-кода

Чем опасны эксперименты с DSDT?

Во-первых, система может перестать грузиться. Это лечится достаточно просто — нужно всегда иметь на диске две копии DSDT — ту, с которой всё работает и ту, с которой вы экспериментируете. В случае проблем можно указать в загрузчике другую таблицу и всё починить.

Во-вторых, можно доиграться и до аппаратных проблем. Теоретически, отклонения от нужных значений некоторых настроек могут погубить устройства, например, испортить видеокарточку. Поэтому никогда не редактируйте в DSDT то, что не знаете.

Таким образом, DSDT — мощный инструмент, открывающий большие горизонты. Каждый месяц появляются новые открытия, и польза от DSDT только растёт. Постепенно наличие DSDT становится необходимостью: например, без него установка Snow Leopard на PC будет сопряжена с дополнительными проблемами.

Источник

Установка Хакинтоша методом редактирования DSDT

Внимание

Итак, что такое DSDT и с чем его едят. Differentiated System Description Table — ну или таблица системных устройств, аля Дерево устройств, аля DSDT.aml — этот файл располагается в корне диска, где установлена Mac OS X. В этом файле записана информация об устройствах вашего компьютера, о выделении им памяти, об их IRQ и другая системная информация. И если его хорошенько потрепать, то у нас полцчиться сделать этакий клон BIOS но только адаптированый под Хакинтош, и вашу собственную машину.
Заготовкой будет служить dsdt.dsl, выдраный из прошивки BIOS’а

Где 0316 — версия Биоса.
Так же можно использовать EVEREST, или BIOS Cheker с сайта производителя Материнской Платы, они так же способны определить текущую версию БИОСа.
Итак, включаем ACPI Patcher. Выбираем Типа BIOS указываем где лежит сырьевая заготовка (должна быть с расширением ROM), и указываем папку куда будет сохранен фаил DSDT.

Открываем папку с полученым фаилом DSL и переименовываем его например в Base.DSL или как угодно. Снова возвращаемся в ACPI Patcher, и теперь переходим на вкладку D/C DSDT. Ставим все три галочки около HPET Patch, RTC Patch и Aliases Patch.
Отрываем вкладку Network. Тут необходимо указать адрес для инструкций, для этого придется дюже покопатся в фаиле DSDT.dsl с помощью Notepad++, или использовать IORegistryExplorer (второй вариант лучше), указываем адрес и выбираем LAN0 или GIGE при этом не забываем про Fix GP9 + Time Machine Fix.

Теперь переходим на Graphics.

Выбираем свою Видеокарту, и ее обьем памяти. Ели у ва nVidia то ставим разьемы в зеленой графе, а так же отмечаем Use DSDT GFX. Если у вас ATI, то заполняем лишь красные поля. Аналогично Сетевой карте отмечаем ее местоположение с помощью IORegistryExplorer

Переходим на вкладку Audio и отмечаем вашу аудиокарту, или наиболее близкую к ней. Если у вас так же есть шина HD-Audio ставим галочку на HDEF Audio.

Источник

Понравилась статья? Поделить с друзьями:
  • Как исправлять ошибки в delphi
  • Как исправлять ошибки в adobe acrobat
  • Как исправлять ошибки в 2016 году
  • Как исправлять ошибки в 1с предприятие
  • Как исправлять ошибки бортового компьютера