Відключення nvidia optimus і amd switchable graphics
Відключення Nvidia Optimus, AMD Switchable Graphics.
Ноутбучні дискретні карти, які працюють в парі з вбудованою, не можуть працювати, але тим не менше вони постійно включені. І, як наслідок, ми отримуємо підвищені нагрів і витрата енергії. А ми хіба хочемо даремно витрачати батарейку і зношувати залізо зайвої температурою? Ні. Для цього ми тут і зібралися.
До того ж, цей мануал розповідає загальну логіку, так що це може навіть стати в нагоді для відключення інших пристроїв. Наприклад, друга дискретна карта, яка коштує, припустимо, для CrossFire або SLI, але в маці ці фішки не підтримуються. Знову ж таки - в цілях економії відключаємо другу карту. У загальному і цілому, застосування цієї логіки, доречно майже у всіх випадках з пристроями типу _SB, тобто «південних» пристроїв.
Тут ми відключаємо за допомогою методу _INI.
У нашому випадку це Nvidia Optimus. дивимося:
Нам потрібно лише дізнатися шлях до пристрою. Дивимося його від низу до верху, чергуючи через одну сходинку, а записуємо справа наліво. Також пам'ятаємо, що в ACPI немає імен довше 4 символів.
- IONDRVFramebuffer це програмна частина, вона нам не потрібна. Пропускаємо.
- PXSX @ 0 це апаратна частина. Записуємо першу частину, до знака @. тобто записуємо «PXSX».
- IOPP - програмна. Пропускаємо.
- RP05 @ 1C, 4 - апаратна. Записуємо правіше PXSX, тобто «RP05.PXSX»
- AppleACPIPCI - програмна. Пропускаємо.
- PCI0 @ 0 - апаратна. Пишемо правіше RP05, тобто «PCI0.RP05.PXSX»
Вище йти не потрібно. Запам'ятовуємо цей шлях, і переходимо до роботи з ACPI.
Проводимо дії згідно з цією інструкцією: osxpc.ru/faq/acpi-manual.
Працюємо з файлами DSL. щоб уникнути проблем, і не заплутатися ще більше.
Шукаємо таблицю з графікою. У нашому випадку, це SSDT-9.dsl.
Дерево пристроїв буде приблизно таким:
Враховуємо, що в прикладі враховується шлях RP05.PXSX. і співвідносимо зі своїми іменами. Головне - пам'ятати про шлях, а точніше про імена в цьому шляху. Загалом, будьте уважні на цей рахунок. Назви бувають дуже різні, такі як ...
Після чого натискаємо Cmd + F. і вводимо в вікно, що з'явилося «_INI»:
Дивимося, щоб цей метод був в «папці» з нашим шляхом, виведеним раніше. Для цього дивимося на дерево пристроїв зліва. Отже, ми спостерігаємо приблизно такий код:
Scope (\ _SB.PCI0.RP05 .PXSX)
// ... Тут може бути інший код, який описує пристрій ...
Method (_INI, 0. NotSerialized) // _INI: Initialize
Store (Zero. \ _SB.PCI0.RP05 .PXSX ._ADR)
>
// ... Тут може бути інший код, який описує пристрій ...
>
Власне, наше завдання - просто викликати метод виключення, тобто _OFF.
Але, ми повинні дізнатися місце розташування методу _OFF. Для цього знову ж скористаємося пошуком (Cmd + F). Ми шукаємо метод «_OFF»:
«Store (Zero. \ _SB.PCI0.RP05.PXSX ._ADR)».
Згадка виглядає як «_OFF ()». Виглядає після правки це так:
Method (_INI, 0. NotSerialized) // _INI: Initialize
Store (Zero. \ _SB.PCI0.RP05.PXSX ._ADR)
_OFF ()
>
А якщо метод _OFF ні виявлено в цій таблиці. то ми зі спокійною душею позначаємо те, що метод винесено за межі цього файлу, просто прописавши шлях. Далі iASL сам знайде його. Запис зовнішнього методу виглядає так: External (\ _SB.PCI0.RP05.PXSX ._OFF, MethodObj)
Природно, підставляємо свій шлях замість зазначеного. Не забули? :) Отже, код у нас виглядає так:
Method (_INI, 0. NotSerialized) // _INI: Initialize
Store (Zero. \ _SB.PCI0.RP05.PXSX ._ADR)
External (\ _SB.PCI0.RP05.PXSX ._OFF, MethodObj)
_OFF ()
>
Після цього ми просто зберігаємо файли як AML. поправивши інше (а-ля перейменування GFX0 в IGPU і B0D3 в HDAU. і т.д.). Підкладаємо ці таблиці конюшини в папку patched, щоб він їх завантажував. Перезавантажуємо, і радіємо результату, перевіривши в IORegistry пошуком по імені порту:
Якщо це не допомогло, то нам потрібно докинути ще одну табличку (яку багато хто знає як SSDT-1.aml), в якій більш розгорнутий спосіб відключення. Глушить всі виклики, від того і є "універсальним". Ось він - SSDT-15.aml (15 щоб вже точно не зустрічалося з іншими таблицями).
Все, що нам потрібно - поміняти стандартні шляхи на наш. Для цього натискаємо Cmd + F, вводимо стандартні шляхи в цьому ссдт, які перераховані в блоці External'ов, крім IGPU, ставимо галочку Replace, і вписуємо наше ім'я шляху. Ось так:
Після цього підкидає разом з редагованою раніше таблицею конюшини, перезавантажується, і радіємо відключеною графіку.
Ось, власне, і весь процес відключення. Приклад можете вивчити в цьому архіві. Ну і. звичайно ж. шпаргалка 🙂
Method (_INI, 0. NotSerialized) // _INI: Initialize
Store (Zero. \ _SB.PCI0.RP05.PXSX ._ADR)
// When method _OFF in OTHER SSDT:
// External (\ _SB.PCI0.RP05.PXSX ._OFF, MethodObj)
_OFF ()
>
P.S. - Спасибі Іллі Ісаєву за те, що пояснив алгоритм відключення 🙂
IONDRVFramebuffer це програмна частина, вона нам не потрібна. Пропускаємо.
PXSX @ 0 це апаратна частина. Записуємо першу частину, до знака @, тобто записуємо «PXSX».
IOPP - програмна. Пропускаємо.
RP05 @ 1C, 4 - апаратна. записуємо правіше <— Тут лучше левее. PXSX, то есть «RP05.PXSX»
AppleACPIPCI - програмна. Пропускаємо.
PCI0 @ 0 - апаратна. пишемо правіше <— Тут лучше левее. RP05, то есть «PCI0.RP05.PXSX»
Щоб не вганяти в оману ... =)
Всім привіт! Хто допоможе відключити Nvidia на ноутбуці Acer 5750g? Роблю все за інструкцією, а графіка не відключається. З чим це пов'язано не знаю. Пробував через _REG теж не виходить. Зв'язатися зі мною можна натиснувши на ім'я в цій посаді і написати в ЛС.