Install Snow Leopard on Laptop core 2 duol

 

Chào các bạn, nhiều mem đề nghị mình post 1 hướng dẫn đầy đủ nhất về việc cài đặt Mac, nhưng do cấu hình các máy là thiên biến vạn hóa nên hôm nay mình sẽ hướng dẫn chi tiết về quy trình cài Mac trên chính laptop của mình. Mong rằng bài viết này có thể giúp ích được cho các bạn trong quá trình cài đặt Mac.

Cấu hình máy:

Model: Acer Aspire 4937G

CPU: Core 2 duol T6400 2.0G

Ram: DDR3 4G

Graphics Card : Nvidia Geforce G105M 512Mb

Wireless: Intel 5100 (a/b/g/n) thay bằng Dell 1390 (b/g)

Lan: Atheros AR8121/AR8113/AR8114 PCI-E Ethernet Controller

DVD: Slimtype DVD A DS8A2S

Bluetooth: Broadcom

CardReader: JMicron Technologies, Inc.

Audio: ALC 888

HDD: Toshiba 320G

Webcam:HD Video WebCam (Suyin Corporation)

Fingerprint Sensor

Infrared controller

Touchpad+Keyboard: Synaptic 7.0

E-Sata

HDMI

Sau khi cài đặt, hoạt động:

+ Graphics: (DSDT)

+ Sound: (VoodooHDA) hoặc Patch DSDT

+ Keyboard/Trackpad: (VoodooPS2)

+ Speed-Step: (P-state+C-state=>SSDT+DSDT+Legacy Kext+SMBIOS.plist)

+ Native AHCI driver: (DSDT)

+ Wifi: (Native support)

+ Ahci: (Legacy Kext)

+ Sleep/Wake: (DSDT)

+ Restart+Shutdown: (Bootloader:AsereBLN Booter 1.1.9)

+ UUID fix is applied automatically by AsereBLN Booter 1.1.9

+ Going to Sleep on lid close - (DSDT)

+ 32bit/64bit Snow Leopard: (Native support)

+ Sudden Motion Sensor: (DSDT) - virtualized

+ Ambient Light Sensor: (DSDT) - virtualized

+ Battery: (VoodooBattery)

+ Network: (Kexts+DSDT)

+ Camera: (native support)

+ DVD : (Native Support))

+ Bluetooth : (Native support)

+ HDMI: cho màn hình ngoài (Native support)

+ Duol Boot: Win 7 64 bit+ Snow Leopard 64 bit qua Bootcamp với Chamelon boot mặc định.

+ Greekbench:

Không hoạt động:

+ Infrared controller

+ Fingerprint Reader

Hệ thống sau khi cài đặt:

1) /System/Library/Extensions 100% vanilla: không add, ko modify bất cứ kexts nào

2) /Extra/Extensions có các kext sau:

-AppleACPIPS2Nub.kext

-fakesmc.kext

-LegacyAcer4937G.kext

-VoodooBattery.kext

-VoodooPS2Controller.kext

-VoodooHDA

-AttansicL1eEthernet.kext

3) /Extra có các file sau:

-com.apple.Boot.plist

-DSDT.aml

-smbios.plist

BIOS configuration

-SATA is set to AHCI mode

-Boot bằng DVD.

Chuẩn bị:

- Backup toàn bộ dữ liệu

- Vào win 7 dùng Lavalys Everest xuất toàn bộ DSDT và SSDT (xem tại đây: http://macvn.com/forums/showthread.php?t=33642 lưu vào usb.

- 1 đĩa retail Snow Leopard 10.6.3:http://www.demonoid.com/files/details/2223026/39179064/ (user:dangh5, pass:khongdau)

- 1 đĩa Empire 1.085 dành cho core 2 duol(http://www.mediafire.com/?thd5nmo2oyn)

- File update 10.6.4 down load tại trng chủ Apple: http://support.apple.com/downloads/

down về copy vào usb.

- Down load Multibeast bản mới nhất 2.05 về: http://tonymacx86.blogspot.com/2010/...c-os-x-on.html

- Down load các chương trình sau:

+ DSDTSE: dùng để patch DSDT tại đây:http://www.osx86.es/?p=610&cpage=1#comment-227

+ IORegistryExplorer: Dùng để xem thông tin phần cứng tại đây: http://www.kexts.com/view/93-ioregistryexplorer.html

+ PlistEdit Pro: dùng để edit các file plist down tại đây: http://www.apple.com/downloads/macos...steditpro.html

+ Lspci cho Snow Leopard=> http://osx86.sojugarden.com/downloads/

- Chuẩn bị tất cả các kext trên vào usb:

+ AppleACPIPS2Nub.kext

+ fakesmc.kext

+ VoodooBattery.kext

+ VoodooPS2Controller.kext

+ VoodooHDA

+ AttansicL1eEthernet.kext

+ NullCPUPowerManagement.kext

+ EvOreboot.kext

+ ElliottForceLegacyRTC.kext

+ smbios.plist (lên mạng kiếm cái nào phù hợp với máy mình)

+ Com.apple.boot.plist ( lấy file của mình cũng dc)

=> Google nhé hay:http://osx86.sojugarden.com/downloads/

- Chuột usb

Cài đặt:

1) Boot bằng đĩa Empire EFI: vào màn hình như sau:


2) Khi nó kêu lấy đĩa empire ra bỏ đĩa retail 10.6.3 vào, bấm F5 (refresh) sau khi hiện hình đĩa retail gõ -v (verbose mode)rồi bấm Enter. Màn hình sẽ load những dòng chữ trắng trên nền đen thể hiện quá trình boot, máy các bạn khi ko cài được thì nó sẽ đứng hoặc restart lại.

3) Sau khi vào được màn hình boot, các bạn chọn DiskUtility sau đó Format toàn bộ ổ cứng sang định dạng Mac, nhớ chuyển sang Guid.

4) Thực hiện cài đặt, trong phần Customize các bạn có thể bổ phần máy in, ngon ngữ (tiết kiệm gần 2.5G), nhớ chọn rosseta (có thể chạy dc các ứng dụng của Leopard 10.5)

5) Sau khi cài đặt xong (khoảng 30 phút) nó sẽ kêu các bạn restart lại. Bấm ok.

6) lấy đĩa Snow Retail ra, bỏ lại đĩa Empire vào boot lại: các bạn sẽ thấy như sau:


bấm nút qua ổ Mac, gõ -v, nó sẽ load giống như trên.

7) Vào màn hình chào mừng của Mac, các bạn thực hiện điền đầy đủ thông tin vào. Sau đó vào Mac cắm usb vào thực hiện update lên 10.6.4 từ file chuẩn bị sẵn. Sau khi update xong, nó hỏi restart ko thì chọn không, vào usb mở file Multibeast lên: Ở đây mình sẽ chỉ chọn bootloader và các phần mềm hệ thống thôi, các bạn xem hình:

8) Sau khi cài đặt xong, các bạn sẽ thấy thư mục Extra trong ổ Mac của mình. Chép các kext đã chuẩn bị trong usb vào đường dẫn :ổ mac=>extra=>Extension. Copy file smbios.plist và com.apple.boot.plist vào Extra. Chạy kextutility trong Application (cai app hồi nãy mình cài trong multibeast ấy nhen) sau khi chạy xong nó sẽ tạo 1 file Extensions.mkext trong extra, các bạn sẽ thấy giống vầy nè.


9) Thực hiện cài các chương trình đã chuẩn bị ở trên vào Mac.

10) Edit lại các file Smbios.plist và com.apple.boot.plist như sau:

+ smbios.plist:

Nó sẽ mở bằng chương trình PlistEdit Pro, các bạn nhìn thấy sẽ giống vậy nè.




Thực hiện điền thông tin cấu hình vào, quan trong là 2 dòng:

SMbiosversion và SMproductname các bạn kiếm cấu hinh phù hợp với máy mình nhé, vì nó sẽ ảnh hưởng tới speedtep của bạn đây.

+ com.apple.boot.plist:




các bạn chú ý:

GraphicsEnabler: danh cho graphic card

Kernel Flags: 32 bit hay 64 bit

system-type: 1 là PC, 2 là laptop

Sau khi edit xong, chép ngược lại vào extra.

  1. 11)Thực hiện restart lại, về cơ bản các bạn đã cài thành công roài đó. he he.

Common patches

1) Basic Patch:

a) Đổi theme: Được thực hiện trên file Com.apple.boot.plist:

chú ý dòng này nhé:

Code:

<key>Theme</key>

<string>Bullet</string>

len google down về chép thư mục theme đó vào extra=>theme, sau đó đổi tên đúng tên thư mục đó là ok.

b) System-type: Việc patch sẽ cho máy bạn hoạt động như PC hay laptop, kiểm tra các bạn vào Preference vào Energy Saver sẽ có phần battery , edit trên file com.apple.boot.plist

Code:

<key>system-type</key>

<string>2</string>

2 là laptop, 1 là pc



c) Fix lỗi restart, shutdown:

add vào com.apple.boot.plist:

Code:

<key>RestartFix</key>

<string>yes</string>

d) Fix lỗi ko nhận cổng usb: add vào com.apple.boot.plist.

Code:

<key>USBBusFix</key>

<string>yes</string>

d) Graphic Card

Code:

<key>GraphicsEnabler</key>

<string>yes</string>

Xem hình tất cả các fix trên com.apple.boot.plist



2) Patch DSDT

Để biết DSDT là gì các bạn vui lòng đọc topic: "một số phương pháp cài đặt Mac os"

a)Fix compile DSDT

Các bạn nhớ mình đã dùng everest xuất file dsdt và ssdt ở trên rùi nhé, giờ vào Mac các bạn chỉ cần đổi đuôi tất cả các file đó từ .bin thành .aml là xong. Chúng ta đã cài chương trình DSDTSE ở trên và bây giờ chỉ cần mở file dsdt.aml lên thôi.

bấm vào compile, mình có như hình:


tổng cộng 55 warning, 11 remark, 35 Optimizations

mình sẽ fix từng cái như sau:

+Đối với lỗi:

Code:

/Users/hoangthanh/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl  1105:             Add (Local0, 0x02)

Warning  1106 -                                                     Result is not used, operator has no effect ^

nhìn bên phải bấm vào cột DSDT fix xổ xuống 1 hàng ấy: tìm đến dòng:Result is not used, operator has no effect như hình


nó sẽ hiện lên bảng như sau:

Code:

Result is not used, operator has no effect



The warning:


./dsdt.dsl  2803:       And (CTRL, 0x1E)

Warning  1105 -         ^ Result is not used, operator has no effect


It can be fixed changing:


And (CTRL, 0x1E)


to:


And (CTRL, 0x1E, CTRL)

tìm đến dòng 1105 bằng cách gõ vào cột bên phải chỗ go to line ấy:thêm vào như hướng dẫn fix

Add (Local0, 0x02) thành Add (Local0, 0x02, Local0)

ấn compile lại là fix xong

+Đối với lỗi:

Code:

/Users/hoangthanh/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl  7588:                     Method (_GTM, 0, Not******ized)

Warning  1088 -                                                                    Not all control paths return a value ^  (_GTM)


/Users/hoangthanh/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl  7588:                     Method (_GTM, 0, Not******ized)

Warning  1081 -                                                                     Reserved method must return a value ^  (_GTM)

làm tương tự cột DSDT fix: chọn Not all control paths return a value

nó hiện bảng như sau:

Code:

Not all control paths return a value


dsdt.dsl  7288:             Method (EVNT, 1, Not******ized)

Warning  1086 -                        ^ Not all control paths return a value (EVNT)


In this other case, a value of this kind must be returned at the end of the method:

Return (Zero)

Example:

Method (EVNT, 1, Not******ized)

            {

                While (VZOK)

                {

                    If (LEqual (VZOK, 0x01))

                    {

                        Store (Arg0, VZOK)

                        Notify (\_SB.VALZ, 0x80)

                        Return (Zero)

                    }

                    Else

                    {

                        Sleep (0x05)

                    }

                }

           }

The fix is something like:

Method (EVNT, 1, Not******ized)

            {

                While (VZOK)

                {

                    If (LEqual (VZOK, 0x01))

                    {

                        Store (Arg0, VZOK)

                        Notify (\_SB.VALZ, 0x80)

                        Return (Zero)

                    }

                    Else

                    {

                        Sleep (0x05)

                    }

                }

                Return (Zero)

           }

Bằng cách thêm "Return (Zero)" vào cuối lệnh ta sẽ fix dc.

Mình tìm đến dòng 7588, tìm đến cuối dòng của lệnh Method (_GTM, 0, Not******ized)

Code:

Method (_GTM, 0, Not******ized)

                    {

                        If (LEqual (SCFG, Zero))

                        {

                            Name (PBUF, Buffer (0x14)

                            {

                                /* 0000 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                /* 0010 */    0x00, 0x00, 0x00, 0x00

                            })

                            CreateDWordField (PBUF, Zero, PIO0)

                            CreateDWordField (PBUF, 0x04, DMA0)

                            CreateDWordField (PBUF, 0x08, PIO1)

                            CreateDWordField (PBUF, 0x0C, DMA1)

                            CreateDWordField (PBUF, 0x10, FLAG)

                            Store (GETP (PRIT), PIO0)

                            Store (GDMA (And (SYNC, One), And (ICR3, One),

                                And (ICR0, One), SDT0, And (ICR1, One)), DMA0)

                            If (LEqual (DMA0, Ones))

                            {

                                Store (PIO0, DMA0)

                            }


                            If (And (PRIT, 0x4000))

                            {

                                If (LEqual (And (PRIT, 0x90), 0x80))

                                {

                                    Store (0x0384, PIO1)

                                }

                                Else

                                {

                                    Store (GETT (PSIT), PIO1)

                                }

                            }

                            Else

                            {

                                Store (Ones, PIO1)

                            }


                            Store (GDMA (And (SYNC, 0x02), And (ICR3, 0x02),

                                And (ICR0, 0x02), SDT1, And (ICR1, 0x02)), DMA1)

                            If (LEqual (DMA1, Ones))

                            {

                                Store (PIO1, DMA1)

                            }


                            Store (GETF (And (SYNC, One), And (SYNC, 0x02),

                                PRIT), FLAG)

                            Return (PBUF)

                        }

                    }

các bạn nhìn dòng cuối nhé:

Code:

Store (GETF (And (SYNC, One), And (SYNC, 0x02),

                                PRIT), FLAG)

                            Return (PBUF)

                        }

                        Return (Zero)                   

                }

+ Với lỗi:

Code:

    /Users/hoangthanh/Library/Application Support/EvOSoftware/DSDT/DSDTFiles/dsdt.dsl 10391:                     Name (_T_0, Zero)

  Remark   5111 -                                                                         Use of compiler reserved name ^  (_T_0)

Các bạn chọn như hình:


Thực hiện sửa như sau:


vậy là ok, các bạn thực hiện tương tự với T1, T2, T3...

Với cách này bạn sẽ fix được toàn bộ các warning và remark dễ dàng.

Sau khi fix xong hết, thực hiện Compile cuối cùng lưu lại file gốc này để sau này có thể lấy xài nhé.

b) Hack DSDT

Chú ý quan trọng, trước khi add vào DSDT các bạn nên lưu lại 1 bản dự phòng để lỡ sau nay phần add vào bị lỗi các bạn có thể lấy lại file trước nhé.

+ Method DTGP: một patch nhỏ nhưng cực kỳ quan trọng, được sử dụng để hack usb, card man hình, âm thanh, speedtep.

chọn DSDT hacks ở cột bên trái ấy dòng Method DTGP như hình này.


nó sẽ hiện bảng này nè:chú ý

Code:

Method (DTGP, 5, Not******ized)

    {

        If (LEqual (Arg0, Buffer (0x10)

                {

                    /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,

                    /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B

                }))

        {

            If (LEqual (Arg1, One))

            {

                If (LEqual (Arg2, Zero))

                {

                    Store (Buffer (One)

                        {

                            0x03

                        }, Arg4)

                    Return (One)

                }


                If (LEqual (Arg2, One))

                {

                    Return (One)

                }

            }

        }


        Store (Buffer (One)

            {

                0x00

            }, Arg4)

        Return (Zero)

    }

Bên cột phải chỗ locate, bấm xổ xuống chọn WAK sau đó add vào như hình:


bấm compile là xong nhé.

a) Hpet hack

Enable Speedtep on laptop.


Chỗ locate chọn Hpet:, các bạn sẽ thấy như sau:

Gốc:

Code:

Device (HPET)

                {

                    Name (_HID, EisaId ("PNP0103"))

                    Name (BUF0, ResourceTemplate ()

                    {

                        IRQNoFlags ()

                            {0}

                        IRQNoFlags ()

                            {8}

                        Memory32Fixed (ReadOnly,

                            0xFED00000,         // Address Base

                            0x00000400,         // Address Length

                            _Y0E)

                    })

                    Method (_STA, 0, Not******ized)

                    {

                        If (LGreaterEqual (OSYS, 0x07D1))

                        {

                            If (LEqual (HPTS, One))

                            {

                                Return (0x0F)

                            }

                            Else

                            {

                                Return (Zero)

                            }

                        }

                        Else

                        {

                            If (HPTS)

                            {

                                Return (0x0B)

                            }

                            Else

                            {

                                Return (Zero)

                            }

                        }

                    }


                    Method (_CRS, 0, ******ized)

                    {

                        If (LEqual (HPTS, One))

                        {

                            CreateDWordField (BUF0, \_SB.PCI0.LPC.HPET._Y0E._BAS, HPT0)

                            If (LEqual (HPTA, One))

                            {

                                Store (0xFED01000, HPT0)

                            }


                            If (LEqual (HPTA, 0x02))

                            {

                                Store (0xFED02000, HPT0)

                            }


                            If (LEqual (HPTA, 0x03))

                            {

                                Store (0xFED03000, HPT0)

                            }

                        }


                        Return (BUF0)

                    }

                }

Sửa lại là:


Code:

Device (HPET)

                {

                    Name (_HID, EisaId ("PNP0103"))

                    Name (ATT3, ResourceTemplate ()

                    {

                        IRQNoFlags ()

                            {0}

                        IRQNoFlags ()

                            {8}

                        Memory32Fixed (ReadWrite,

                            0xFED00000,         // Address Base

                            0x00000400,         // Address Length

                            )

                    })

                    Name (ATT4, ResourceTemplate ()

                    {

                    })

                    Method (_STA, 0, Not******ized)

                    {

                        Return (0x0F)

                    }


                    Method (_CRS, 0, Not******ized)

                    {

                        Return (ATT3)

                    }

                }

Compile lại là OK.


2) RTC fix:

Hack RTC cho phép ko reset bios mỗi khi khởi động và fix lỗi Sleep/Wake

Làm như trên: locate chọn RTC

gốc:

Code:

Device (RTC)

                {

                    Name (_HID, EisaId ("PNP0B00"))

                    Name (BUF0, ResourceTemplate ()

                    {

                        IO (Decode16,

                            0x0070,             // Range Minimum

                            0x0070,             // Range Maximum

                            0x01,               // Alignment

                            0x08,               // Length

                            )

                    })

                    Name (BUF1, ResourceTemplate ()

                    {

                        IO (Decode16,

                            0x0070,             // Range Minimum

                            0x0070,             // Range Maximum

                            0x01,               // Alignment

                            0x08,               // Length

                            )

                        IRQNoFlags ()

                            {8}

                    })

                    Method (_CRS, 0, ******ized)

                    {

                        If (LEqual (HPTS, One))

                        {

                            Return (BUF0)

                        }

                        Else

                        {

                            Return (BUF1)

                        }

                    }

                }

Thay lại:

0x08=> 0x02

bỏ dòng:

IRQNoFlags ()

{8}

Thành như sau:

Code:

Device (RTC)

                {

                    Name (_HID, EisaId ("PNP0B00"))

                    Name (BUF0, ResourceTemplate ()

                    {

                        IO (Decode16,

                            0x0070,             // Range Minimum

                            0x0070,             // Range Maximum

                            0x01,               // Alignment

                            0x02,               // Length

                            )

                    })

                    Name (BUF1, ResourceTemplate ()

                    {

                        IO (Decode16,

                            0x0070,             // Range Minimum

                            0x0070,             // Range Maximum

                            0x01,               // Alignment

                            0x02,               // Length

                            )

                    })

                    Method (_CRS, 0, ******ized)

                    {

                        If (LEqual (HPTS, One))

                        {

                            Return (BUF0)

                        }

                        Else

                        {

                            Return (BUF1)

                        }

                    }

                }

Bấm Compile để lưu lại.

c) PIC và TIMR fix:

Một trong những patch liên quan đến audio, vga và Speedtep:

+ Search dòng: Device (PIC)

remove dòng này đi:

Code:

IRQNoFlags ()

                            {2}

+ Search dòng Devive (TIMR)

remove dòng này đi:

Code:

IRQNoFlags ()

                            {0}

That OK, Compile lại là xong.

d) Native AC Adapter fix:

Search dòng : Device (AC)

gốc:

Code:

Device (AC)

                {

                    Name (_HID, "ACPI0003")

                    Name (_PCL, Package (0x01)

                    {

                        _SB

                    })

                    Method (_PSR, 0, Not******ized)

                    {

                        If (ECON)

                        {

                            Store (^^EC0.ADPT, PWRS)

                        }


                        Return (PWRS)

                    }

                }

Sửa lại:

Code:

Device (AC)

                {

                    Name (_HID, "ACPI0003")

                    Name (_PRW, Package (0x02)

                    {

                        0x18,

                        0x03

                    })

                    Name (_PCL, Package (0x01)

                    {

                        _SB

                    })

                    Method (_PSR, 0, Not******ized)

                    {

                        If (ECON)

                        {

                            Store (^^EC0.ADPT, PWRS)

                        }


                        Return (PWRS)

                    }

                }

Compile lại là OK.

e) Native ACHI controler:

Search: Device (SAT0)

GỐC:

Code:

Device (SAT0)

            {

                Name (_ADR, 0x001F0002)

                OperationRegion (SACS, PCI_Config, 0x40, 0xC0)

                Field (SACS, DWordAcc, NoLock, Preserve)

                {

..................

...............

..................

Device (SAT1)

.................

.................

Sửa lại là:

Xóa toàn bộ và thay vào bằng:


Code:

Device (SATA)

            {

                Name (_ADR, 0x001F0002)

                Name (_SUN, One)

                Device (PRT0)

                {

                    Name (_ADR, Zero)

                    Method (_GTF, 0, Not******ized)

                    {

                        Name (PIB0, Buffer (0x07)

                        {

                            0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xF5

                        })

                        Return (PIB0)

                    }


                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x02)

                            {

                                "io-device-location",

                                Buffer (0x06)

                                {

                                    "Bay 1"

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }


                Device (PRT1)

                {

                    Name (_ADR, One)

                    Method (_GTF, 0, Not******ized)

                    {

                        Name (PIB1, Buffer (0x07)

                        {

                            0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xF5

                        })

                        Return (PIB1)

                    }


                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x02)

                            {

                                "io-device-location",

                                Buffer (0x06)

                                {

                                    "Bay 2"

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }


                Device (PRT2)

                {

                    Name (_ADR, 0x02)

                    Method (_GTF, 0, Not******ized)

                    {

                        Name (PIB2, Buffer (0x07)

                        {

                            0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xF5

                        })

                        Return (PIB2)

                    }


                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x02)

                            {

                                "io-device-location",

                                Buffer (0x06)

                                {

                                    "Bay 3"

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }


                Device (PRT3)

                {

                    Name (_ADR, 0x03)

                    Method (_GTF, 0, Not******ized)

                    {

                        Name (PIB3, Buffer (0x07)

                        {

                            0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xF5

                        })

                        Return (PIB3)

                    }


                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x02)

                            {

                                "io-device-location",

                                Buffer (0x06)

                                {

                                    "Bay 4"

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }


                Device (PRT4)

                {

                    Name (_ADR, 0x04)

                    Method (_GTF, 0, Not******ized)

                    {

                        Name (PIB4, Buffer (0x07)

                        {

                            0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xF5

                        })

                        Return (PIB4)

                    }


                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x02)

                            {

                                "io-device-location",

                                Buffer (0x06)

                                {

                                    "Bay 5"

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }


                Device (PRT5)

                {

                    Name (_ADR, 0x05)

                    Method (_GTF, 0, Not******ized)

                    {

                        Name (PIB5, Buffer (0x07)

                        {

                            0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xF5

                        })

                        Return (PIB5)

                    }


                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x02)

                            {

                                "io-device-location",

                                Buffer (0x06)

                                {

                                    "Bay 6"

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }


                Method (_DSM, 4, Not******ized)

                {

                    Store (Package (0x06)

                        {

                            "device_type",

                            Buffer (0x10)

                            {

                                "AHCI Controller"

                            },


                            "model",

                            Buffer (0x1C)

                            {

                                "ICH9-R SATA/AHCI Controller"

                            },


                            "name",

                            Buffer (0x1C)

                            {

                                "ICH9-R SATA/AHCI Controller"

                            }

                        }, Local0)

                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                    Return (Local0)

                }

            }

Bấm Compile lại là xong.


f)Enable brightness slider in Display preferences

Search: Device (LNKA), sau đó thêm vào trước Device (LNKA) dòng lệnh sau:

Code:

Device (PNLF)

{

   Name (_HID, EisaId ("APP0002"))

   Name (_CID, "backlight")

   Name (_UID, 0x0A)

   Name (_STA, 0x0B)

}

Compile lại nhé.

g) Graphics Card hack

Search : Device (PEGP)

gốc:

Code:

Device (PEGP)

            {

                Name (_ADR, 0x00010000)

                Method (_PRT, 0, Not******ized)

                {

                    If (LEqual (GPIC, Zero))

                    {

                        Return (Package (0x02)

                        {

                            Package (0x04)

                            {

                                0xFFFF,

                                Zero,

                                ^^LPC.LNKA,

                                Zero

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                One,

                                ^^LPC.LNKB,

                                Zero

                            }

                        })

                    }

                    Else

                    {

                        Return (Package (0x02)

                        {

                            Package (0x04)

                            {

                                0xFFFF,

                                Zero,

                                Zero,

                                0x10

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                One,

                                Zero,

                                0x11

                            }

                        })

                    }

                }

Code:

Device (PEGP)

            {

                Name (_ADR, 0x00010000)

                Device (GFX0)

                {

                    Name (_ADR, Zero)

                    Name (_SUN, One)

                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x1A)

                            {

                                "@0,compatible",

                                Buffer (0x0B)

                                {

                                    "NVDA,NVMac"

                                },


                                "@0,device_type",

                                Buffer (0x08)

                                {

                                    "display"

                                },


                                "@0,name",

                                Buffer (0x0F)

                                {

                                    "NVDA,Display-A"

                                },


                                "@1,compatible",

                                Buffer (0x0B)

                                {

                                    "NVDA,NVMac"

                                },


                                "@1,device_type",

                                Buffer (0x08)

                                {

                                    "display"

                                },


                                "@1,name",

                                Buffer (0x0F)

                                {

                                    "NVDA,Display-B"

                                },


                                "NVCAP",

                                Buffer (0x18)

                                {

                                    /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,

                                    /* 0008 */    0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0010 */    0x00, 0x00, 0x00, 0x00

                                },


                                "NVPM",

                                Buffer (0x20)

                                {

                                    /* 0000 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0018 */    0x00, 0x00, 0x00, 0x00

                                },


                                "VRAM,totalsize",

                                Buffer (0x04)

                                {

                                    0x00, 0x00, 0x00, 0x20

                                },


                                "device_type",

                                Buffer (0x0D)

                                {

                                    "NVDA,GeForce"

                                },


                                "model",

                                Buffer (0x1F)

                                {

                                    "Nvidia GeForce G105M"

                                },


                                "rom-revision",

                                Buffer (0x24)

                                {

                                    "DSDT ROM v.1.0 Patch By Hoang Thanh"

                                },


                                "reg",

                                Buffer (0x78)

                                {

                                    /* 0000 */    0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x02,

                                    /* 0018 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0020 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,

                                    /* 0028 */    0x14, 0x00, 0x01, 0x42, 0x00, 0x00, 0x00, 0x00,

                                    /* 0030 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0038 */    0x00, 0x00, 0x00, 0x10, 0x1C, 0x00, 0x01, 0x02,

                                    /* 0040 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0048 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,

                                    /* 0050 */    0x24, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,

                                    /* 0058 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0060 */    0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x02,

                                    /* 0068 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                                    /* 0070 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }

            }

Delete luôn lệnh Device (VGA)

Complice lại nó sẽ báo lỗi ở 1 số dòng, thực hiện fix lại bằng cách đổi tên là xong.

Bạn sẽ thấy nó như thế này trong About Mac:


h) SMBUS Controller:

Fix Smbus: Cần thiết cho Speedtep là Sleep/Wake

Search: Device (AZAL), add vào trước Device (AZL) như sau:

Code:

Device (BUS0)

            {

                Name (_CID, "smbus")

                Name (_ADR, Zero)

                Device (DVL0)

                {

                    Name (_ADR, 0x57)

                    Name (_CID, "diagsvault")

                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x03)

                            {

                                "address",

                                0x57,

                                Buffer (One)

                                {

                                    0x00

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }

Compile lại là xong.

i) Fix hiển thị thông tin PCI:

Các bạn xem hình:


+ Card mạng:

Wireless:

Sử dụng IoRegetryexplorer lúc các bạn cài xong, tìm xuống dòng nào card wireless bạn hiển thị. sau đó search trong DSDT. trường hợp của mình:

Search: Device (EXP2)

gốc:

Code:

Device (EXP2)

            {

                Name (_ADR, 0x001C0001)

                Method (_PRT, 0, Not******ized)

                {

                    If (LEqual (GPIC, Zero))

                    {

                        Return (Package (0x04)

                        {

                            Package (0x04)

                            {

                                0xFFFF,

                                Zero,

                                ^^LPC.LNKB,

                                Zero

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                One,

                                ^^LPC.LNKC,

                                Zero

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                0x02,

                                ^^LPC.LNKD,

                                Zero

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                0x03,

                                ^^LPC.LNKA,

                                Zero

                            }

                        })

                    }

                    Else

                    {

                        Return (Package (0x04)

                        {

                            Package (0x04)

                            {

                                0xFFFF,

                                Zero,

                                Zero,

                                0x11

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                One,

                                Zero,

                                0x12

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                0x02,

                                Zero,

                                0x13

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                0x03,

                                Zero,

                                0x10

                            }

                        })

                    }

                }

Sửa lại như sau:

Code:

Device (EXP2)

            {

                Name (_ADR, 0x001C0001)

                Device (ARPT)

                {

                    Name (_ADR, Zero)

                    Name (_SUN, One)

                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x04)

                            {

                                "model",

                                Buffer (0x13)

                                {

                                    "Dell Wireless 1390"

                                },


                                "built-in",

                                Buffer (One)

                                {

                                    0x00

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }

Comple lại là xong.

Card mạng lan:

Search: Device (EXP3)

gốc:

Code:

Device (EXP3)

            {

                Name (_ADR, 0x001C0002)

                Name (_PRW, Package (0x02)

                {

                    0x09,

                    0x04

                })

                Method (_PRT, 0, Not******ized)

                {

                    If (LEqual (GPIC, Zero))

                    {

                        Return (Package (0x04)

                        {

                            Package (0x04)

                            {

                                0xFFFF,

                                Zero,

                                ^^LPC.LNKC,

                                Zero

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                One,

                                ^^LPC.LNKD,

                                Zero

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                0x02,

                                ^^LPC.LNKA,

                                Zero

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                0x03,

                                ^^LPC.LNKB,

                                Zero

                            }

                        })

                    }

                    Else

                    {

                        Return (Package (0x04)

                        {

                            Package (0x04)

                            {

                                0xFFFF,

                                Zero,

                                Zero,

                                0x12

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                One,

                                Zero,

                                0x13

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                0x02,

                                Zero,

                                0x10

                            },


                            Package (0x04)

                            {

                                0xFFFF,

                                0x03,

                                Zero,

                                0x11

                            }

                        })

                    }

                }

Sửa lại là:

Code:

Device (EXP3)

            {

                Name (_ADR, 0x001C0002)

                Device (AL1E)

                {

                    Name (_ADR, Zero)

                    Name (_SUN, One)

                    Method (_DSM, 4, Not******ized)

                    {

                        Store (Package (0x04)

                            {

                                "model",

                                Buffer (0x37)

                                {

                                    "Atheros AR8121/AR8113/AR8114 PCI-E Ethernet Controller"

                                },


                                "built-in",

                                Buffer (One)

                                {

                                    0x00

                                }

                            }, Local0)

                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                        Return (Local0)

                    }

                }

Compile lại là xong.

J) Fix Sleep/wake, usb hack

Mẫu Macbook pro

  1. UHC1 --> 0x35, 0x3A, 0x00, 0x00

  2. UHC2 --> 0x36, 0x3A, 0x00, 0x00

  3. UHC3 --> 0x37, 0x3A, 0x00, 0x00

  4. UHC4 --> 0x38, 0x3A, 0x00, 0x00

  5. UHC5 --> 0x39, 0x3A, 0x00, 0x00

Mẫu của mình:

  1. UHC0 --> 0x35, 0x29, 0x00, 0x00

  2. UHC1 --> 0x36, 0x29, 0x00, 0x00

  3. UHC2 --> 0x37, 0x29, 0x00, 0x00

  4. UHC3 --> 0x38, 0x29, 0x00, 0x00

  5. UHC4 --> 0x39, 0x29, 0x00, 0x00

Đầu tiên, thực hiện đổi TRÊN dsdt từ :

  1. UHC0=>UHC1

  2. UHC1=>UHC2

  3. UHC2=>UHC3

  4. UHC3=>UHC4

  5. UHC4=>UHC5

Sau đó compile lại và đổi tên nếu báo lỗi.

  1. EHC1

  2. EHC2

Không đổi tên, cứ để đó.

Hack như sau:

add vào UHC1 ở dưới Name (_PRW, Package (0x02):

Code:

Method (_DSM, 4, Not******ized)

                {

                    Store (Package (0x02)

                        {

                            "device-id",

                            Buffer (0x04)

                            {

                                0x34, 0x3A, 0x00, 0x00

                            }

                        }, Local0)

                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                    Return (Local0)

                }

Thành như sau:

Code:

Device (UHC1)

            {

                Name (_ADR, 0x001D0000)

                Device (HUB0)

                {

                    Name (_ADR, Zero)

                    Device (PRT1)

                    {

                        Name (_ADR, One)

                    }


                    Device (PRT2)

                    {

                        Name (_ADR, 0x02)

                        Name (_EJD, "\\_SB.PCI0.EXP1.PXS1")

                    }

                }


                Name (_PRW, Package (0x02)

                {

                    0x03,

                    0x03

                })

                Method (_DSM, 4, Not******ized)

                {

                    Store (Package (0x02)

                        {

                            "device-id",

                            Buffer (0x04)

                            {

                                0x34, 0x3A, 0x00, 0x00

                            }

                        }, Local0)

                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                    Return (Local0)

                }


                OperationRegion (USBR, PCI_Config, 0xC4, One)

                Field (USBR, AnyAcc, NoLock, Preserve)

                {

                    URES,   8

                }


                Method (_PSW, 1, Not******ized)

                {

                    If (Arg0)

                    {

                        Store (0x03, URES)

                    }

                    Else

                    {

                        Store (Zero, URES)

                    }

                }


                Method (_S3D, 0, Not******ized)

                {

                    Return (0x02)

                }


                Method (_S4D, 0, Not******ized)

                {

                    Return (0x02)

                }

            }

Thực hiện tương tự cho UHC2, UHC3, UHC4, UHC5 theo thứ tự thay đổi

0x34, 0x3A, 0x00, 0x00

UHC2=>0x35

UHC3=>0x36

UHC4=>0x37

UHC5=>0x38

Vậy là xong, đến phần tiếp theo:

Search: EHC1:add vào phía trên lệnh Name (_PRW, Package (0x02)

Code:

Method (_DSM, 4, Not******ized)

                {

                    Store (Package (0x11)

                        {

                            "device-id",

                            Buffer (0x04)

                            {

                                0x36, 0x28, 0x00, 0x00

                            },


                            "AAPL,clock-id",

                            Buffer (One)

                            {

                                0x0A

                            },


                            "built-in",

                            Buffer (One)

                            {

                                0x00

                            },


                            "device_type",

                            Buffer (0x05)

                            {

                                "EHCI"

                            },


                            "AAPL,current-available",

                            0x04B0,

                            "AAPL,current-extra",

                            0x02BC,

                            "AAPL,current-in-sleep",

                            0x03E8,

                            "AAPL,device-internal",

                            0x10,

                            Buffer (One)

                            {

                                0x00

                            }

                        }, Local0)

                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                    Return (Local0)

                }

Thành như sau:

Code:

Device (EHC1)

            {

                OperationRegion (U7CS, PCI_Config, 0x54, 0x04)

                Field (U7CS, DWordAcc, NoLock, Preserve)

                {

                        ,   15,

                    PMES,   1

                }


                Name (_ADR, 0x001D0007)

                Device (RHUB)

                {

                    Name (_ADR, Zero)

                    Device (PRT1)

                    {

                        Name (_ADR, One)

                    }


                    Device (PRT2)

                    {

                        Name (_ADR, 0x02)

                        Name (_EJD, "\\_SB.PCI0.EXP1.PXS1")

                    }


                    Device (PRT3)

                    {

                        Name (_ADR, 0x03)

                        Name (_UPC, Package (0x04)

                        {

                            0xFF,

                            0xFF,

                            Zero,

                            Zero

                        })

                        Name (_PLD, Buffer (0x10)

                        {

                            0x81, 0x00, 0x30, 0x00

                        })

                    }


                    Device (PRT4)

                    {

                        Name (_ADR, 0x04)

                        Name (_UPC, Package (0x04)

                        {

                            0xFF,

                            0xFF,

                            Zero,

                            Zero

                        })

                        Name (_PLD, Buffer (0x10)

                        {

                            0x81, 0x00, 0x30, 0x00

                        })

                    }


                    Device (PRT5)

                    {

                        Name (_ADR, 0x05)

                    }


                    Device (PRT6)

                    {

                        Name (_ADR, 0x06)

                    }


                    Device (PRT7)

                    {

                        Name (_ADR, 0x07)

                    }


                    Device (PRT8)

                    {

                        Name (_ADR, 0x08)

                    }

                }


                Method (_DSM, 4, Not******ized)

                {

                    Store (Package (0x11)

                        {

                            "device-id",

                            Buffer (0x04)

                            {

                                0x36, 0x28, 0x00, 0x00

                            },


                            "AAPL,clock-id",

                            Buffer (One)

                            {

                                0x0A

                            },


                            "built-in",

                            Buffer (One)

                            {

                                0x00

                            },


                            "device_type",

                            Buffer (0x05)

                            {

                                "EHCI"

                            },


                            "AAPL,current-available",

                            0x04B0,

                            "AAPL,current-extra",

                            0x02BC,

                            "AAPL,current-in-sleep",

                            0x03E8,

                            "AAPL,device-internal",

                            0x10,

                            Buffer (One)

                            {

                                0x00

                            }

                        }, Local0)

                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                    Return (Local0)

                }


                Name (_PRW, Package (0x02)

                {

                    0x0D,

                    0x03

                })

            }

Với EHC2:

thực hiện tương tự, chỉ đổi chỗ dòng màu xanh thành: 0x3A, 0x28, 0x00, 0x00

Compile lại là xong.

k) Fix Audio dùng voodooHDA không cần remove AppleHDA trong S=>L=>E

Search: Device (AZAL), các bạn thấy:

Code:

Device (AZAL)

            {

                Name (_ADR, 0x001B0000)

                OperationRegion (HDCS, PCI_Config, 0x54, 0x04)

                Field (HDCS, DWordAcc, NoLock, Preserve)

                {

                        ,   15,

                    PMES,   1

                }


                Method (_PRW, 0, Not******ized)

                {

                    If (LEqual (WKMD, One))

                    {

                        Return (Package (0x02)

                        {

                            0x0D,

                            0x03

                        })

                    }

                    Else

                    {

                        Return (Package (0x02)

                        {

                            0x0D,

                            Zero

                        })

                    }

                }

            }

Sửa lại như sau: Thay AZAL bằng HDEF và replace lại như sau:

Code:

Device (HDEF)

            {

                Name (_ADR, 0x001B0000)

                Name (_S3D, 0x03)

                Name (RID, Zero)

                Name (_PRW, Package (0x02)

                {

                    0x05,

                    0x04

                })

                Method (_PSW, 1, Not******ized)

                {

                    Noop

                }

            }

Ok, compile lại và cài voodooHDA vào E=>E

l) Native Speedtep CPU T6400

a) Enabler LPC: Dùng để quản lý nguồn CPU:

Search: 0x001F0000

Các bạn thấy như sau:

Code:

Device (LPC)

            {

                Name (_ADR, 0x001F0000)

                OperationRegion (LPC0, PCI_Config, 0x40, 0xC0)

                Field (LPC0, AnyAcc, NoLock, Preserve)

                {

                            Offset (0x20),

                    PARC,   8,

                    PBRC,   8,

                    PCRC,   8,

                    PDRC,   8,

                            Offset (0x28),

......................

......................

Thêm vào như sau:

Code:

Device (LPC)

            {

                Name (_ADR, 0x001F0000)

                Method (_DSM, 4, Not******ized)

                {

                    Store (Package (0x02)

                        {

                            "device-id",

                            Buffer (0x04)

                            {

                                0x16, 0x29, 0x00, 0x00

                            }

                        }, Local0)

                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

                    Return (Local0)

                }


                OperationRegion (LPC0, PCI_Config, 0x40, 0xC0)

                Field (LPC0, AnyAcc, NoLock, Preserve)

                {

                            Offset (0x20),

                    PARC,   8,

                    PBRC,   8,

                    PCRC,   8,

                    PDRC,   8,

...............................

b) Enabler C-state và P-state:

Các bạn còn nhớ các file SSDT mình đã xuất ra trong Win? đây là lúc dùng nó.

Trong tất cả các file SSDT chúng ta sẽ chỉ sử dụng 2 file:

Chỉ sử dụng 2 file:

file 1: mở lên, chú ý chỗ CPU0lst nó có dòng này: DefinitionBlock ("./dsdt.aml", "SSDT", 1, "PmRef", "Cpu0Ist", 0x00003000) đó là file chứa thông tin P-state

file 2: Mở lên, chú ý chỗ Cpu0 nó có dòng này: DefinitionBlock ("./dsdt.aml", "SSDT", 1, "PmRef", "Cpu0Cst", 0x00003001)đó là file chứa thông tin C-state

Bắt đầu nhé:

Chỗ locate chọn CPU: nó hiện như sau:

Code:

Scope (_PR)

    {

        Processor (CPU0, 0x01, 0x00000410, 0x06) {}

        Processor (CPU1, 0x02, 0x00000410, 0x06) {}

        Processor (CPU2, 0x03, 0x00000410, 0x06) {}

        Processor (CPU3, 0x04, 0x00000410, 0x06) {}

    }

Delete toàn bộ.

Replace bằng dòng sau:

Code:

Scope (_PR)

    {

        Name (PSS, Package (0x03)

        {

            Package (0x06)

            {

                Zero,

                Zero,

                0x0A,

                0x0A,

                0x0A23,

                Zero

            },


            Package (0x06)

            {

                Zero,

                Zero,

                0x0A,

                0x0A,

                0x081A,

                One

            },


            Package (0x06)

            {

                Zero,

                Zero,

                0x0A,

                0x0A,

                0x0611,

                0x02

            }

        })

        Name (PSD, Package (0x05)

        {

            0x05,

            Zero,

            Zero,

            0xFC,

            0x04

        })

        Name (CST, Package (0x05)

        {

            0x04,

            Package (0x04)

            {

                ResourceTemplate ()

                {

                    Register (FFixedHW,

                        0x01,               // Bit Width

                        0x02,               // Bit Offset

                        0x0000000000000000, // Address

                        0x01,               // Access Size

                        )

                },


                One,

                One,

                0x03E8

            },


            Package (0x04)

            {

                ResourceTemplate ()

                {

                    Register (FFixedHW,

                        0x01,               // Bit Width

                        0x02,               // Bit Offset

                        0x0000000000000010, // Address

                        0x02,               // Access Size

                        )

                },


                0x02,

                One,

                0x01F4

            },


            Package (0x04)

            {

                ResourceTemplate ()

                {

                    Register (FFixedHW,

                        0x01,               // Bit Width

                        0x02,               // Bit Offset

                        0x0000000000000020, // Address

                        0x03,               // Access Size

                        )

                },


                0x03,

                0x11,

                0xFA

            },


            Package (0x04)

            {

                ResourceTemplate ()

                {

                    Register (FFixedHW,

                        0x01,               // Bit Width

                        0x02,               // Bit Offset

                        0x0000000000000030, // Address

                        0x04,               // Access Size

                        )

                },


                0x04,

                0x39,

                0x64

            }

        })

        Processor (CPU0, 0x01, 0x00000410, 0x06)

        {

            Alias (PSS, _PSS)

            Alias (PSD, _PSD)

            Alias (CST, _CST)

        }


        Processor (CPU1, 0x02, 0x00000410, 0x06)

        {

            Alias (PSS, _PSS)

            Alias (PSD, _PSD)

            Alias (CST, _CST)

        }

    }

Ở đây mình sử dụng lệnh Alias để dùng chung thiết lập P-state và C-state cho 2 CPU.

Tiếp tục, mở file SSDT chứa P-state tìm đến chỗ này:

Code:

Name (_PSS, Package (0x03)

        {

            Package (0x06)

            {

                0x000007D0,

                0x000088B8,

                0x0000000A,

                0x0000000A,

                0x00000A23,

                0x00000A23

            },


            Package (0x06)

            {

                0x00000640,

                0x000061A8,

                0x0000000A,

                0x0000000A,

                0x0000081A,

                0x0000081A

            },


            Package (0x06)

            {

                0x000004B0,

                0x00003A98,

                0x0000000A,

                0x0000000A,

                0x00000611,

                0x00000611

            }

        })

Thông tin này cho biết mình có 3 Pstate:

Các bạn nhìn lên trên ấy, sẽ thấy mình add vào lệnh Alias nè:

Code:

Name (PSS, Package (0x03)

        {

            Package (0x06)

            {

                Zero,

                Zero,

               0x0A,

                0x0A,

                0x0A23,

                Zero

            },


            Package (0x06)

            {

                Zero,

                Zero,

                0x0A,

                0x0A,

                0x081A,

                One

            },


            Package (0x06)

            {

                Zero,

                Zero,

                0x0A,

                0x0A,

               0x0611,

               0x02

            }

        })

Dòng màu đỏ: giữ nguyên

Dòng màu tím: thông số này nè:

Code:

0x0000000A,

      0x0000000A,

Dòng màu xanh: lấy từ: 0x00000A23, 0x0000081A, 0x00000611=> thông số P-state

Dòng xanh lá cây: Thứ tự P-state

OK, vậy là xong P-sate

Tiếp theo sử dụng PSD chung cho 2 CPU, các bạn có thể thấy trong SSDT của P-state:

của mình:

Code:

Name (PSD, Package (0x05)

        {

            0x05,

            Zero,

            Zero,

            0xFC,

            0x04

        })

Mình add như trên .

OK.

Tiếp tục mình làm phần C-state

Các bạn thấy mình add như sau:

Code:

Name (CST, Package (0x05)

        {

            0x04,

            Package (0x04)

            {

                ResourceTemplate ()

                {

                    Register (FFixedHW,

                        0x01,               // Bit Width

                        0x02,               // Bit Offset

                       0x0000000000000000, // Address

                       0x01,               // Access Size

                        )

                },


                One,

                One,

                0x03E8

            },


            Package (0x04)

            {

                ResourceTemplate ()

                {

                    Register (FFixedHW,

                        0x01,               // Bit Width

                        0x02,               // Bit Offset

                        0x0000000000000010, // Address

                        0x02,               // Access Size

                        )

                },


                0x02,

                One,

                0x01F4

            },


            Package (0x04)

            {

                ResourceTemplate ()

                {

                    Register (FFixedHW,

                        0x01,               // Bit Width

                        0x02,               // Bit Offset

                        0x0000000000000020, // Address

                       0x03,               // Access Size

                        )

                },


                0x03,

                0x11,

                0xFA

            },


            Package (0x04)

            {

                ResourceTemplate ()

                {

                    Register (FFixedHW,

                        0x01,               // Bit Width

                        0x02,               // Bit Offset

                        0x0000000000000030, // Address

                        0x04,               // Access Size

                        )

                },


                0x04,

                0x39,

                0x64

            }

        })

Chú ý những dòng màu đỏ và tìm các thành phần add vào trên SSDT theo thứ tự 00, 10, 20, 30. Nó sẽ có những dòng tương tự như vậy, các bạn chỉ cần copy từ lệnh Package (0x04) bỏ vô là xong.

OK, vậy là xong phần C-state.

Thực hiện compile lại.

c) Edit Smbios.plist:

Chọn cấu hình máy phù hợp, mình chọn MacbookPro 5,1 vì có cấu hình mình gần giống nó. Lấy cấu hình này để Snow Leopard thực hiện quản lý nguồn cho CPU và GPU.

) Sử dụng Legacy Kext:

Dùng 1 legacy kext sẽ giúp cho các bạn có thể bổ sung thông tin cấu hình Macbook từ đó Snow Leopard thực hiện nhận dạng CPU của bạn, cùng với SMbios.plist nó sẽ quản lý như 1 máy mac thực sự, Kext Legacy này đơn giản chỉ có 1 file info trong đó thôi. Các bạn xem hình, chọn show package contens sẽ thấy như sau:



Các bạn có thể đổi tên kext này tùy ý, chú ý trong phần IOKitPersonalities, các bạn add thông số từ ACPI_SMC_PlatformPlugin.kext trong S=>L=>E. Các bạn theo đường dẫn này:

/S/L/E/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources/

Mở lên:thấy như sau:



Tiếp tục mở file MacBookPro5_1.plist, mở lên, copy toàn bộ IOPlatformThermalProfile bỏ vào trong file Legacy Kext như hình:


Sau đó lưu lại file kext Legacy là xong.

Thự hiện cài đặt kext legacy đó vào trong Extra=> Extensions.

Sau này kiểm tra trong IOregetryExplorer ta thấy như sau là OK nè:



Tới đây là ok roài đó.

Kết thúc Patch DSDT nhé.


Final Patch:


Sau khi thực hiện tất cả các bước trên, thực hiện tiếp các bước sau:

Xóa các kext sau trong extra=>Extension:

+ NullCPUPowerManagement.kext

+ EvOreboot.kext

+ ElliottForceLegacyRTC.kext

Gỡ bỏ lệnh GraphicsEnabler ra trong com.apple.boot.plist

Chép file dsdt.aml ra desktop và đổi tên thành DSDT.aml copy vào thư mục Extra, bootloader sẽ tự load

Mở terminal lên gõ pfix, gõ pass rùi chọn ổ cài Mac để nó set permission và repair ổ mac.

Compile lại Extensions.mkext giữa E=>E và S=>L=>E: lệnh này để build kext của Extra và system lại chung với nhau. Bằng cách gõ các dòng sau:

Code:

sudo -s (gõ pass)

chown 0:0 /

kextcache -v 1 -t -m /Extra/Extensions.mkext /Extra/Extensions /System/Library/Extensions

Và cuối cùng reboot và thưởng thức thành quả.

My Full Extra: http://www.mediafire.com/?gmgdqyyjelde2iz