Hackintosh kurulumundan sonra kimi donanımlarımızı tanıtmak için kext kullanmaktayız. Ancak bazı durumlarda, kext ile donanım tanıtmayabiliriz, tanıtabilselte donanım düzgün çalışmayabilir. Bu gibi durumlarda en iyi çözüm DSDT düzenleyerek çalışmayan donanımlarımızın OS tarafından doğru bir şekilde tanıtılması sağlamaktır.
Bu rehberde sizlere sistemininizin DSDT / SSDT dosyalarını nasıl çıkartacağınızı, bunları nasıl sökeceğinizi ve yama işlemlerini nasıl yapacağınızı anlatacağım.
DSDT düzenlemede takip edilecek adımlar şu şekildedir:
- Yerleşik ACPI dosyalarının çıkartılması
- Bu dosyaların sökülmesi
- Dosyaların analizi ve filtre edilmesi
- Yama işlemi
- Dosyanın derlenip (Compile) kaydedilmesi ve kurulumu.
BÖLÜM 1: Yerleşik ACPI Dosyalarının Çıkartılması
Bütün BIOS uygulamaları İşletim sistemine ACPI dosyalarını temin eder. Dolayısıyla bu dosyaları OS kurulumundan sonra çıkartmak mümkündür. ACPI dosyalarını çıkartmak için Linux, OS X ya da Wİndows işletim sistemini ya da CLover bootloader'ı kullanabilirsiniz. Çıkartılan dosyaların isimleri genel olarak aynıdır ancak bunları çıkartırken kullanılan program nedeni ile farklı isimlendirilebilirler.
Bu rehberde ACPI dosyalarını çıkartmak için iki farklı yöntemi göstereceğiz. Bunlar;
- OS X kurulu sistemde Clover F4 metodu ile
- Linux işletim sistemi ile
Çıkartma kolaylığı ve ACPI / orijin ile ACPI / yamalı arasındaki karşılaştırmanın kolay olması nedeniyle Clover F4 ile çıkartmak önerilen yöntemdir.
Clover Boot yükleme ekranında, F4 tuşuna bastıktan sonra Clover yerleşik ACPI dosyalarını EFI / CLOVER / ACPI / Origin içine çıkaracaktır. OS X boot ettikten sonra bu dosyalara sökmek ve yamalamak için yukarıdaki dosya yolundan ulaşabilirsiniz.
Not: Bazı BIOS uygulamalarında F4 tuş tek başına çalışmayabayabilir. Bunun yerine FN+F4 tuşları beraber kullanılması gerekebilir. Eğer F4 ile dosyalar çıkartılmamışsa, FN+F4 ile deneyin.
Kimi zaman Clover ile ACPI dosyaları çıkartılırken aynı SSDT dosyalarını kopya çıkartabilir. Bu kopya SSDT dosyaları ACPI dosyaları sökülmesi esnasında problem çıkartabilirler. Bu gibi durumlarda bu kopya SSDT dosylarının tespit edilmesi ve bunların silinmesi gerekir. Bunları tespit etmenin en kolay yolu, dosya boyutlarını kontrol etmektir. Aynı dosya boyutuna sahip dosyalar çift çıkartılmış SSDT dosyalarıdır. Bu dosyaların boyutlarını görmek için aşağıdaki terminal komutunu kullanın.
Kod:
ls -l SSDT*.aml
Linux içinden yerleşik ACPI dosyalarına dirak olarak ulaşabilirsiniz. Bu dosyalar /sys/firmware/acpi/tables ve sys/firmware/acpı/tables/dynamic konumunda bulunurlar. Bütün bu dosyaları terminal uygulaması içinde tek bir komut ile kopyalayabilirsiniz.
Linux'tan ACPI dosyalarını çıkartmak için Linux kurulumu yapmanıza gerek yok. Linux'u USB üzerinden boot ederek bu dosyaları çıkartabilirsiniz.
- Bunun için ilk olarak aşağıdaki rehberi takip ederek, Wİndows üzerinde USB'den boot edilebilir bir Linux imajı oluşturun.
How to create a bootable USB stick on Windows | Ubuntu - Bir adet USB disk bulun ve bunuda FAT32 olarak formatlayın.
- Linux sistem açıldığında aşağıdaki terminal komutunu kullanarak ACPI dosyalarını FAT32 olarak formatlanmış USB diskine kopyalayın.
Kod:sudo cp -R /sys/firmware/acpi/tables DEST
BÖLÜM2: ACPI Dosyalarını Sökmek İçin Kullanılacak Araçları Hazırlama
Çıkarttığımız ACPI dosyalarınızı düzgün bir şekilde sökmek için, Terminal'den çalıştırılan bir iasl derleyiciye ihtiyacımız var.
Bu derleyiciyi aşağıdaki bağlantıdan indirebilirsiniz.
https://bitbucket.org/RehabMan/acpica/downloads/iasl.zip
Dosyayı indirdikten sonra bu dosyayı /usr/bin içine taşıyın. Ya da bu işlemi Terminal içinde bir komut ile kolaylıkla yapabilirsiniz.
Örnek olarak; Eğer indirdiğiniz iasl dosyası Downloads klasörü içinde ise komut şu şekilde olacaktır.
Kod:
cd ~/Downloads
unzip iasl.zip
sudo cp iasl /usr/bin
BÖLÜM 3: ACPI Dosyalarının Sökülmesi
Çıkarttığımız yerleşik ACPI dosyaları doğrudan MaciASL'de açılabilir, ancak bunu yapmanızı önermem. Zira bir AML dosyasını doğrudan MaciASL'de açmak, MaciASL'nin dosyayı (iasl'den) bağımsız olarak parçalamasına neden olur ve bu AML dosyaları karmaşık referanslar içeriyorsa, bu dosyalar doğru bir şekilde sökülmez. Bu da ACPI dosyalarında bir çok hata almanıza neden olur.
Dolayısıyla kullanılacak en doğru yöntem Terminal'de iasl kullanarak ACPI dosyalarının sökülmesidir.
- Bunun için ilk olarak bütün DSDT ve SSDT dosyalarınızı Masaüstüne oluşturacağınız bir klasöre taşıyın (Burada bir önemli hatırlatma; DSDT ve SSDT isimleri ile başlamayan dosyaları kesinlikle KOPYALAMAYIN) ve dosyaların uzantılarını .aml uzantılı olacak şekilde değiştirin.
- Bundan sonra Terminal komutu kullanarak bu dosyaları sökme işlemini uygulayın.
Kod:cd "SSDT / DSDT dosyaları koyduğunuz lokasyon" iasl -da -dl *.aml
Not: DSDT / SSDT olmayan diğer ACPI dosyalarını -da komutu ile sökmeye çalışmayın. Zira bu bir işe yaramaz.
Not: Ek olarak aşağıda anlatacağım refs.txt yöntemini kullanarak sökme işlemi sonrası oluşabilecek DSDT / SSDT' deki olası bazı hataları önleyebilirsiniz.
[/WARNING]
Bu işlemden sonra dosyalarımız, MacIASL programı ile düzenleyebilmek için asl uzantılı olarak sökülmüş oldu. Elbette dosyalar üzerinde gerekli düzenlemeleri yaptıktan sonra, bu dosyaları tekrar kaydederken .aml (ACPI Machine Language Binary") uzantılı olarak kaydedip, Clover Bootloader'ın kurulu olduğu yere yüklemek gerekmekte. ( /EFI/ CLOVER / ACPI / Patched).
Burada küçük bir ipucu vermek istiyorum. Bu dosyaları kaydederken "Save as" olarak kayıt yapın. Bu sayede .dsl dosyalarınızı yedek olarak saklayabilir. Gerektiğinde bunları kullanabilirsiniz.
BÖLÜM 4: ACPI Dosyalarının "refs.txt" İle Sökülmesi
Bazı durumlarda ACPI dosyaları içerisinde çözülememiş harici bildirimler (semboller vardır. iasl sökücü bunların argüman numaralarını tahmin etmeye çalışır. Ancak çoğu zaman bu sonuçlar doğru değildir. Doğru bir şekilde ACPI sökebilmek için uygulanacak yöntem bu bildirimleri harici bir metin dosyasında sağlayarak düzeltmektir. Çözülemeyen bazı yaygın semboller şunlardır:
- SGP0
- ECRD
- ECWT
- MMTB
- İlk olarak aşağıda vereceğim kodların tümünü seçip Fare Sağ klik ile kopyalayın.
Kod:External(MDBG, MethodObj, 1) External(_GPE.MMTB, MethodObj, 0) External(_SB_.PCI0.LPCB.H_EC.ECWT, MethodObj, 2) External(_SB_.PCI0.LPCB.H_EC.ECRD, MethodObj, 1) External(_SB.PCI0.LPCB.H_EC.ECMD, MethodObj, 1) External(_SB_.PCI0.PEG0.PEGP.SGPO, MethodObj, 2) External(_SB.PCI0.GFX0.DD02._BCM, MethodObj, 1) External(_SB.PCI0.SAT0.SDSM, MethodObj, 4) External(_SB.PCI0.SAT1.SDSM, MethodObj, 4) External(_GPE.VHOV, MethodObj, 3) External(_SB.PCI0.XHC.RHUB.TPLD, MethodObj, 2)
- Masaüstünde boş alana tıklayın.
- Ardından Menü Bar / Edit / "Show Clipboard" tıklayın.
- Bu işlemden sonra Clipboard penceresinin açıldığını ve yukarıdaki kodların bu pencerenin içine kopyalandığını göreceksiniz.
- Şimdi Terminal uygulamasını açın ve aşağıdaki kodu yazarak girin. (Yazarak girin diyorum zira kopyalarsanız clipboard içindeki kodlar silinir)
Kod:pbpaste>refs.txt
- Bu kodu girdikten sonra çalışma dizini içerisinde refs.txt oluşmasını sağlayacaktır.
- Eğer refs.txt dosyasını bulamazsanız. Dock içinden Fare Sağ klik ile yeni Finder Penceresi açın.
- Gelen ekranda aram kutusuna refx.txt yazın.
- Dosyayı bulduktan sonra bunu DSDT / SSDT dosyalarının olduğu klasörün içine kopyalayın.
- Şimdi Terminal içine şu kodu girin.
Kod:cd "SSDT / DSDT dosyaları koyduğunuz lokasyon" iasl -da -dl -fe refs.txt DSDT.aml SSDT*.aml
- Bu işlemden sonra DSDT/ SSDT dosyaları refs.txt ile sökülecektir.
BÖLÜM 5: ACPI Dosyalarını Filtrelemek
Eski bilgisayarlar (Sandy Bridge ve önceki) için CPU ile ilgili SSDT'ler sorunlara neden olabilir. Durum böyle ise (alternatif DropTable'ları veya DropOem = true veya DropSSDT = Yes'i zaten kullanıyorsanız), bu tür SSDT'leri ACPI / Patched içine eklememelisiniz.
Başarılı bir şekilde sökme işlemini yaptıktan sonra, herbir SSDTs dosyasının neleri kontrol ettiğini tespit edin. Eğer CPU ile ilişkili ve soruna neden olduğu bilien bir SSDT varsa, bunu bir kenara ayırın ve bunları Bootloader’a SSDTs enjekte ederken kullanmayın. Genellikle CPU ile ilişkili SSDTs’ler Scope _PR.CPUx ile deklare edilir ve bunlar silinebilir.
Bazı tipik SSDT örnekleri şunlardır:
- SATA: Harici yada Dahili olabilir. Sizin seçiminiz.
- PTID: Genel olarak bu dosya OS için gereksizdir ve ayrıca bir çok hatada içerir. Ancak nadirde olsa bu bize fan hızı, sıcaklık, ve diğer sistem durumu hakkında ipuçları verebilir.
- IAOE: Eğer bu SSDT varsa, muhtemelen DSDT içindeki _PTS and _WAK ‘tan erişim sağlamıştır. Bunsuz uyku, uykudan uyanma çalışmayabilir.
- GFX0: Bu SSDT genelde entegre Grafik Kartı içindir. BU SSDT Ekran arkaplan için yamalayabilirsiniz. Eski Laptoplar’da GFX0, genellikle DSDT içinde tanımlanır. Haswell Laptop’lar da bunlar genellikle SSDT içinde tanımlanır (Ancak bazen de DSDT içinde tanımlanabilir).
- PEGP: PEGP genel olarak harici ve switch özelliğe sahip ikili grafik kartları içindir. Bunlardan birden çok olabilir ve bunların başarılı bir yama yapılması için hepsinin bir grup olarak eklenmesi gerekir. OS X çalıştırırken harici kartı devre dışı bırakmak gerektiğinde SSDT içinde bu yama olmalıdır.
BÖLÜM 6 : Hataları Düzeltmek, DSDT Yama İşlemi
İasl kullanarak yerleşik ACPI dosyalarımızı çıkartmamıza rağmen iasl’ın kendisinden kaynaklanabilecek hatalar ve Laptop’ların OEM arasında derleme ortamındaki farklılıklar yüzünden, demonte ettiğimiz dosyalarda hatalar oluşabilir. Örnek olarak; Yaygın olarak hataların sebep olan bir unsur, bazı referans metotların aslında Windows için olmasıdır ( MMTB ve MDBG gibi).
Kısaca özetlemek gerekirse amacımız; hangi dosyaların hata verdiğini tespit etmek ve bunları uygun bir şekilde yamalayıp ‘compile’ yapıldığında hata vermemesini sağlamak. Bu hataları MaciASL ile düzenlemek için aşağıdaki bağlantıdan Laptop yama reposu ve bunları düzenlemek için MaciASL uygulamasına ulaşabilirsiniz:
https://bitbucket.org/RehabMan/os-x-maciasl-patchmatic/downloads/RehabMan-MaciASL-2018-0507.zip
GitHub - RehabMan/Laptop-DSDT-Patch: Common DSDT patches for Ivy/Sandy/Haswell laptops for running OS X
Güncel macIASL bağlantısı:
MaciASL DSDT yaması Repolarını eklemek
Bu arada kısaca bir DSDT yama reposunu macIASL programına nasıl ekleyeceğinizi anlatalım.
- Bağlantıdan MaciASL uygulamasını indirip bunu "Uygulamalar klasörüne koyun.
https://bitbucket.org/RehabMan/os-x-maciasl-patchmatic/downloads/RehabMan-MaciASL-2018-0507.zip - Ardından uygulamayı çalıştırın.
- MaciASL Menü Bar içinde "Prefences" seçin.
- Açılan pencerede "Sources" seçin.
- Şimdi (+) tuşuna basın.
- Burada "Name" yazan yere Repo için bir isim girin (Örnek: osxinfo_repo)
- Ardından aşağıdaki bağlantıyı "URL" yazan yere kopyalayın.
http://raw.github.com/RehabMan/Laptop-DSDT-Patch/master
Doğru bir şekilde kurulumları yapmak için bağlantılardaki ‘README’ dosyalarını mutlaka okuyun. Yamalar için syntax/hata problemleri "[syn]" ile başlar. Genel bir örnekleme verirsek, eski DSDT dosyalarında bunlar "Fix _PLD Buffer/Package Error", "Fix TNOT Error", ve "Fix FPED Parse Error” şeklindedir. Hangi yamaya ihtiyacınız olduğunu belirlemek için iasl compiler yaptıktan sonra gelen hata mesajına bakabilir ve hangi satırda hangi kodun hata verdiğini tespit edebilirsiniz. Ayrıca MaciASL önizleme penceresinden yama uygulandıktan sonraki değişikleri görebilirsiniz. Eğer herhangi bir hata türüne aşina değilseniz, denemeler yaparak bunlar için deneyim edinebilirsiniz.
Bazı hatalar için, sadece hataya neden olan kod satırını kaldırmak yeterli olabilir. Ancak burada da silinen satırın sistemin düzgün çalışması için gerekli kodu içerip içermediğine bakmak gerekir.
Örnek vermek gerekirse, ‘external’ hatasını düzeltmek için bu hataya neden olan bildirimleri silmek yeterlidir. Eğer isterseniz kendi otomatik yamanızı oluşturup bu satırları silip denemeler yapabilirsiniz. Ayrıca bu denemeler size ACPI hakkında deneyim kazanmanızı sağlar.
Sonuç olarak amacımız, her .dsl dosyasını hatasız bir şekilde compile edebilmek
[WARNING]Not: MaciASL içinde Compile yaptığınızda warnings/remarks/optimizations hatalarını görmezden gelin. Dikkat etmeniz gereken sadece Error olanlardır.[/WARNING]
BÖLÜM 7: Yamalar
Yamaları açıklamadan önce MaciASL ile yama işlemini anlatalım:
- Yukarıdaki gibi MaciASL uygulmasını ve yama reposunu ekledikten sonra, DSDT.asl dosyanızı açın.
- Programın üstünde "Patch" yazan yere tıklayın.
- Ardından "Compile" seçeneği ile yamanın hata verip vermediğini kontrol edin.
Bunlar:
- "Fix _WAK Arg0 v2"
- "HPET Fix"
- "SMBUS Fix"
- "IRQ Fix"
- "RTC Fix"
- "OS Check Fix"
- "Fix Mutex with non-zero SyncLevel"
- "Fix PNOT/PPNT" (yalnızca CPU ile ilgili SSDT'leri düşürdüğünüzde kullanın)
- "Add IMEI" (DSDT veya SSDT'lerinizde IMEI / HECI / MEI aygıtlar varsa kullanmayın)
Not: OS Check Fix yaması cihazınız ile gelen Windows sürümüyle veya şu anda kullandığınız Windows sürümüyle alakasızdır.
Not: Eğer bütün "OEM SSDT'leri kullanıyorsanız "Fix PNOT / PPNT" yamasını kullanmayın. Bu yama yalnızca OEM CPU ile ilgili SSDT'leri atladığınız durumlar için tasarlanmıştır.
[/WARNING]
USB yamaları cihazın sebepsiz uykudan uyanmasını yada uyku moduna geçtikten sonra cihazın uyanmama sorunu çözer.
Donanımınız için uygun USB yamaları:
- "6-series USB"
- "7-series/8-series USB"
Örnek olarak; ProBook cihazlar bu yamanın modifiye edilmiş versiyonunu kullanırlar.
Lenovo u310/u410 için ise şunu kullanır;
- "7-series USB3 Multiplex”
Sebepsiz uykudan uyanma sorununa bir diğer alternatif çözüm ise AppleUSBXHCI.kext ile "USB _PRW(0x6D) kullanmaktır. Hangi _PRW metodunun sizin DSDT’ yaması için uygun dönüşü sağladığını belirlemek için DSDT dosyanızı inceleyin. Ayrıca bununla iligili yama repo içinde mevcuttur;
- "USB _PRW(0x6D)
( XHC/EHC/HDEF için 0x0D and 0x6D değerleri _PRW’den döner.)
- "Haswell LPC"
- "Skylake LPC"
Yinelenen Tanımlayıcılar: Yamalanmış dosyalarınızın aynı tanımlayıcıları içermediğinden emin olun. Sıklıkla karşılaşılan problemlerden biri SSDT’ye eklenmiş _DSM metodunun, _DSM ile tanımlanmış başka bir OEM SSDT’ ye eklenmiş olmasıdır. Bunu önlemek için tüm DSDT/ SSDT yama işlemlerine başladığınızda ilk olarak "Remove _DSM methods” yamasını uygulayın.
Yamalı AppleHDA kullanarak Yamalama
Eğer düzenlenmiş bir AppleHDA.kext kullanıyorsanız bunu kullanabilmek için ihtiyaç duyulan iki yama vardır:
- "Audio Layout 12" ( Layout-id 12 sizin DSDT’de kullanılan ile değiştirin)
- “IRQ Fix”
Yamalı AppleHDA içindeki layout-id belirlendikten sonra ilk olarak, ondalık içindeki codec-id bilmek gerekiyor.( Örnek: 0x10ec0269 = 283902569)
Bunun için AppleHDAHardwareConfigDriver.kext içindeki info.plist’ bakın. (AppleHDA.kext/Contents/PlugIns/AppleHDAHardwareConfigDriver.kext/Contents/Info.plist) .
Daha sonra HDAConfigDefault altında codec-id bulun.
Sizin Codec-id ile eşleşen LayoutID, size gereken layout-id’ dir. Ayrıca yamalı AppleHDA içinde codec kimliği veren birden çok layout-id olabilir. Bu gibi durumlarda bunlardan birini seçin.
BÖLÜM 8: Dosyaları Bootloader’a Yüklemek İçin Kaydetmek
DSDT/ SSDSs düzenledikten sonra. bunları bootloder’ın bulunduğu konuma yüklemek için kaydetmek gerekiyor. Her bootloader’ın konumu tektir ve adlandırmak için farklı gereksinimleri vardır. Dosyaların "ACPI Machine Language Binary” içinde kaydedilmesi gerekir(MaciASL->Save As). Bunların .aml uzantısı ile text dosyası olarak kaydedilmesi kernel panic hatalarına ve OS X içinde hatalara neden olur.Clover:
Dosyalar Clover bootloader bölüntüsünde (Genellikle EFI bölüntüsü), in EFI/Clover/ACPI/patched. konumunda olmalı. Eğer OEM DSDT varsa, DSDT.aml doyası bunun yerine konulacaktır. Clover V3062 sürümünden eski versiyonlarda, SSDTs’ lerin SSDT-x yada SSDT-xx olarak adlandırılmış olması gerekiyor (X yazan yerlere sayı gelecek. en çok SSDT-19’a kadar). Clover ayrıca numaralar arasında boşluklara izin verir( Örnek SSDT-1.aml, SSDT-5.aml, SSDT-6.aml).
Clover version v3062+ ve üstünde bütün *.aml dosyaları ACPI/patched içinde bulunur. Ayrıca yamalı SSDTs yüklerken, SSDT dosyalarının sırasının Config.plist/ACPI/SortedOrder içinde de girildiğinden emin olun.
Son olarak unutulmaması gereken önemli bir ayrıntı, OEM SSDT düşürmeden bunların yerine yamalı SSDT sağlayamazsınız. Bunun için en kolay yol Clover için ise ACPI/SSDT/DropOem=true kullanmaktır. Ancak bundan sonra yamalı ( yamasız ) dosyaları bootloader için de yükleyebilir ve çalıştırabilirsiniz.
Değişen Bölgeler:
ACPI içinde operasyon bölgesi MMIO, SystemMemory, EmbeddedControl vs. bölgelerini tanımlar. Bu bölge adresleri makine konfigürasyonu, BIOS versiyonu ve BIOS seçeneklerine bağlı olarak sabit adreslerdir. Bazı durumlarda bu bölgeler beklenmedik bir şekilde değişebilir. Bu durum "floating regions” olarak adlandırılır.
BIOS bazen farklı bölge adresleri koyabilir. Bu gibi durumlarda BIOS'un koyduğu bu adresler, yama yaptığınız DSDT/SSDT ile uyuşmayabilir. Bu gibi durumlarda belirsiz kararsızlık sorunları ortaya çıkabilir.
Bu gibi durumlar için en iyi yol Clover ‘FixRegions’ özelliğini kullanmaktır. Bununla ilgili ayruntılı bilgiye Clover Wiki’den ulaşabilirsiniz. "floating regions” için SSDT için uygun bir yama sağlanmadığı sürece sağlıklı bir çözümü yok.
Son düzenleme:
- BootLoader
- OpenCore 0.6.4
- Anakart Modeli
- Asus Z170 Deluxe
- İşlemci Modeli
- Intel i7 6700K
- Grafik Kartı
- 8 GB Sapphire RX 580 & HD 530
- Ses Kartı Modeli
- ALC 1150
- Ağ Aygıtları
- Broadcom BCM43xx - I211 Gigabit Ethernet
- Disk ve RAM
- 500GB NVMe & 32 GB DDR4