Çoğu laptopta Intel kartına ek olarak Nvidia veya AMD ekran kartı vardır. Bu kartlar macOS ile kullanılamamaktadır. Bu kartlar sistemden kapatılmadığı zaman daha fazla güç kullanımına ve hızlı fan çalışmasına ve dolayısıyla düşük pil ömrüne sebep olmaktadır. Aşağıdaki rehberde bu kartların nasıl kapanacağını anlatmaya çalışacağım. Rehber uzun olabilir ama adım adım takip ederseniz ve her adımı neden yaptığımızı anlarsanız, problem yaşamazsınız. Rehberi daha da anlaşılır kılabilmek için örnek bir makinenin dosyalarını da buraya ekledim. Siz de kendinizi deneyebilirsiniz.
[WARNING]Aşağıdaki yamalar sadece ve sadece ekran kartını kapatmak içindir. Batarya ses kartı vs için uyguladığınız yamalar varsa tekrar uygulayın.[/WARNING]
İçerik
Şimdi örnek dosyalar üzerinden 4. adımdan başlayalım. Klasörü açtığımız zaman sonu x ile biten şu dosyları görüyoruz ve onları siliyoruz.
4. Dosyaların Silinmesi
5. Yama yapılacak dosyaların bulunması
Önce GFX0 geçen bütün dosyaları buluyoruz. Dosyaların olduğu klasöre gidiyoruz ve terminale şunu yazıyoruz.
Sonuç şu olacaktır.
[WARNING]Bütün bu dosyalara yama yapılacaktır. İlk yapacağınız yama her zaman Rename _DSM methods to XDSM olsun. Cihazların ayarlarını barındıran bu methodların silinmesi veya isminin değişmesi gerekir.Bazı dosyalarda bu yamaya gerek olmayabilir.[/WARNING]
6. Rename GFX0 to IGPU yaması
DSDT.dsl
SSDT-9.dsl
Şimdi yamanın ilk ayağı olan Rename GFX0 to IGPU kısmını bitirdik. Şimdi yapacağımız harici kart olan SSDT yi bulup o kartın _INI (başlangıç) kısmında _OFF metodunu çağıracağız.
DSDT / SSDT Dosyalarımız içinde _OFF geçen dosyaları bulalım. Yine komut satırına gidiyoruz ve şunu yazıyoruz.
Sonuç şu olacaktır:
Gördüğünüz gibi _INI methodumuz bu fakat _OFF methodumuz başka dosyada. Böyle olduğu zaman bazı şeylere dikkat etmemiz gerekiyor.
Bazen _OFF kısmında EC (Embedded Controller) ye erişim sağlanır. Biz _INI' den _OFF' u çağırdığımız zaman bu EC aktif olmayabilir ve bu yüzden problemler çıkar. Bu yüzden SSDT-12.dsl dosyasındaki _OFF kısmını inceleyelim:
Gördüğünüz üzere \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) ile EC ye erişim sağlanıyor. Bunu halletmemiz gerekiyor. Biz bunu bu dosyadan silip başka dosyaya ekleyeceğiz. O satırı siliyoruz ve şu hale getiriyoruz ve compile diyoruz
Bazen nadir olsa da, EC yi çağırmak için bir methodu da çağırabilir. O methodu inceleyip EC den bir şeyin çağrılmadığına emin olun.
SSDT-11.dsl dosyasının _INI kısmını söyle yapıyoruz:
Gördüğünüz gibi _OFF metodo SSDT-12.dsl de olduğundan External.. diyerek o methodu belirtiyoruz. ve _OFF() ile kapatıyoruz. Buraya dikkat edin. SSDT-12.dsl dosyasındaki grafik kartının adres yolu neyse onu yazmanız gerek. Farklı cihazlarda bu adres farklı olabilir. Mesela SB.PCI0.PEG0.PEGP gibi.
İşimiz hala bitmedi. Sildiğimiz \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) satırını eklememiz gerekiyor. DSDT dosyası ile EC başlatılıyor. Biz de bu satırı DSDT dosyasına ekleyeceğiz.
DSDT.dsl dosyasını açıyoruz.
EC0 nın reg methodu şöyle bir şekilde:
Bunu şu şekide değiştiriyoruz:
Bu yamalar ile diğer ekran kartı kapanacaktır. Fakat bazı durumlarda bu yamalar yüzünden uykuya geçme problemi olabilir.
Bu nedenle aşağıdaki yamaları da yapıyoruz. Aşağıdaki yamalar ile uykuya geçmeden önce ekran kartı açılıyor ve uyandıktan sonra tekrar kapatılıyor. Bu yamaları MaciASL nin patch yazan text kutusuna yazıp patch diyorsunuz.
DSDT.dsl
[WARNING]Burada önemli olan nokta _SB.PCI0.RP05.PEGP kısmı her ekran kartında farklı olabilir. Bazılarında mesela SB.PCI0.PEG0.PEGP Bu rehberi okuyanlar ona dikkat etsinler.[/WARNING]
Gördüğünüz gibi rehber uzun olduğu için herkese birebir yardım etmem olanaksız. Umarım bana anlayış göstrebilirsiniz.
[WARNING]Aşağıdaki yamalar sadece ve sadece ekran kartını kapatmak içindir. Batarya ses kartı vs için uyguladığınız yamalar varsa tekrar uygulayın.[/WARNING]
İçerik
- Öncelikle orjinal DSDT ve SSDT dosyalarınıza ihtiyacımız var. Bunun için buradaki rehberi takip ederek bir klasöre dosyalarınızı çıkartın. Sökerken BÖLÜM 4: ACPI Dosyalarının "refs.txt" İle Sökülmesi kısmını takip edin.
- MaciASL indirin
- MaciASL/Preferences/Sources kısmına eğer ekli değilse şunu ekleyin.
- Name: RehabMan Laptop
- URL: http://raw.github.com/RehabMan/Laptop-DSDT-Patch/master
- Clover ile çıkardığınız dosyalar içersinde sonu x ile biten dosyalar varsa bu dosyaları silin.
- Yama yapılacak dosyaların bulunması
- Rename GFX0 to IGPU yaması
- Ekran Kartının Kapanması
- Gerekli diğer yamaların yapılması.
Şimdi örnek dosyalar üzerinden 4. adımdan başlayalım. Klasörü açtığımız zaman sonu x ile biten şu dosyları görüyoruz ve onları siliyoruz.
4. Dosyaların Silinmesi
- SSDT-3x.dsl
- SSDT-4x.dsl
- SSDT-5x.dsl
5. Yama yapılacak dosyaların bulunması
Önce GFX0 geçen bütün dosyaları buluyoruz. Dosyaların olduğu klasöre gidiyoruz ve terminale şunu yazıyoruz.
Kod:
grep -l GFX0 *.dsl
Kod:
DSDT.dsl
SSDT-0.dsl
SSDT-1.dsl
SSDT-10.dsl
SSDT-11.dsl
SSDT-12.dsl
SSDT-2.dsl
SSDT-6.dsl
SSDT-7.dsl
SSDT-8.dsl
SSDT-9.dsl
6. Rename GFX0 to IGPU yaması
DSDT.dsl
- Rename _DSM methods to XDSM
- OS Check Fix (Windows 8) Buradaki amaç macOS u Windows gibi tanıtmak. Çünkü bazı cihazlar mesela sadece uygun Windows versiyonu varsa açılır. Sizin cihazınızda en yüksek Windows ne ise ona uygun yamalayabilirsiniz.
- Rename GFX0 to IGPU
Ekran kartı için bütün yamalarda ilk bunun uygulanması gerekir. - Batarya vs için diğer yamaları uygulamayı unutmayın.
- Rename _DSM methods to XDSM
- Rename GFX0 to IGPU
- Rename GFX0 to IGPU
Bunu yapıp compile dediğimizde şu hatayı alıyoruz.- 246, 6126, syntax error, unexpected PARSEOP_PACKAGE
- Bu hatayı görünce yapacağımız yama şu:
- [syn] Remove _PSS placeholders
- Rename GFX0 to IGPU
- Rename GFX0 to IGPU
- Rename GFX0 to IGPU
- Rename GFX0 to IGPU
SSDT-9.dsl
- Rename GFX0 to IGPU
- Rename B0D3 to HDAU
Grafik kartı ve ses ile alakalı yama. layout id 12 kullanır. Eğer ses layout için başka numara kullanıyorsanız bunu değiştirebilirsiniz. - Rename GFX0 to IGPU
Gördüğünüz gibi bu dosyada birden fazla isim değiştirme var. Muhtemelen bu dosyada diğer ekran kartı var aklımızda tutalım.
- Rename GFX0 to IGPU
Gördüğünüz gibi bu dosyada birden fazla isim değiştirme var. Muhtemelen bu dosyada diğer ekran kartı var aklımızda tutalım.
- Rename GFX0 to IGPU
Gördüğünüz gibi bu dosyada birden fazla isim değiştirme var. Muhtemelen bu dosyada diğer ekran kartı var aklımızda tutalım. - Bu dosyayı compile etmeye çalışınca 1324, 6126, syntax error, unexpected PARSEOP_NAMESEG hatası alıyoruz. Bu hatayı alınca uygulayacağınız yama:
[gfx0] Cleanup/Fix Errors (SSDT)
Şimdi yamanın ilk ayağı olan Rename GFX0 to IGPU kısmını bitirdik. Şimdi yapacağımız harici kart olan SSDT yi bulup o kartın _INI (başlangıç) kısmında _OFF metodunu çağıracağız.
DSDT / SSDT Dosyalarımız içinde _OFF geçen dosyaları bulalım. Yine komut satırına gidiyoruz ve şunu yazıyoruz.
Kod:
grep -l Method.*_OFF *.dsl
- SSDT-12.dsl
Kod:
grep -l Method.*_INI *.dsl
- DSDT.dsl
- SSDT-10.dsl
- SSDT-11.dsl
- SSDT-12.dsl
- SSDT-10.dsl içinde _INI arıyoruz:
Burada ekran kartı yok. - SSDT-11.dsl
Kod:Method (_INI, 0, NotSerialized) // _INI: Initialize { Store (Zero, \_SB.PCI0.RP05.PEGP._ADR) }
Gördüğünüz gibi _INI methodumuz bu fakat _OFF methodumuz başka dosyada. Böyle olduğu zaman bazı şeylere dikkat etmemiz gerekiyor.
Bazen _OFF kısmında EC (Embedded Controller) ye erişim sağlanır. Biz _INI' den _OFF' u çağırdığımız zaman bu EC aktif olmayabilir ve bu yüzden problemler çıkar. Bu yüzden SSDT-12.dsl dosyasındaki _OFF kısmını inceleyelim:
Kod:
Method (_OFF, 0, Serialized) // _OFF: Power Off
{
If (LEqual (CTXT, Zero))
{
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
If (LNotEqual (GPRF, One))
{
Store (VGAR, VGAB)
}
Store (One, CTXT)
}
SGOF ()
}
Kod:
Method (_OFF, 0, Serialized) // _OFF: Power Off
{
If (LEqual (CTXT, Zero))
{
If (LNotEqual (GPRF, One))
{
Store (VGAR, VGAB)
}
Store (One, CTXT)
}
SGOF ()
}
SSDT-11.dsl dosyasının _INI kısmını söyle yapıyoruz:
Kod:
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
Store (Zero, \_SB.PCI0.RP05.PEGP._ADR)
External(\_SB.PCI0.RP05.PEGP._OFF, MethodObj) // ekran kartinin adresi
_OFF()
}
İşimiz hala bitmedi. Sildiğimiz \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) satırını eklememiz gerekiyor. DSDT dosyası ile EC başlatılıyor. Biz de bu satırı DSDT dosyasına ekleyeceğiz.
DSDT.dsl dosyasını açıyoruz.
EC0 nın reg methodu şöyle bir şekilde:
Kod:
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LEqual (Arg0, 0x03))
{
Store (Arg1, ECFL)
}
}
Kod:
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LEqual (Arg0, 0x03))
{
Store (Arg1, ECFL)
}
// EC0 kodunu ekliyoruz.
If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
{
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
}
}
Bu nedenle aşağıdaki yamaları da yapıyoruz. Aşağıdaki yamalar ile uykuya geçmeden önce ekran kartı açılıyor ve uyandıktan sonra tekrar kapatılıyor. Bu yamaları MaciASL nin patch yazan text kutusuna yazıp patch diyorsunuz.
DSDT.dsl
Kod:
into method label _PTS code_regex ([\s\S]*) replace_matched
begin
External(\\_SB.PCI0.RP05.PEGP._ON, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.RP05.PEGP._ON)) { \\_SB.PCI0.RP05.PEGP._ON() }\n
%1
end;
into method label _WAK code_regex (Return\s+\(.*) replace_matched
begin
External(\\_SB.PCI0.RP05.PEGP._OFF, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.RP05.PEGP._OFF)) { \\_SB.PCI0.RP05.PEGP._OFF() }\n
%1
end;
Gördüğünüz gibi rehber uzun olduğu için herkese birebir yardım etmem olanaksız. Umarım bana anlayış göstrebilirsiniz.
Ekli dosyalar
-
100.2 KB Görüntüleme: 31,584
Moderatörün son düzenlenenleri: