Tutorial Patching DSDT/SSDT

Masih bingung cara edit/patching DSDT? Patching atau edit DSDT tentu diperlukan untuk memaksimalkan hasil hackintosh yang kita buat. Hal tersebut karena terdapat beberapa kondisi BIOS yang berbeda antara di PC biasa dan Mac. Nah, pada post ini saya akan berbagi tutorial untuk melakukan edit (patching), compile, filtering, dan decompile DSDT.

Cara Patching DSDT Hackintosh


Pada posting sebelumnya sudah saya jelaskan bagaimana cara mendapatkan file native DSDT. Jika belum tahu caranya silahkan baca post saya sebelumnya.
Baca : Cara Dumping DSDT
Tool yang digunakan untuk melakukan patching DSDT/SSDT sebenarnya ada banyak, namun saya sendiri lebih suka menggunakan MaciASL. Pada tutorial ini kita juga akan menggunakan Terminal untuk melakukan filtering pada DSDT/SSDT dengan bantuan iASL.

Langsung saja berikut cara untuk melakukan patching DSDT/SSDT;

Generate Original DSDT dengan Clover F4
Langkah pertama adalah mengektrak DSDT dari BIOS kita dengan Clover bootloader, untuk pengguna bootloader yang lain mungkin bisa menyesuaikan.

Untuk mendapatkan native DSDT kita cukup menekan tombol F4 pada saat berada di bootloader menu Clover. Untuk memastikan F4 sudah ditekan pastikan 2 kali menekan tombol F4 dengan tombol Fn dan tanpa tombol Fn.

Nantinya file original DSDT ini akan tersimpan secara default di Clover/ACPI/origin.
Buat Folder Baru
Folder baru  ini digunakan untuk menempatkan file DSDT dan SSDT.  Untuk nama folder itu terserah yang penting mudah untuk diketik. Kamudian copy-paste file original DSDT/SSDT kedalam folder yang kita buat ini.

Cukup copy file DSDT.aml dan file SSDT-x.aml selain itu tidak perlu dicopykan ke folder.

Lakukan Decompile pada File AML
Seperti yang saya katakan tadi, kita perlu untuk melakukan filtering. Filtering DSDT/SSDT dilakukan dengan mengubah file AML ke file DSL atau disebut decompile. Saat melakukan dcompile iASL akan mendeteksi file atau deklarasi ACPI yang menimbulkan error.

Pada langkah ini kita memerlukan file iASL. File tersebut dapat di download di repo milik ReabMan disini.
Baca : Menggunakan iASL di Terminal OS X 
iasl -da -dl *aml
atau jika ingin menggunakan file refs.txt dapat menggunakan perintah
iasl -da -dl -fe refs.txt *aml
File refs.txt sendiri hanya berisi beberapa deklarasi untuk DSDT/SSDT. Copy kode dibawah ini dan simpan sebagai file refs.txt jika diperlukan.
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(_GPE.VHOV, MethodObj, 3)
External(_SB.PCI0.XHC.RHUB.TPLD, MethodObj, 2)
File refs.txt biasanya dapat membantu dalam meminimalisir beberapa error yang berkaitan dengan deklarasi eksternal. Setelah melakukan decompile maka semua file aml akan terduplikasi menjadi ekstensi .dsl yang dapat kita edit.


Jika Terdapat Pesan Error Saat Melakukan Decompile
Pengalaman saya sendiri terkadang terdapat error saat langsung melakukan decompile pada semua file. Biasanya terdapat notifikasi dimana penyebab error. Saya sendiri pernah mengalami error karena ternyata terdapat duplikasi di SSDT yang berhubungan dengan CPU. Untuk dapat mengetahui penyebab error, coba lakukan 1 per 1 penambahan file aml saat decompile.

Maksudnya adalah misalkan  ada 5 file aml, maka lakukan decompile pada DSDT.aml dan SSDT-0.aml terlebih dahulu,  kemudian tambahkan satu per satu file aml lain untuk di decompile sampai terdapat error.
Decompile selesai

Jika sudah menemukan errornya dimana cukup buka isi dari file aml tersebut dengan maciASL. Jika ternyata ada duplikasi antara file SSDT cukup sertakan 1 file pada file yang sama isinya tadi.

Filtering SSDT
Untuk komputer lama dengan prosesor Sandy Bridge atau yang lainya, SSDT yang berkaitan dengan CPU dapat menimbulkan masalah. Sehingga untuk mengatasinya kita harus menggunakan beberapa opsi seperti DropTables, atau DropOem=true, atau DropSSDT=Yes pada Clover. Dengan kata lain untuk prosesor lawas tidak perlu menggunakan SSDT yang berkaitan dengan CPU pun tak masalah.

Sedangkan untuk hal lain yang perlu dicari didalam SSDT adalah

  • CPU : Biasanya ditandai dengan deklarasi _PR.CPUx
  • SATx : Berkaitan dengan HDD. Ditandai dengan SATx. Bisa di sertakan atau tidak.
  • GFX0 : Yang ini wajib disertakan karena berkaitan dengan IGPU.
  • PEGP : Ini juga wajib disertakan untuk keperluan mematikan discrete GPU.

Agar lebih mudah untuk mencarinya kita gunakan perintah grep di terminal. Contohnya sperti ini
grep SAT *dsl
Namun pastikan kita sudah berada di folder yang kita buat tadi. Sehingga output di terminal akan menampilkan file apa saja yang mengandung karakter "SAT".
Grep SSDT


Menghilangkan Error pada DSDT-SSDT
Setelah kita mendapatkan file dsl yang siap edit, maka langkah selanjutnya adalah melakukan perbaikan pada error yang ada terlebih dahulu. Hal ini wajib sebelum melakukan patching.

Hal yang paling sering saya temui saat memperbaiki error adalah pesan error yang berkaitan dengan "zero" dan "premature declaration". Namun tenang saja karena disini kita semuanya tinggal pakai dan sedikit membaca.

Yang kita perlukan pada tahap ini adalah aplikasi maciASL dan koneksi internet.

Pertama buka aplikasi maciASL. Lalu pastikan versi kompiler sudah berada di versi terbaru atau sesuaikan dengan umur keluaran hardware yang kita pakai.
Sesuaikan Compiler
Kemudian tambahkan repositori patch terlebih dahulu. Repo ini akan sangat membantu kita agar tidak perlu copy-paste script untuk patching.

Saya sendiri menggunakan repo milik Rehabman dengan link http://raw.github.com/RehabMan/Laptop-DSDT-Patch/master
repo DSDT
Setelah semua persiapan sudah siap maka langsung saja kita buka file DSDT.dsl yang kita punya. Kemudian klik tombol compile yang ada di maciASL. Jika terdapat error maka akan tampil rinciannya seperti berikut.
ERROR DSDT

Untuk penyebab errornya sendiri sudah dijelaskan dan bagian yang error adalah seperti ini
Scope (\_SI)
    {
        Method (_MSG, 1, NotSerialized)  // _MSG: Message
        {
            Store (Local0, Local0)
        }

        Method (_SST, 1, NotSerialized)  // _SST: System Status
        {
            Store (Local0, Local0)
        }
    }
Untuk perbaikannya kita dapat menghapus Local0 karena dibeberapa sumber disebutkan bahwa Local0 tidak diinisialisasi oleh variabel manapun. Sehingga perbaikkanya adalah seperti berikut.
Scope (\_SI)
    {
        Method (_MSG, 1, NotSerialized)  // _MSG: Message
        {
        }

        Method (_SST, 1, NotSerialized)  // _SST: System Status
        {
        }
    }
Dan setelah kita compile pun sudah tidak ada.
No Error DSDT

Nah itu salah satu contoh memperbaiki error yang ada. Untuk cara patchingnya sendiri cukup mudah, yaitu cukup buka menu patch dan disana sudah disedikan beragam patch. Sesuaikan sesuai kebutuhan untuk jenis patchnya.
Patch DSDT/SSDT

Patch yang umum digunakan biasanya adalah
"Fix _WAK Arg0 v2"
"HPET Fix"
"SMBUS Fix"
"IRQ Fix"
"RTC Fix"
"OS Check Fix"
"Fix Mutex with non-zero SyncLevel"
"Fix PNOT/PPNT" (gunakan hanya jika drop CPU di SSDT)
"Add IMEI" (jangan gunakan jika DSDT atau SSDT sudah memiliki perangkat IMEI / HECI / MEI)

Sedangkan untuk patch yang diperlukan terkait perangkat kita masing-masing, kita dapat mencarinya di forum-forum hackintosh. Hal tersebut dikarenakan tidak semua perangkat harus dipatch dengan patch yang sama.

Disarankan juga melakukan patching satu persatu, jangan sekaligus mengaplikasikan patch karena akan membuat sulit saat melakukan troubelshooting masalah yang ada.

Compile Ulang DSDT/SSDT
Kemudian setelah selesai patching kita dapat menyimpan kembali file DSDT/SSDT kembali ke format .aml dan letakan di folder CLOVER/ACPI/patched dan sesuaikan pengaturan di Clover.
AML export

Pada postingan berikutnya akan saya kumpulkan beberapa error yang sering muncul beserta cara menyelesaikannya. Semoga postingan ini membantu. Jika ada yang ingin ditanyakan atau sedikit bantuan silahkan berkomentar dibawah.
Previous
Next Post »

Berkomentarlah yang saling membangun dan sesuai topik yang diisajikan,
Dilarang menyematkan hal yang berbau link dan berkomentar kotor.
EmoticonEmoticon