OS X işletim sistemini Laptop cihazlarımızda sorunsuzca kullanmak için en iyi yol DSDT / SSDT kullanmaktır. Bunun için çoğu zaman internet üzerinden sistemimize uygun olduğunu düşündüğümüz DSDT dosyalarını kullanıyoruz. Ancak bu dosyalar cihazımız için ne kadar uygun görünürlerse de, en ufak bir farklılık da bile sistemizde hata verme olasılıkları çok yüksektir. Bu yüzden bu rehberde sistemimiz için uygun OEM DSDT/ SSDT yama işlemlerini nasıl yapacağımızı anlatacağız.
Yama sürecinde aşağıdaki adımları takip edeceğiz:
Tüm BIOS’ lar işletim sistemleri için ACPI dosyası oluşturur. Bu sayede herhangi bir işletim sisteminde bile, yama için kullanmak üzere ACPI dosyası çıkartabilirsiniz. Bu rehberde biz üç farklı metoda odaklanacağız. Bunlar:
Hali hazırda kurulu bir OS X sisteminiz varsa ve şu ana kadar herhangi bir şekilde yamalı bir ACPI kullanmadıysanız, patchmatic ile sisteminizin yerleşik DSDT / SSDT dosyalarını çıkartabilirsiniz. Bunun için ilk olarak patchmatic indirin: RehabMan/OS-X-MaciASL-patchmatic · GitHub ( Kurulum için dosyanın bulunduğu linkteki README dosyasını mutlaka okuyun) Patchmatic dosyasını usr/bin konumuna kopyalayın. Yada terminale şu komutu girerek kopyalayın.
Patchmatic kurulumunu yaptıktan sonra terminale şu komutları girin:
Bu işlemler sonunda Patchmatic yüklü tüm ACPI dosyalarını çıkartacak ve onları geçerli dizinlere kopyalayacaktır. Ancak eğer bootloader içinde herhangi bir şekilde DSDT / SSDT’ye enjekte eden komut kullanıyorsanız, yerleşik ACPI dosyasını doğru bir şekilde çıkartamazsınız. Bu yüzden bunları kullanmadığınızdan emin olun. Örnek vermek gerekirse: Chameleon için DropSSDT= Yes yada Clover’da DropOEM=true komutları kullanıyorsanız, yerleşik SSDT dosyaları OS X bunları yüklemeden önce oluşturulduğundan, Patchmatic bunları eksik çıkartır. Aynı sorun Clover Config / DSDT fixes kullanıldığında da oluşur. Ayrıca yerleşik SSDT dosyanızda bazı enjekteler kullanıyorsanız (GeneratePStates/GenerateCStates=Yes, yada Clover /ACPI/SSDT/Generate/CStates /ACPI/SSDT/Generate/PStates ) bunlarda SSDT ayıklarken bir takım komplikasyonlara yol açar.
Yukarıda yazdığımız bu sorunlardan dolayı, Linux yada Clover f4 kullanmak Patchmatic’e göre daha sorunsuz çözüm sunar.
Not: Patchmatik ile DSDT / SSDT sökmek DSDT / SSDT yamaları onaylerken yararlı bir tanı aracıdır.
Clover F4 İle Çıkartmak
Clover boot ekranında F4 tuşuna bastığınızda, Clover sisteminizin ACPI dosyalarını EFI/Clover/ACPI/origin konumuna çıkartır. Sistemi açtıktan sonra Bu dosyaları ayıklayabilir ve yamalama işlemini yapabilirsiniz. ( Unutmadan; Bazı klavyelerde F4 yerine Fn+F4 kullanmak gerekebilir. Eğer sadece F4 kullandığınızda dosyalar oluşmamışsa Fn+F4 şeklinde deneyin).
Bazen Clover F4, SSDT’lerden birçok aynı kopya çıkartabilir. Bu da sökme işleminde hataya sebep olur. Bu yüzden sökme sırasında sorunlar ile karşılaşırsanız bütün SSDTleri analiz etmeli ve hata veren kopya SSDT’leri silmek gerekir.
Bu sebeple, Linux ile ACPI dosyalarını çıkartmak, yukarıda anlatılan diğer yöntemlere göre daha kolay ve stabildir. ( Linux kullanımda yukarıdaki sorunlar ile karşılaşıldığına dair herhangi bir rapor şu ana kadar yayınlanmadı)
Linux İle Çıkartmak
Linux’ ta sisteminizin tüm ACPI dosyaları direk olarak dosya sisteminde hazırdır. Bunları
/sys/firmware/acpi/tables and /sys/firmware/acpi/tables/dynamic dosya yolundan bulabilirsiniz. Yada tek bir terminal komutu ile kopyalayabilirsiniz.
Ayrıca sisteminize Linux kurmak zorunda değilsiniz. Aşağıdaki bağlantıdan direk USB’den çalışan Linux hazırlayın.
How to create a bootable USB stick on Windows | Ubuntu
Linux terminal içinde şu komutları girin:
Yukarıda ki bu komut ile, bütün ACPI dosyalarınız FAT32 olarak formatlanmış USB’ye kopyalanır. FAT32 formatının kullanılmasının sebebi, dosya izinleri sorunlarını önlediği için tercih edilir. Yukarıdaki terminal kodundaki Auto mounted için DEST değeri, kullandığınız Linux sürümüne ve Linux’u nasıl boot ettğinize bağlıdır. Mount-Point görmek için terminal içinde ‘mount’ yazın. Yada Linux dosya gezgininde mouse’u Volume ismi üzerine getirerekte öğrenebilirsiniz.
ACPI Dosyalarının Sökülmesi
Yerleşik dosyalarınızı direk olarak MaciASL üzerinden açabilirsiniz. Ancak bu önerilmez. Zira direk olarak MaciASL üzerinden açılan bir AML dosyası MaciASL tarafından bağımsız olarak sökülür ve şayet diğer AML dosyalarında karmaşık bir takım raferanslar varsa, bu sökme işlemi başarısız olacaktır. Ve düzeltilmesi çok zor hatalar oluşacaktır.
Bu yüzden en doğru yöntem, Terminal içinde iasl kullanarak sökme işlemi yapmaktır.
Bu işlemden sonra MaciASL ile kullanabilecek şekilde .dsl dosyalarımızı oluşturmuş olduk. Tabiki bunları kullanabilmek için farklı kaydet seçeneği ile "ACPI Machine Language Binary" formatında, .aml dosya uzantısı şeklinde kaydetmemiz gerekiyor. Bundan sonra dosyaları bootloader içindeki konumlarına taşıyın. Her ihtimale karşı, yamalanmış .dsl dosyalarının bir yedeğini tutun. Zira gelecekte eğer yeni bir güncelleme gerektiğinde bu dosyalara ihtiyacınız olabilir.
ACPI Dosyalarını Filtrelemek
Yaygın olarak CPU’nuz için SSDT üretilirken, bu üretilen SSDT ile CPU için yerleşik SSDTs’ ler çakışabilir. Bu sebeple, bir çok güç yönetimi hakkında ki rehber, "dropping" OEM SSDTs uygulanmasını ister. Ancak bütün OEM SSDTs’ leri düşürmek, özellikle yeni PC’ lerde daha çok ACPI içeriğini DSDT’ten SSDTs’ ye taşır. Bu yüzden sadece CPU ile ilgili olan ve gerekli olmayan SSDTs’leri silmek, yama gereken yada yamasız diğer önemli SSDTs’ leri tutmak gerekir.
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 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:
İ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. Burada yapılması gereken, 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:
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 bakılır.
Ö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
Not: MaciASL içinde Compile yaptığınızda warnings/remarks/optimizations hatalarını görmezden gelin. Dikkat etmeniz gereken sadece Error olanlardır.
Yamalar
Genel olarak bir DSDT yaması sadece uygun bir düzeltme bulunduğunda uygulanmalıdır. Nadiren hata veren ancak yaygın olarak kullanılan, sistemin ihtiyaç duyduğu gerekli bazı yamalar vardır.
Bunlar:
Eğer Yosemite’de GenericUSBXCHI.kext kullanıyorsanız, bu kextin Yosemite için hazırlanmış oluğundan emin olun. Ayrıca bunun yanında cihazın sebepsiz uyanmasını engellemek için Boot komutu olarak gux_defer_usb2 kullanın.
Sebepsiz uykudan uyanma sorununa bir diğer alternatif çözüm ise AppleUSBXHCI.kext ile "USB _PRW(0x6D) kullanmak ve XHC’ yi XHC1” olarak yeniden isimlendirmektir. Hangi _PRW metodunun sizin DSDT’ yaması için uygun dönüşü sağladığını belirlemek için DSDT dosyanızı inceleyin. Ayrıca Repo içinde "USB _PRW(0x6D) XHC’ -> XHC1” içinde bunlar sağlanmıştır ( XHC/EHC/HDEF için 0x0D and 0x6D değerleri _PRW’den döner.)
Eğer Haswell CPU/8 serisi yongasına sahipseniz ve AppleLPC.kext yüklenmiyorsa, "Haswell LPC” yamasını kullanın. Bu yama DSDT içine uygun bir kimlik enjekte ederek kextin yüklenmesini sağlar.
Yeniden Adlandırma (Renames) : Ortak nesneleri OS X ile eşleşecek şekilde yeniden adlandırmak gerekir. ( Mesela IGPU güç yönetimi için GFX0-> IGPU olarak yeniden adlandırmak gerekir). Bu durumlarda, bütün DSDT / SSDT bütün bu ortak nesenelerin yeniden adlandırılması gerekir.
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.
Spesifik Sorunlar İçin Yamalar
Pil Göstergesi Yamalama:
Ekran Arka Plan Yaması:
NVIDIA /AMD Ekran kartını devre dışı bırakmak için yama:
Yamalı AppleHDA kullanarak Yamalama
Yamalı AppleHDA.kext ile birlikte ihtiyaç duyulan iki yama vardır:
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.( Baştan savma yapılan AppleHDA yamalarında bu girişlerden bir yada birden çok olabilir).
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.
Dosyaları Bootloader’a yüklemek iç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 orijinal SSDTs sıralaması gibi olmasına mutlaka dikkat edin (orijinal SSDT, SSDT-1.aml, SSDT-5.aml, SSDT-6.aml ise yamalı olanlarda aynı olmalı).
Chameleon:
Dosyaların Sistem içindeki Extra klasöründe olması gerekiyor. Eğer OEM DSDT varsa, DSDT.aml doyası bunun yerine konulacaktır. Chameleonda SSDT isimlendirmede boşluklara izin vermez. SSDT dosyaları SSDT.aml, SSDT-1.aml, SSDT-2.aml, SSDT-3.aml şeklinde sıralanarak yüklenir. Dolayısıyla sizdeki SSDT dosyaları SSDT.aml, SSDT-1.aml, SSDT-4.aml, SSDT-5.aml şeklinde ise, sadece SSSDT.aml, SSDT-1.aml yüklenecektir. SSDT-4.aml and SSDT-5.aml ise gözardı edilecektir.
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 Chameleon için DropSSDT=Yes, Clover için ise ACPI/SSDT/DropOem=true kullanmaktır. Ancak bundan sonra yamalı ( yamasız ) dosyaları bootloader için yükleyebilirsiniz.
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 BİOS'un koyduğu bu adresler, yama yaptığınız DSDT/SSDT ile uyuşmayabilir. Bu gibi durumlarda belirsiz stabilize 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.
Ayrıca videolu anlatım için:
Kaynaklar:
MaciASL (RehabMan fork): RehabMan/OS-X-MaciASL-patchmatic · GitHub
patchmatic: RehabMan/OS-X-MaciASL-patchmatic · GitHub
iasl (RehabMan fork): RehabMan / acpica / Downloads — Bitbucket
ACPI spec: ACPI
RehabMan github: RehabMan · GitHub
Clover laptop guide: [Guide] Booting the OS X installer on LAPTOPS with Clover UEFI
Clover config.plist files for laptops: RehabMan/OS-X-Clover-Laptop-Config · GitHub
Clover thread: http://www.projectosx.com/forum/inde...showtopic=2562
Clover changes: http://www.projectosx.com/forum/inde...showtopic=2656
Clover installer discussion: http://www.projectosx.com/forum/inde...showtopic=3191
Yama sürecinde aşağıdaki adımları takip edeceğiz:
- Yerleşik dosyaların çıkartılması
- Yerleşik dosyaların sökülmesi
- Yerleşik dosyaların analizi ve filtreleme
- Yamalama
- Compile / Kayıt ve kurulum
Tüm BIOS’ lar işletim sistemleri için ACPI dosyası oluşturur. Bu sayede herhangi bir işletim sisteminde bile, yama için kullanmak üzere ACPI dosyası çıkartabilirsiniz. Bu rehberde biz üç farklı metoda odaklanacağız. Bunlar:
- OS X üzerinden patchmatic kullanmak
- Clover F4 komutu kullanmak
- Linux kullanmak
Hali hazırda kurulu bir OS X sisteminiz varsa ve şu ana kadar herhangi bir şekilde yamalı bir ACPI kullanmadıysanız, patchmatic ile sisteminizin yerleşik DSDT / SSDT dosyalarını çıkartabilirsiniz. Bunun için ilk olarak patchmatic indirin: RehabMan/OS-X-MaciASL-patchmatic · GitHub ( Kurulum için dosyanın bulunduğu linkteki README dosyasını mutlaka okuyun) Patchmatic dosyasını usr/bin konumuna kopyalayın. Yada terminale şu komutu girerek kopyalayın.
Kod:
cp patchmatic /usr/local/bin/patchmatic
Patchmatic kurulumunu yaptıktan sonra terminale şu komutları girin:
Kod:
cd ~/Desktop
mkdir extract
cd extract
patchmatic -extract
Bu işlemler sonunda Patchmatic yüklü tüm ACPI dosyalarını çıkartacak ve onları geçerli dizinlere kopyalayacaktır. Ancak eğer bootloader içinde herhangi bir şekilde DSDT / SSDT’ye enjekte eden komut kullanıyorsanız, yerleşik ACPI dosyasını doğru bir şekilde çıkartamazsınız. Bu yüzden bunları kullanmadığınızdan emin olun. Örnek vermek gerekirse: Chameleon için DropSSDT= Yes yada Clover’da DropOEM=true komutları kullanıyorsanız, yerleşik SSDT dosyaları OS X bunları yüklemeden önce oluşturulduğundan, Patchmatic bunları eksik çıkartır. Aynı sorun Clover Config / DSDT fixes kullanıldığında da oluşur. Ayrıca yerleşik SSDT dosyanızda bazı enjekteler kullanıyorsanız (GeneratePStates/GenerateCStates=Yes, yada Clover /ACPI/SSDT/Generate/CStates /ACPI/SSDT/Generate/PStates ) bunlarda SSDT ayıklarken bir takım komplikasyonlara yol açar.
Yukarıda yazdığımız bu sorunlardan dolayı, Linux yada Clover f4 kullanmak Patchmatic’e göre daha sorunsuz çözüm sunar.
Not: Patchmatik ile DSDT / SSDT sökmek DSDT / SSDT yamaları onaylerken yararlı bir tanı aracıdır.
Clover F4 İle Çıkartmak
Clover boot ekranında F4 tuşuna bastığınızda, Clover sisteminizin ACPI dosyalarını EFI/Clover/ACPI/origin konumuna çıkartır. Sistemi açtıktan sonra Bu dosyaları ayıklayabilir ve yamalama işlemini yapabilirsiniz. ( Unutmadan; Bazı klavyelerde F4 yerine Fn+F4 kullanmak gerekebilir. Eğer sadece F4 kullandığınızda dosyalar oluşmamışsa Fn+F4 şeklinde deneyin).
Bazen Clover F4, SSDT’lerden birçok aynı kopya çıkartabilir. Bu da sökme işleminde hataya sebep olur. Bu yüzden sökme sırasında sorunlar ile karşılaşırsanız bütün SSDTleri analiz etmeli ve hata veren kopya SSDT’leri silmek gerekir.
Bu sebeple, Linux ile ACPI dosyalarını çıkartmak, yukarıda anlatılan diğer yöntemlere göre daha kolay ve stabildir. ( Linux kullanımda yukarıdaki sorunlar ile karşılaşıldığına dair herhangi bir rapor şu ana kadar yayınlanmadı)
Linux İle Çıkartmak
Linux’ ta sisteminizin tüm ACPI dosyaları direk olarak dosya sisteminde hazırdır. Bunları
/sys/firmware/acpi/tables and /sys/firmware/acpi/tables/dynamic dosya yolundan bulabilirsiniz. Yada tek bir terminal komutu ile kopyalayabilirsiniz.
Ayrıca sisteminize Linux kurmak zorunda değilsiniz. Aşağıdaki bağlantıdan direk USB’den çalışan Linux hazırlayın.
How to create a bootable USB stick on Windows | Ubuntu
Linux terminal içinde şu komutları girin:
Kod:
# substitute DEST with the mountpoint of a FAT32 formatted USB stick
sudo cp -R /sys/firmware/acpi/tables DEST
Yukarıda ki bu komut ile, bütün ACPI dosyalarınız FAT32 olarak formatlanmış USB’ye kopyalanır. FAT32 formatının kullanılmasının sebebi, dosya izinleri sorunlarını önlediği için tercih edilir. Yukarıdaki terminal kodundaki Auto mounted için DEST değeri, kullandığınız Linux sürümüne ve Linux’u nasıl boot ettğinize bağlıdır. Mount-Point görmek için terminal içinde ‘mount’ yazın. Yada Linux dosya gezgininde mouse’u Volume ismi üzerine getirerekte öğrenebilirsiniz.
ACPI Dosyalarının Sökülmesi
Yerleşik dosyalarınızı direk olarak MaciASL üzerinden açabilirsiniz. Ancak bu önerilmez. Zira direk olarak MaciASL üzerinden açılan bir AML dosyası MaciASL tarafından bağımsız olarak sökülür ve şayet diğer AML dosyalarında karmaşık bir takım raferanslar varsa, bu sökme işlemi başarısız olacaktır. Ve düzeltilmesi çok zor hatalar oluşacaktır.
Bu yüzden en doğru yöntem, Terminal içinde iasl kullanarak sökme işlemi yapmaktır.
- Bunun için bütün DSDT ve SSDT dosyalarını başka bir dosya yoluna kopyalayın. ( DSDT ve SSDT ile başlamayan dosyaları sakın kopyalamayın!) Ve isimlerini değiştirin.
- Şimdi bunları uygun şekilde sökmek için bir iasl script kullanacağız. Aşağıdaki bağlantıdan güncel iasl indirin. RehabMan / acpica / Downloads — Bitbucket
- İndirdiğniz dosyayı /usr/bin yoluna kopyalayın.
- Terminal açın ve şu komutları girin:
Kod:
cd “SSDT/DSDT nereye kopyaladıysanız"
iasl -da -dl *.aml
Bu işlemden sonra MaciASL ile kullanabilecek şekilde .dsl dosyalarımızı oluşturmuş olduk. Tabiki bunları kullanabilmek için farklı kaydet seçeneği ile "ACPI Machine Language Binary" formatında, .aml dosya uzantısı şeklinde kaydetmemiz gerekiyor. Bundan sonra dosyaları bootloader içindeki konumlarına taşıyın. Her ihtimale karşı, yamalanmış .dsl dosyalarının bir yedeğini tutun. Zira gelecekte eğer yeni bir güncelleme gerektiğinde bu dosyalara ihtiyacınız olabilir.
ACPI Dosyalarını Filtrelemek
Yaygın olarak CPU’nuz için SSDT üretilirken, bu üretilen SSDT ile CPU için yerleşik SSDTs’ ler çakışabilir. Bu sebeple, bir çok güç yönetimi hakkında ki rehber, "dropping" OEM SSDTs uygulanmasını ister. Ancak bütün OEM SSDTs’ leri düşürmek, özellikle yeni PC’ lerde daha çok ACPI içeriğini DSDT’ten SSDTs’ ye taşır. Bu yüzden sadece CPU ile ilgili olan ve gerekli olmayan SSDTs’leri silmek, yama gereken yada yamasız diğer önemli SSDTs’ leri tutmak gerekir.
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 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.
İ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. Burada yapılması gereken, 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:
- MaciASL: RehabMan/OS-X-MaciASL-patchmatic · GitHub
- LapTop Yama için Repo: RehabMan/Laptop-DSDT-Patch · GitHub
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 bakılır.
Ö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
Not: MaciASL içinde Compile yaptığınızda warnings/remarks/optimizations hatalarını görmezden gelin. Dikkat etmeniz gereken sadece Error olanlardır.
Yamalar
Genel olarak bir DSDT yaması sadece uygun bir düzeltme bulunduğunda uygulanmalıdır. Nadiren hata veren ancak yaygın olarak kullanılan, sistemin ihtiyaç duyduğu gerekli bazı yamalar vardır.
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”
- "Add IMEI"
- "6-series USB”
- "7-series/8-series USB”
Eğer Yosemite’de GenericUSBXCHI.kext kullanıyorsanız, bu kextin Yosemite için hazırlanmış oluğundan emin olun. Ayrıca bunun yanında cihazın sebepsiz uyanmasını engellemek için Boot komutu olarak gux_defer_usb2 kullanın.
Sebepsiz uykudan uyanma sorununa bir diğer alternatif çözüm ise AppleUSBXHCI.kext ile "USB _PRW(0x6D) kullanmak ve XHC’ yi XHC1” olarak yeniden isimlendirmektir. Hangi _PRW metodunun sizin DSDT’ yaması için uygun dönüşü sağladığını belirlemek için DSDT dosyanızı inceleyin. Ayrıca Repo içinde "USB _PRW(0x6D) XHC’ -> XHC1” içinde bunlar sağlanmıştır ( XHC/EHC/HDEF için 0x0D and 0x6D değerleri _PRW’den döner.)
Eğer Haswell CPU/8 serisi yongasına sahipseniz ve AppleLPC.kext yüklenmiyorsa, "Haswell LPC” yamasını kullanın. Bu yama DSDT içine uygun bir kimlik enjekte ederek kextin yüklenmesini sağlar.
Yeniden Adlandırma (Renames) : Ortak nesneleri OS X ile eşleşecek şekilde yeniden adlandırmak gerekir. ( Mesela IGPU güç yönetimi için GFX0-> IGPU olarak yeniden adlandırmak gerekir). Bu durumlarda, bütün DSDT / SSDT bütün bu ortak nesenelerin yeniden adlandırılması gerekir.
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.
Spesifik Sorunlar İçin Yamalar
Pil Göstergesi Yamalama:
Ekran Arka Plan Yaması:
NVIDIA /AMD Ekran kartını devre dışı bırakmak için yama:
Yamalı AppleHDA kullanarak Yamalama
Yamalı AppleHDA.kext ile birlikte 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.( Baştan savma yapılan AppleHDA yamalarında bu girişlerden bir yada birden çok olabilir).
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.
Dosyaları Bootloader’a yüklemek iç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 orijinal SSDTs sıralaması gibi olmasına mutlaka dikkat edin (orijinal SSDT, SSDT-1.aml, SSDT-5.aml, SSDT-6.aml ise yamalı olanlarda aynı olmalı).
Chameleon:
Dosyaların Sistem içindeki Extra klasöründe olması gerekiyor. Eğer OEM DSDT varsa, DSDT.aml doyası bunun yerine konulacaktır. Chameleonda SSDT isimlendirmede boşluklara izin vermez. SSDT dosyaları SSDT.aml, SSDT-1.aml, SSDT-2.aml, SSDT-3.aml şeklinde sıralanarak yüklenir. Dolayısıyla sizdeki SSDT dosyaları SSDT.aml, SSDT-1.aml, SSDT-4.aml, SSDT-5.aml şeklinde ise, sadece SSSDT.aml, SSDT-1.aml yüklenecektir. SSDT-4.aml and SSDT-5.aml ise gözardı edilecektir.
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 Chameleon için DropSSDT=Yes, Clover için ise ACPI/SSDT/DropOem=true kullanmaktır. Ancak bundan sonra yamalı ( yamasız ) dosyaları bootloader için yükleyebilirsiniz.
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 BİOS'un koyduğu bu adresler, yama yaptığınız DSDT/SSDT ile uyuşmayabilir. Bu gibi durumlarda belirsiz stabilize 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.
Ayrıca videolu anlatım için:
Kaynaklar:
MaciASL (RehabMan fork): RehabMan/OS-X-MaciASL-patchmatic · GitHub
patchmatic: RehabMan/OS-X-MaciASL-patchmatic · GitHub
iasl (RehabMan fork): RehabMan / acpica / Downloads — Bitbucket
ACPI spec: ACPI
RehabMan github: RehabMan · GitHub
Clover laptop guide: [Guide] Booting the OS X installer on LAPTOPS with Clover UEFI
Clover config.plist files for laptops: RehabMan/OS-X-Clover-Laptop-Config · GitHub
Clover thread: http://www.projectosx.com/forum/inde...showtopic=2562
Clover changes: http://www.projectosx.com/forum/inde...showtopic=2656
Clover installer discussion: http://www.projectosx.com/forum/inde...showtopic=3191
Son düzenleme: