niemtin007

facebook.com/niemtin007

hãy theo đuổi đam mê - chủ nợ sẽ theo đuổi bạn

Monday, May 25, 2015

[Guide] Patch DSDT cho máy Hackintosh (Phần 5)


Lever 5: Hướng dẫn Patch DSDT cho máy Hackintosh:



Patch DSDT có khó không?

Bản chất việc Patch DSDT khá là khó vì bạn phải làm việc với ngôn ngữ máy, phải làm việc với ngôn ngữ cấp thấp sẽ rất khó khăn với newbie. Nếu bạn đã có kiến thức lập trình thì sẽ đỡ vất vả hơn. Nhưng trong thế giới Hackintosh, hầu như các Patch đã được làm sẵn. Các bạn newbie chỉ cần chọn đúng gói Patch và áp dụng cho đúng vào DSDT của máy mình là được. Cho nên tuy khó nhưng thành ra lại dễ. Tất nhiên, nếu bạn muốn đi sâu vào thế giới hackintosh bạn cần hiểu những dòng code mình patch nó là gì để tối ưu nó, chúc các bạn thành công!


Tôi có thể dùng DSDT của máy khác không (đỡ phải patch)?

Câu trả lời là có nhưng chỉ với những máy có cùng chung mainboard. Thường thì không khuyến cáo sử dụng DSDT của máy khác vì bản thân mỗi máy ACPI có thể hơi khác nhau nên có thể sinh ra một số bug làm cho máy chạy không ổn định. Nếu không lười hãy tự tạo DSDT cho riêng mình và sử dụng!


Làm sao để lấy được file DSDT của máy mình?

DSDT có thể dump được từ Windows, Mac hay Linux; nhưng thuận lợi và nhanh chóng nhất ta nên tận dụng chức năng này của Clover






Có DSDT rồi giờ ta làm gì?

DSDT khi được dump sẽ có đuôi *.aml nhưng khi patch ta cần biên dịch nó về đuôi *.dsl (Sau khi patch xong ta lại lưu về *.aml để sử dụng)

Để DSDT ít lỗi và hoạt động tốt nhất bạn cần dịch ngược nó đúng cách. Nếu dịch sai sẽ gây ra một số lỗi rất khó chịu và rất khó để khắc phục. Chi tiết về cách dùng lệnh MacIASL được giới thiệu tại đây

Link tải iasl mới nhất https://bitbucket.org/RehabMan/acpica/downloads

Copy các file DSDT, SSDT đã dump ở trên và iasl vào một folder tên là Patch đặt ngoài Desktop sau đó mở terminal và Copy/Paste/Enter các lệnh sau:

cd ~/Desktop/Patch
./iasl -da -dl *.aml


Lưu ý: thư mục Patch chỉ chứa DSDT, SSDT và iasl, không được để cùng các file nào khác.



Tất cả các file đuôi *.aml sẽ được nhân bản thành các file cùng tên với đuôi *.dsl ta bắt đầu làm việc với các file này. Click đúp vào file dsdt.dsl (mặc định sẽ được mở bằng MacIASL) và làm theo hình:
Link tải MacIASL mới nhấthttps://bitbucket.org/RehabMan/os-x-maciasl-patchmatic/downloads

Thiết lập MacIASL về ACPI 5.0 hoặc cao hơn


Cách thêm kho patch online vào MacIASL:


Kho Patch Online hữu ích:
  • Rehabman DSDT Patches:
    http://raw.github.com/RehabMan/Laptop-DSDT-Patch/master
  • HP Probook patch:
    http://raw.github.com/RehabMan/HP-ProBook-4x30s-DSDT-Patch/master
  • PCbeta dxxs dsdt Patches:
    http://raw.github.com/Yuki-Judai/dxxs-DSDT-Patch/master
  • MacMan Gigabyte:
    http://www.tonymac86.com/DSDT/
  • Toleda Audio HDMI HD4600/Haswell/8 Series:
    http://raw.github.com/toleda/audio_hdmi_8series/master
  • Toleda Airport PCle Half Mini:
    http://raw.github.com/toleda/audio_ALCInjection/master
  • Toleda Audio Realtek ALC injection
    http://raw.github.com/toleda/audio_ALCInjection/master
  • Toleda Audio HDMI UEFI Audio dsdt edits - Desktop/Laptop/Intel NUC
    http://raw.github.com/toleda/audio_hdmi_uefi/master
  • Toleda Audio HDMI HD4000/Ivy Bridge/7 Series
    http://raw.github.com/toleda/audio_hdmi_hd4000/master
  • Toleda Audio HDMI HD3000/Sandy Bridge/6 Series
    http://raw.github.com/toleda/audio_hdmi_hd3000/master
  • Toleda Audio HDMI 5 Series
    http://raw.github.com/toleda/audio_hdmi_5series/master

Ngoài ra còn kho patch khác khá hữu ích là PJALM's DSDT Patches (nguồn)
  • ASUS: All-in-one patches for ASUS motherboards
    http://maciasl.sourceforge.net/pjalm/asus/
  • MSI: All-in-one patches for MSI motherboards
    http://maciasl.sourceforge.net/pjalm/msi/
  • Zotac: All-in-one patches for Zotac motherboards
    http://maciasl.sourceforge.net/pjalm/zotac/
  • Gigabyte: All-in-one patches for Gigabyte motherboards
    http://maciasl.sourceforge.net/pjalm/gigabyte/
  • ASRock: All-in-one patches for ASRock motherboards
    http://maciasl.sourceforge.net/pjalm/asrock/
  • Graphics: Patches for Intel HD and AMD/nVidia graphic cards
    http://maciasl.sourceforge.net/pjalm/graphics/
  • Intel Series 6: Intel Series 6 Patches for SATA, USB, SMBUS, IGPU, GbE and general fixes
    http://maciasl.sourceforge.net/pjalm/intel6/
  • Intel Series 7: Intel Series 7 Patches for SATA, USB, SMBUS, IGPU, GbE and general fixes
    http://maciasl.sourceforge.net/pjalm/intel7/
  • Intel Series 8: Intel Series 8 Patches for SATA, USB and general fixes
    http://maciasl.sourceforge.net/pjalm/intel8/
  • Intel Series 9: Intel Series 9 Patches for SATA, USB and general fixes
    http://maciasl.sourceforge.net/pjalm/intel9/
  • General: General patches for Shutdown, HDEF, USB3, SATA and LAN
    http://maciasl.sourceforge.net/pjalm/general/


Làm quen một chút đến giao diện của công cụ MacIASL



Khu vực 1: Chứa các gói patch được tác giả liên tục cập nhật trên server, khi click đúp vào gói lập tức các code trong gói patch sẽ xuất hiện tại khu vực 2
Khu vực 2: Hiển thị nội dung của gói patch
Khu vực 3: Hiện thị sự thay đổi khi áp dụng gói patch trên máy bạn (nhấn Apply để hoàn tất)




Cách thêm kho Patch Offline:

Thường có một vấn đề khá nhỏ nhưng hơi phiền phức của hầu hết mọi người khi cài xong mac OS là máy không có wifi cũng đồng nghĩa với không có internet (trừ khi bạn dùng mạng dây). Vậy để thuận tiện trước đó bạn nên tải gói patch offline
https://github.com/RehabMan/Laptop-DSDT-Patch

Bạn chỉ cần tìm đến file *.txt chứa code cần patch cho máy bạn:



Giới thiệu chi tiết về kho patch của RehabMan

RahabMan là một Moderator của tonymacx86.com rất nổi tiếng trong cộng đồng hackintosh với nhiều bài viết chất lượng. Thông qua việc support nhiệt tình cho member và tham gia các dự án khác nhau. Anh đã và đang xây dựng một kho patch tự động giúp ích rất nhiều cho cộng đồng.

Trong gói patch của RehabMan bao gồm 2 phần:

Patch cơ bản:
  • Various Syntax Error Fixes: được bắt đầu bằng ký hiệu [syn]. Công dụng của nó là fix các lỗi phổ biến của DSDT/SSDT sau khi biên dịch để có được bản DSDT/SSDT sạch trước khi patch. Hoặc dùng để sửa lỗi sau khi patch.

  • System Patches: được bắt đầu bằng ký hiệu [sys]. Là các gói patch giúp fix lỗi cơ bản của một máy hackintosh (lỗi này thường phổ biến trên hầu hết các máy). Thí dụ như:

    Nếu như chíp máy bạn đang dùng là Haswell CPU/8-series nên sử dụng gói patch Haswell LPC để giúp Mac OS có thể load được AppleLPC.kext

  • USB (ECHI) Patches: được bắt đầu bằng ký hiệu [usb]
    Nếu bạn sử dụng kext của USB 3.0 trong công cụ HVT do pokenguyen tổng hợp thì bạn không được sử dụng gói [usb] 7-series USB3 Multiplex. Bạn chỉ dùng gói patch này khi dùng kext gốc của Mac là AppleUSBXHCI.kext. Thường khá ít máy có thể áp dụng gói patch này ví dụ như Lenovo u310/u410.

    [usb] 6-series USB và [usb] 7-series/8-series USB được sử dụng rộng rãi cho hầu hết các máy, patch này sử dụng kèm với GenericUSBXCHI.kext trong gói HVT của pokenguyen. Tùy cấu hình máy mà bạn chọn cho đúng. Ví dụ như các dòng chip từ Ivy trở về sau đều sử dụng [usb] 7-series/8-series USB

    Nếu sử dụng Yosemite bạn nên dùng GenericUSBXHCI.kext riêng cho phiên bản hệ điều hành này, ngoài ra bạn cần phải thêm lệnh -gux_defer_usb2 trên kernel flag của Clover (việc này bạn có thể làm thông qua chỉnh sửa config.plist)
Patch nâng cao:
  • Audio: tùy cách thiết đặt thông số khi patch AppleHDA mà sử dụng gói patch [audio] Audio Layout cho phù hợp. Luôn sử dụng kèm theo [sys] IRQ Fix khi sử dụng patch này. Tùy khi cài kext AppleHDA nó yêu cầu áp dụng Layout nào thì bạn thay đổi số 12 thành số tương ứng mà nó yêu cầu (đa số các máy đều dùng layout 12)

  • Battery Patches: gói patch giúp nhận đúng phần trăm của pin được bắt đầu bằng ký hiệu [bat]. Có thể một số máy không cần patch pin máy vẫn có thể nhận được. Đây là gói patch tùy chọn (không bắt buộc)

  • Intel Graphics Patches: gói patch giúp máy nhận đúng card onboard (full QE/CI) và fix thanh tăng giảm độ sáng được mượt mà. Được bắt đầu bằng ký hiệu [igpu]

  • Disable Nvidia/Radeon: gói patch giúp tắt card rời, sử dụng card onboard để máy tiêu thụ điện năng và giúp máy mát hơn. Được bắt đầu bằng ký hiệu [gfx0]. Thường khuyên nên disable card rời thông qua SSDT

  • Fan control/temperature/LID status Patches: gói patch giúp điều khiển quạt để quản lý nhiệt độ của máy. Được bắt đầu bằng ký hiệu [misc]

  • Luôn áp dụng Patch DTGP: DTGP là thành phần của Method _DSM dùng để nhận diện phần cứng của Mac OS. Thường thì DSDT gốc đã có chứa Method này nhưng ta cần remove hết nó rồi áp dụng Menthod DTGP mới đã chỉnh sửa. Patch này có sẵn trong kho Patch online của MacIASL.


Luôn backup file DSDT trước khi tiến hành patch

Làm việc với mấy dòng code không phải lúc nào bạn cũng có thể chắc chắn không có lỗi xảy ra cả, luôn copy dự phòng DSDT là một cách hiệu quả và đừng coi thường việc này vì nó có thể khiến bạn mất thời gian vô ích.

Bạn nên giữ lại DSDT.dsl đã lưu lại thiết lập sau khi đã fix hết lỗi và một bản sao của nó sau khi patch thành công để sau này cần patch thêm ta patch tiếp từ bản sao này và lưu về DSDT.aml để sử dụng.


Check lỗi của DSDT/SSDT bằng MacIASL:

Khi check lỗi sẽ hiện ra bảng Compiler Summary khi click vào từng dòng thông báo lỗi nó sẽ chỉ cho bạn đến vị trí lỗi.



Sửa lỗi của DSDT/SSDT sau khi biên dịch

Khi gặp thông báo lỗi với newbie thì câu hỏi trong đầu luôn là: "fix nó thế nào?" Thật nực cười nhưng hãy tận dụng anh Google. Bạn chọn vào dòng thông báo lỗi trên bảng Compiler Summary nhấn tổ hợp phím Alt + C để sao chép tên lỗi và tìm nó với cụm từ

How to fix ...

Để phạm vi tìm kiếm cho nhiều kết quả bạn nên chỉ giữ lại tên thông báo chính bỏ hết các nội dung miêu tả vị trí hay mở ngoặc đóng ngoặc, thí dụ đối với máy mình

How to fix ResoureTag larger than Field

Fix mấy thứ linh tinh liên quan đến code luôn đòi hỏi kiên nhẫn, nhiều lúc phải thử nhiều cách mới tìm ra cái nào là tối ưu nhất, nên nói patch DSDT khó là khó ở chỗ này. Các cảnh báo Errors phải được sửa hết trước khi patch DSDT còn Warnings bạn có thể fix sau cũng không sao

Một số quy tắc:

  • Luôn sử dụng các patch Various Syntax Error Fixes của RehabMan để fix DSDT/SSDT trước. Những lỗi còn sót lại tiếp tục khắc phục bằng tay!
  • Lời khuyên nên remove tất cả  _DSM methods (của DSDT và SSDT) trước khi áp dụng các gói patch



Fix Errors và Warnings (DSDT) của một số trường hợp

Warning Result is not used, possible operator timeout will be missed 
Trước khi fix Sau khi fix
Acquire (MUT0, 0x0FFF) Acquire (MUT0, 0xFFFF)


Warning Not all control paths return a value (_DSM) hay Warning Reserved method must return a value (Integer/String/Buffer/Package/Reference required for _DSM) ta sửa bằng cách thêm lệnh Return (zero) trước dấu "}" cuối cùng của một method
Trước khi fix Sau khi fix
Method (_DSM, 4, Serialized)
{
    Name (DRET, Buffer (0x04)
    {      
       ...........
    }
}
Method (_DSM, 4, Serialized)
{
    Name (DRET, Buffer (0x04)
    {
         ...........
    }
    Return (Zero)
}


Warning Not all control paths return a value (_HID) hay Warning Reserved method must return a value (Integer/String required for _HID).
Trước khi fix Sau khi fix
Method (_HID, 0, NotSerialized)
{
    If (TCMF) {}
    Else
    {
        Return (0x310CD041)
    }
}
Method (_HID, 0, NotSerialized)
{
    If (TCMF)
    {
        Return (Zero)
    }
    Else
    {
        Return (0x310CD041)
    }
}


Một số lỗi khi gặp thông báo lỗi thí dụ như cảnh báo về return ta click vào nó để biết vị trí, tiến hành xóa nó sẽ fix được lỗi.


Ngoài ra nếu gặp cảnh báo Warning như Dell Vostro 3560 của mình thì fix như phía dưới





Patch DSDT sau khi DSDT đã fix sạch errors và warning

Làm sao biết được cái nào cần để patch? Đó là câu hỏi chung của newbie

Câu trả lời là: xem máy bạn thiếu chức năng gì hoặc chức năng gì chưa hoạt động tốt thì patch cái đó

Thực ra trong gói patch của RehabMan đã chứa đầy đủ những thành phần quan trọng cần cho một máy hackintosh, ta chỉ việc chọn cho đúng. Nếu lười tìm hiểu chức năng của từng patch thì cứ áp dụng các gói patch từ trên xuống của RehabMan, cái nào không có cho máy bạn ta ghi nhớ nó và khắc phục sau bằng cách sử dụng các kho Patch khác hoặc những cách Patch khác dành riêng cho máy bạn được share trên diễn đàn.

Trước khi áp dụng gói patch nào bạn nên đọc miêu tả của nó xem dùng khi nào, cho máy nào...? Nếu không rõ thì cứ thử patch và compile (miễn sao khi bỏ vào clover không gây lỗi cho máy là được)

Tôi muốn patch cho âm thanh, màn hình...  vậy sao xác định được vị trí của nó trong đống code của DSDT?

DSDT lưu lại địa chỉ của phần cứng nên việc của ta là xác định đúng tên gì dành cho phần cứng gì. Dưới đây là bảng danh sách tên phần cứng thường gặp trên DSDT:


Tên phần cứng
Tên thường gặp trên DSDT
PCI Bus (hay PCI Root) PCI0
ACPI Lid LID0
ACPI Power Button PWRB
ACPI Sleep Button SLPB
AC Adapter ADP1
Battery BAT0
Backlight panel PNLF
SMC Control SMC
Embedded Controller EC
HPET (High precision event timer) HPET
RTC (Real time clock) RTC
PIC (Programmable Interrupt Controller) IPIC
TMR (System Timer) TIMR
DMA (Direct memory access controller) DMAC
Numeric data processor MATH
Firmware Hub Device FWHD
LPC (Low pin count) LPCB
PCI Express Root Port x RP0x
SMBUS Controller SBUS
High Definition Audio Controller HDEF
HDMI Audio Controller HDAU
SATA AHCI Controller SATA
Integrated Graphics IGPU
Discrete Graphics GFX0
PCI Bridge PCIB
Display Output DDxx
USB UHCI/EHCI UHCx, EHCx


Một vài ví dụ patch DSDT
Các path DSDT trong gói patch của RehabMan đã được chuyển về dạng code tự động, nghĩa là bạn chỉ cần copy/paste nó vào khu vực 2 của tool MacIASL khi nhấn nút patch (đã giới thiệu phía trên) là nó sẽ tự động dò tìm đến địa chỉ của thiết bị và patch nó. Thường thì các patch được chia sẻ trên diễn đàn là các patch thuần nên ta cần dò nó qua khung search trên MacIASL và dán nó trực tiếp vào khu vực code

  • PWRB, SLPB: Khi ta nhấn nút nguồn trên máy Mac sẽ xuất hiện bảng shut down, restart hay sleep nhưng một số máy nút này không có tác dụng, cách fix sẽ là:

    Bước 1
    : Thay HID thành CID trong Device (PWRB)
    Trước khi fix Sau khi fix
    Device (PWRB)
    {
        Name (_HID, EisaId ("PNP0C0C"))
        Method (_STA, 0, NotSerialized)
        {
            Return (0x0B)
        }
    }
    Device (PWRB)
    {
        Name (_CID, EisaId ("PNP0C0C"))
        Method (_STA, 0, NotSerialized)
        {
            Return (0x0B)
        }
    }

    Bước 2: Thêm Device (SLPB) vào sau Device (PWRB)
    Trước khi fix Sau khi fix
    Device (PWRB)
    {
        ...
    }
    Device (PWRB)
    {
        ...
    }
    Device (SLPB)
    {
        Name (_HID, EisaId ("PNP0C0E"))
        Name (_STA, 0x0B)
    }

  • HPET: Nguyên nhân gây lỗi không nhận HPET dẫn đến Kernel Panic khi load AppleIntelCPUPowerManagement.kext là do lỗi giá trị của _STA (Status) và _CRS (Current Resource Settings). Lỗi này đã có code fix tự động trong kho patch của RehabMan ( [sys] HPET fix )

  • RTC: Lỗi RTC hay gặp trên các mainboard Gigabyte, cụ thể là khi boot vào Mac OS, AppleRTC.kext khi xử lí dữ liệu RTC sẽ gây lỗi cho CMOS, dẫn đến khi khởi động lại sẽ Reset CMOS. Lỗi này đã có code fix tự động trong kho patch của RehabMan ( [sys] RTC fix )

  • PIC, TMR: trong một số trường hợp fix PIC, TMR sẽ giúp màn hình tự giảm độ sáng khi chuyển sang dùng pin hoặc ở trạng thái nghỉ, cách fix:

    Bước 1: Xóa IRQNoFlags trong IPIC và TIMR
    Bước 2: Sửa method _CRS của TIMR để luôn trả về giá trị ATT6 (tương tự fix HPET)

    Trước khi fix Sau khi fix
    Device (PIC)
    {
        Name (_HID, EisaId ("PNP0000"))
        Name (_CRS, ResourceTemplate ()
        {
            IO (Decode16,
                0x0020, // Range Minimum
                0x0020, // Range Maximum
                0x01, // Alignment
                0x02, // Length
            )
            IO (Decode16,
                0x00A0, // Range Minimum
                0x00A0, // Range Maximum
                0x01, // Alignment
                0x02, // Length
            )
            IRQNoFlags ()
            {2}
        })
    }
    Device (PIC)
    {
        Name (_HID, EisaId ("PNP0000"))
        Name (_CRS, ResourceTemplate ()
        {
            IO (Decode16,
                0x0020, // Range Minimum
                0x0020, // Range Maximum
                0x01, // Alignment
                0x02, // Length
            )
            IO (Decode16,
                0x00A0, // Range Minimum
                0x00A0, // Range Maximum
                0x01, // Alignment
                0x02, // Length
            )
            /* Xoa IRQNoFlags */

        })
    }
    Device (TMR)
    {
        Name (_HID, EisaId ("PNP0100"))
        Name (ATT5, ResourceTemplate ()
        {
            IO (Decode16,
                0x0040, // Range Minimum
                0x0040, // Range Maximum
                0x00, // Alignment
                0x04, // Length
            )
            IRQNoFlags ()
            {0}
        })
        Name (ATT6, ResourceTemplate ()
        {
            IO (Decode16,
                0x0040, // Range Minimum
                0x0040, // Range Maximum
                0x00, // Alignment
                0x04, // Length
            )
        })
        Method (_CRS, 0, NotSerialized)
        {
            If (LGreaterEqual (OSFX, 0x03))
            {
                If (HPTF)
                {
                    Return (ATT6)
                }
                Else
                {
                    Return (ATT5)
                }
            }
            Else
            {
                Return (ATT5)
            }
        }
    }
    Device (TMR)
    {
        Name (_HID, EisaId ("PNP0100"))
        Name (ATT5, ResourceTemplate ()
        {
            IO (Decode16,
                0x0040, // Range Minimum
                0x0040, // Range Maximum
                0x00, // Alignment
                0x04, // Length
            )
            /* Xoa IRQNoFlags */
        })
        Name (ATT6, ResourceTemplate ()
        {
            IO (Decode16,
                0x0040, // Range Minimum
                0x0040, // Range Maximum
                0x00, // Alignment
                0x04, // Length
            )
        })
        Method (_CRS, 0, NotSerialized)
        {
            Return (ATT6)
        }
    }

  • Backlight: Fix backlight sẽ giúp Mac OS điều khiển được độ sáng màn hình (thay đổi độ sáng trong System Preferences / Display). Thực hiện fix bằng cách thêm Device (PNLF) vào Scope (_SB) (có thể thêm sau Device (PWRB)). Fix này đã có ở trong kho patch của RehabMan

  • Adapter: Fix này giúp AppleACPIACAdapter nhận diện được bộ sạc laptop (AC adapter), tức là Mac OS sẽ biết được rằng bạn có cắm bộ sạc hay không. Fix này không thật sự cần thiết khi xài VoodooBattery.kext vì VoodooBattery.kext có thể nhận bộ sạc. Fix này đã có ở trong kho patch của RehabMan ( [sys] AC Adapter fix )

  • LPC: LPC là bộ phận trong Chipset có nhiệm vụ quản lí năng lượng của các Device trong máy tính, trong đó có CPU. Việc nhận LPC sẽ giúp Mac OS quản lí năng lượng tốt hơn, đặc biệt là quản lí C-State của CPU cho phép CPU chuyển về các trạng thái thấp năng lượng (và cũng góp phần giảm nhiệt độ của CPU)

    AppleLPC.kext là kext nhận LPC trong Mac OS. Tuy nhiên kext này không hỗ trợ hết các chip LPC mà chỉ hỗ trợ một số lượng hữu hạn LPC tương ứng với các dòng Chipset mà máy Mac sử dụng. Lỗi này thường gặp trên hệ thống sử dụng chip Haswell

    Fix này đã có ở trong kho patch của RehabMan ( [sys] Haswell LPC )

  • SATA: Một số máy gặp tình trạng các port SATA bị nhận nhầm thành External (Gắn ngoài) thay vì Internal (Gắn trong), dẫn đến các phân vùng của ổ cứng gắn trong hiện biểu tượng màu vàng cam của ổ cứng gắn ngoài

    Fix lỗi này bằng cách inject device-id SATA vào DSDT và đổi tên các Device tương ứng với các port SATA theo chuẩn DSDT của Mac, dẫn đến các port được nhận là Internal

  • HDEF: Đây là patch cho âm thanh, gói patch này đã có trên kho patch của RehabMan

  • SMBUS: SMBUS (System Management Bus) là một kênh truyền tốc độ thấp dùng để truyền các thông tin cơ bản (thông tin thiết bị, trạng thái, các chỉ lệnh, lỗi, ...) từ bo mạch chủ tới các thiết bị. Thực hiện fix SMBUS giúp AppleSMBUS nhận và điều khiển được SMBUS Controller. Gói fix này đã có trong kho patch của RegabMan ( [sys] SMBUS fix )


Đây là danh sách các patch cơ bản dành cho hầu hết các máy

[Sys] Fix _WAK Arg0 v2
[Sys] HPET Fix
[Sys] SMBUS Fix
[Sys] IRQ Fix
[Sys] RTC Fix
[Sys] OS Check Fix
[Sys] Fix Mutex with non-zero SyncLevel
[Sys] Fix PNOT/PPNT
[Sys] Add IMEI



Đây là những gói patch mình áp dụng lên DSDT của Dell Vostro 3560

[Audio] Audio Layout 12
[Igpu] Brightness fix (HD3000/HD4000)

[Igpu] HD4000 High Resolution
[Igpu] Rename GFX0 to IGPU
[Misc] Poll for LID changes
[Misc] remove _PRW from LID
[Sys] Fix TNOT Error
[Sys] AC Adapter Fix
[Sys] Add IMEI
[Sys] Add MCHC
[Sys] Fix Mutex with non-zero SyncLevel
[Sys] Fix PNOT/PPNT
[Sys] HPET fix
[Sys] IRQ fix
[Sys] OS check fix (windows 8)
[Sys] Shutdown Fix 2
[Sys] SMBUS fix
[usb] 7-series/8-series USB
[usb] USB3 _PRW(0x0D) and rename XHC to XHC1







Lưu DSDT về đuôi *.aml, tiến hành xác định và patch SSDT để hoàn thiện




Đôi chút về chức năng của SSDT

Nói một cách đơn giản thì SSDT là các bảng đặc tả hệ thống phụ cho DSDT, mô tả một số thiết bị phụ giúp hãng sản xuất phần cứng dễ quản lý và cập nhật thiết bị. Không như DSDT có rất nhiều khoá, trái lại SSDT có khá ít nên ta dễ dàng xác định được nó đang miêu tả về thành phần gì


Tên Scope Ý nghĩa
_SB (System Bus) Scope chính, chứa tất cả các Device trong hệ thống
PTID Thường thì vô dụng đối với Mac. Nó liên quan đến tốc độ quạt, nhiệt độ hay system status
_PR (Processor) Chứa các Processor (nhân CPU) và các method liên quan đến Processor (như _PSS, _CST, ...)
_GPE (General Purpose Events) Chứa các method GPE dùng để quản lí các event của hệ thống
_TZ (Thermal Zone) Chứa các ThermalZone
PCI0.GFX0 hoặc PCI0.VID Quản lý Intel HD
PEGP hoặc DGFX, ... Quản lý đồ họa rời



Trên máy mình có 7 cái SSDT thông qua tên khóa mình xác định được SSDT nào đang mô tả thiết bị nào




Lưu ý: Nếu bạn đang sử dụng hệ thống máy tính sử dụng các dòng Core i của SandyBridge/IvyBridge/Haswell hay Xeon thì bạn nên sử dụng SSDTPrgen để tạo ra SSDT.aml giúp quản lý CPU thay vì dùng các SSDT gốc. Chỉ có script SSDTPrgen của PikerAlpha được xem là chuẩn và đầy đủ nhất cho OS X, và luôn được cập nhật liên tục. (đồng nghĩa với việc ta loại tất cả các SSDT quản lý CPU ở phía trên - như máy mình thì chỉ giữ lại SSDT1 và SSDT4). SSDT quản lý CPU là nhân tố để máy có Speedstep - Speedstep không cần phải nhiều hay trải dài từng step một, chỉ cần khi kiểm tra máy bạn có khoảng 5 cái trở lên là ổn.


Cách tắt card rời Nvidia/Radeon:

Bản thân Mac OS không hỗ trợ các thiết bị phần cứng không phải của Mac nên có patch giúp máy nhận được card rời thì nó cũng không thể phát huy được hết sức mạnh của mình do thiếu phần mềm đi theo để tối ưu hiệu suất. Ta nên tắt nó, chỉ cần tận dụng card onboard sẽ giúp máy tiêu thụ ít điện năng hơn và mát hơn. Bạn có thể tắt nó ở DSDT hoặc SSDT

Đối với DSDT:
Ta tiến hành backup DSDT đã patch trước đó. Bản DSDT yêu cầu trước đó phải rename trước để tránh lỗi khi patch
ban đầu ta sử dụng gói patch này trước:

[gfx0] Disable from _REG (DSDT)

Sau khi patch ta thử dùng nó, nếu trong quá trình shutting down hay restarting có xuất hiện lỗi thì bạn dùng lại bản DSDT backup từ trước và tiến hành patch gói này để sử dụng:

[gfx0] Disable/Enable on _WAK/_PTS (DSDT)

Đối với SSDT:
Tiến hành rename thiết bị, fix hết các lỗi liên quan tương tự DSDT. Sau đó áp dụng 2 gói patch dành cho SSDT:

[gfx0] Cleanup/Fix Errors (SSDT)
[gfx0] Disable from _INI (SSDT)


Đối với các SSDT còn lại

Fix hết lỗi và gom cùng DSDT bỏ vào Clover theo đúng đường dẫn, các SSDT cần được đặt tên theo thứ tự SSDT.aml, SSDT-1.aml, SSDT-2.aml,...




Làm gì khi không thể vào Mac OS được do đặt DSDT (patch sai) vào Clover?

Một số trường hợp, do vô ý đặt DSDT & SSDT patch còn lỗi vào Clover, hay thử nghiệm cách patch mới khiến máy không thể khởi động được vào Mac OS. Cách khắc phục là ta truy cập vào phân vùng EFI để xóa DSDT & SSDT (bị lỗi), rồi lại boot vào Mac OS để tiến hành fix lại.

Trên Windows:
Chạy Command Prompt (Admin) - Copy/ Paste từng lệnh và Enter

Code Miêu tả
Diskpart Khởi chạy tiện ích Diskpart
List Disk Khởi tạo danh sách ổ cứng trên máy bạn
Select Disk 0 Chọn ổ cứng (thông thường máy chỉ có 1 ổ thì oánh số 0)
List Partition Khởi tạo danh sách phân vùng trên ổ cứng
Select partition 1 Chọn phân vùng EFI (thường nằm đầu tiên nên chọn số 1)
Assign letter=Z Đặt tên cho phân vùng EFI
Exit Thoát Diskpart
Taskkill /im explorer.exe /f Tắt Explorer
Explorer.exe Khởi động lại Explorer




Trên WinPE (mini Windows):
Trên WinPE thì đơn giản hơn, bạn chỉ cần dùng tool phân vùng để đặt tên cho phân vùng EFI là có thể truy cập ngay vào phân vùng này

Hiện tại để boot ở chế độ EFI thì có 2 bản cứu hộ này đáng để sử dụng là gói MiniWin8 của anhdv và bản cứu hộ DLC của tranduylinh





Cơ bản việc cài Mac OS đến đây đã hoàn thành. Sau khi khởi động lại máy bạn sẽ nhận thấy được được sự khác biệt khá lớn, nhưng đã là người chơi hackintosh bạn cần test nó xem sau những công sức mình bỏ ra nó có hoạt động đúng như mình mong muốn không, đã ổn định và full tính năng như một máy Mac thật chưa? Cần tối ưu những gì để tiếp tục hoàn thiện?

To be continued....!

Thursday, April 16, 2015

[Guide] Cài Clover, kext cho máy hackintosh (Phần 4)


Lever 4: Cài Clover, cài kext cho máy hackintosh:


Công cụ cần có:
      • Clover (bản cài cho Mac OS X) (download)
      • Kext Utility (download)
      • AppleHDA Patcher (download)
      • Hackintosh Vietnam - Ultimate AIO Tool (download) - Chỉ hỗ trợ 10.11 trở xuống, với 10.11+ phải tự cập nhật thủ công một số kext, không xài kext cũ trong HVT Tool
      • AIDA64 Portable (download)
Nguồn cập nhật kext thủ công:




Bước 1: Cài Clover

Cài xong rồi mà cứ mỗi lần boot vào Mac OS X là phải boot qua USB thật khó chịu, giờ chúng ta tiến hành cài Clover lên trên phân vùng EFI của ổ cứng để giúp dual boot thuận lợi với Windows (việc này nên làm ngay sau khi cài Mac OS X xong)





Bước 2: Cài Kext (driver)

Kext luôn được các lập trình viên nghiệp dư trong cộng đồng hackintosh cập nhật liên tục để theo kịp các bản update của Mac OS, nếu các bạn sử dụng Mac OS 10.11+ cần phải cập nhật kext thủ công và cài đặt thủ công thông qua tool Kext Utility. Cách cài đặt tốt nhất là trước khi cài vào thư mục System/Library/Extensions xóa các kext muốn cài. Chạy tool Kext Utility và kéo thả từng kext vào cài đặt, sau khi cài xong chạy lại tool lần nữa và khởi động lại máy

Không phải chỉ cần cài kext xong là máy bạn nhận phần cứng hoàn chỉnh, một vài kext bạn cần kết hợp patch DSDT thì máy mới nhận diện được

Một số trường hợp sau khi cài kext máy chạy rất "ngu" kiểu như giật, lag, bàn phím, touchpad nhận loạn cả lên hoặc không ổn định... bla! bla! bla! Phần lớn do cài kext bị sai.



Yêu cầu trước khi cài kext:
  • Đã có bản backup (xem lại bài viết trước)
  • Biết cách đọc phần cứng

Rồi lại nảy sinh vấn đề thêm nữa là "tôi không biết đọc phần cứng thế nào ^^", vậy hướng dẫn các bạn cách mò mẫm luôn. Ở đây mình lấy con Dell Vostro 3560 của mình làm ví dụ

Khởi chạy tool AIDA64 đã download ở phía trên (à cái này chạy trên Windows, nên dùng bản portable). Để cài kext ta cần những thông tin:
  1. CPU thuộc dòng chip nào?
  2. Graphics gì?
  3. Network: bao gồm tên Card Lan, tên Card Wifi (phần lớn card wifi mặc định của máy không được hỗ trợ cần phải thay)
  4. Sound (tên card âm thanh của bạn, thường để máy nhận âm thanh chính chủ cần patch AppleHDA trong DSDT sau khi cài kext)
  5. Touchpad của máy bạn thuộc hãng nào?


Cách đọc thông tin phần cứng:

Để biết thông tin về CPU > Tìm xuống dòng Motherboard >>> chipset


Để biết thông tin về Card đồ họa > tìm xuống dòng Display >>> PCI/ AGP Video


Để biết thông tin về Network > tìm xuống dòng Network >>> PCI/ PnP Network


Để biết thông tin về Card âm thanh > tìm xuống dòng Multimedia >>> PCI/ PnP Audio



Riêng về touchpad thì các bạn xem trong Control panel





Quy trình cài kext 
(chỉ chọn những cái cần)

Lưu ý rằng cài kext sai hay cài thừa kext đều có thể gây lỗi cho hệ thống. Các chọn lựa minh họa dưới đây dành cho Dell Vostro 3560, với máy của các bạn cách chọn cũng tương tự, cái nào không chắc chắn bạn có thể tạm thời bỏ qua, ghi nhớ nó để sau này dễ bổ sung




Đối với AppleHDA

Đây là kext điều khiển âm thanh cho máy hackintosh bằng cách sử dụng driver gốc của Apple chỉnh sửa cấu hình cho máy của bạn. Trải nghiệm âm thanh rất tốt, ngoài công việc patch DSDT/SSDT khiến newbie vô cùng đau đầu rồi thì đến phần patch AppleHDA lại càng đau đầu hơn nữa. May mắn gần đây hai thành viên kỳ cực của diễn đàn insanelymac.com là Micky1979  & Mirone  đã kết hợp cho ra tool AppleHDA Patcher khá tiện lợi. Bạn có thể tải tool về kiểm tra xem tool có hỗ trợ cho card âm thanh của máy bạn không, nếu có tiến hành chạy tool để nó tự động Patch AppleHDA cho bạn. Sau khi tool chạy xong bạn cài tất cả các kext mà nó đã dump ra bằng Kext Ultility.






Bước 3: Copy config.plist vào phân vùng EFI trên ổ cứng

Sau khi cài xong Clover Configuator trong HVT bạn tiến hành Mount phân vùng EFI (trên ổ cứng), copy Config.plist đã tạo trên USB rồi paste sang phân vùng EFI của máy theo đường dẫn EFI\CLOVER





Bước 4: Khởi động lại máy, cấu hình đường dẫn cho Clover

Sau khi cài xong Clover và Kext ở các bước trên, khi khởi động lại máy vẫn chưa thể tự động boot được vào Clover, thông thường khi chọn cài đặt Clover tích vào dòng Install RC Scripts On Target Volume trong menu boot từ Boot Manager sẽ xuất hiện tùy chọn cho Clover, nhưng nếu một lý do nào đó Clover không xuất hiện bạn cần cấu hình đường dẫn bằng tay





Về lý thuyết xem như đến đây đã cài thành công sơ bộ Mac OS X lên Laptop của bạn. Nhưng những gì bạn làm từ lever 1 đến giờ vẫn chưa phải là phần khó nhất. Cơ bản thì Mac OS X đã có thể chạy được và boot ổn thỏa như khi khởi động Windows nhưng để nó hoàn chỉnh hơn bạn cần học cách Patch DSDT.

To be Continued...!

Friday, February 6, 2015

[Guide] Cài Mac OS trên UEFI (Phần 3)


Lever 3: Chuẩn bị phân vùng, cài Mac, xử lý lỗi trong quá trình boot 





Bất cứ hệ điều hành (OS) nào trước khi cài ta đều phải phân vùng cho nó, Mac OS cũng không ngoại lệ

Hình ảnh trước khi phân vùng (xem bằng Minitool Partition Wizard)


Xóa phân vùng chứa Yosemite thành Unallocated



Tạo mới phân vùng này định dạng NTFS và đặt tên cho nó. Mục đích là để khi boot vào bộ cài Mac OS ta thấy được chính xác phân vùng mình đã chuẩn bị, tránh nhầm lẫn, vô tình làm mất dữ liệu - Thao tác này mình thực hiện ngay trên Windows thông qua Minitool Partition Wizard Portable


Kết quả sẽ như này



Bạn để ý hình phía trên có 1 phân vùng định dạng FAT32 nằm đầu ổ cứng, đây chính là phân vùng EFI chứa bootloader của tất cả các OS được cài trong máy mình. Ban đầu khi cài, mình để Windows tự tạo các phân vùng phụ (dung lượng vài trăm MB) theo dung lượng mặc định. Nhưng sau này phát hiện ra chính vì vậy mà khi cài Mac OS mình không thể tạo mới phân vùng được do dung lượng phân vùng EFI quá nhỏ so với yêu cầu của Mac (nhỏ hơn 200MB). Vì vậy mình xóa 2 phân vùng phụ liền kề nó và kéo phân vùng EFI rộng ra

>>> Ổn rồi, vậy trước khi cài Mac OS X bạn cần có 2 phân vùng:
  • Phân vùng để cài Mac
  • Phân vùng EFI. Phân vùng EFI này mình thừa kế sau khi cài Windows nên không cần tạo lại. Và mình nghĩ Windows vẫn là hệ điều hành chính để làm việc và học tập nên tốt nhất bạn hãy cài Windows trước khi cài Mac OS X

Vậy làm sao để cài Windows trên UEFI cho việc chạy Multil boot sau này được thuận lợi thì vui lòng đọc bài viết Cài Windows trên UEFI


Thiết lập BIOS:

"VT-d" (virtualization for directed i/o) nên được disabled trong BIOS, hoặc bạn có thể tắt nó thông qua config.plist bằng cách thêm lệnh dart=0

"DEP" (data execution prevention) nên được enabled cho OS X

"secure boot " bắt buộc disabled

"legacy boot" đây là tuỳ chọn thêm, thường thì khi cài Windows 8.1 trước đó trên UEFI thì tuỳ chọn này tắt.

"CSM" (compatibility support module) cũng giống như thiết lập "Load Legacy Option Rom" bên Dell nếu cài Windows 8.1 trở lên trên UEFI thì nên tắt tuỳ chọn này, còn với Windows 7 thì bắt buộc phải bật tuỳ chọn này mới cài được trên UEFI

"boot from USB" or "boot from external" enabled: thường mặc định các dòng máy bàn hay laptop đều mở sẵn tuỳ chọn này, trừ một số dòng máy như Lenovo/Vaio nó mặc định có thể bị tắt. Nên muốn boot được vào USB đương nhiên phải bật tùy chọn này


Cài Mac OS X và xử lý lỗi:

Cắm USB đã tạo vào máy, khởi động máy tính và làm theo hướng dẫn:


Bước 1: Khởi động vào USB
Dù laptop hay máy bàn thì khi khởi động ban đầu nó sẽ có 2 chức năng là vào Setup BIOS và Load Options. Mình dùng Dell nên mặc định vào BIOS là F2 và vào Options là F12, mỗi dòng máy quy định những phím riêng. (nếu bạn đã bước chân vào hackintosh thì chắc thừa biết mấy cái này nên không cần giới thiệu nữa nhé)


Chọn đúng vào USB của bạn >>> Enter sẽ boot được vào Clover như này, để ý biểu tượng Icon đầu tiên chính là bộ cài Yosemite đã tạo cho USB


Bước 2: Boot vào bộ cài Mac OS X
Sau khi di chuyển phím mũi tên đến icon của bộ cài Mac OS, bạn nhấn space >>> chọn dòng Boot Mac OS X in verbose mode >>> Enter. Nếu trong config.plist của bạn đã có lệnh -v (boot vào Mac OS với chế độ dòng lệnh) thì có thể enter luôn vào icon cũng được. Nhưng theo kinh nghiệm thì chọn từ menu của Clover sẽ ít gặp lỗi hơn



Cách khắc phục một số lỗi:
  1. Việc đầu tiên nếu không thể boot vào bộ cài hãy nghĩ đến: "liệu bạn đã tạo config.plist đúng chưa?" Bạn vào máy ảo và tạo lại config.plist một cách cận thận và đúng với cấu hình máy của bạn. Hãy nhớ rằng: config.plist tạo đúng sẽ boot được vào bộ cài
  2. Thử tất cả các cổng USB còn lại trên máy của bạn, thường thì trên laptop sẽ có 1 cổng dùng để boot vào Mac nhanh chóng và ít lỗi nhất.
  3. Đôi lúc việc boot vào chế độ Boot Mac OS X in verbose mode vẫn xảy ra lỗi khó hiểu. Bạn khởi động lại máy tính và thử boot vào chế độ Boot Mac OS X in Safe Mode. Lưu ý khi boot vào chế độ này, một số máy sẽ không nhìn thấy các phân vùng của Windows
  4. Nếu vẫn không thể boot được, các dòng lệnh cứ dừng lại ở các dòng có Bluetooth hoặc Network thì bạn tạm thời tiến hành di chuyển các kext đồ họa (nhưng nên hạn chế việc này, chỉ trường hợp bất đắc dĩ mới dùng đến). Sau này cài thành công, di chuyển các kext này vào lại S/L/E trên phân vùng cài Mac mà máy vẫn chạy tốt là ổn

    Cách làm:
    Cắm USB vào máy ảo, tìm đến đường dẫn /System/Library/Extensions/ và di chuyển các file sau ra thư mục khác:
    Driver AMD (cho máy có card AMD hoặc Intel HD + AMD): AMD*.kext
    Driver nVidia (cho máy có card nVidia hoặc Intel HD + nVidia): NVDA*.kext, GeForce*.kext
    Driver Intel (chỉ dùng nếu như làm 2 cách trên đều không được): AppleIntelHD*.kext & AppleIntelF*.kext


Hình ảnh boot thành công vào bộ cài Mac OS X

Bước 3: Cài Mac OS X
Khởi chạy trình quản lý ổ đĩa Disk Ultility bằng cách click đúp trên menu. Chọn vào phân vùng Mac OS X đã chuẩn bị từ trước, chuyển sang thẻ Erase , tại tùy chọn Format ta chọn định dạng phân vùng là Mac OS Extended (journaled). Sau đó Click vào Erase để format phân vùng, một hộp thoại bật ra bạn chọn Erase để hoàn tất quá trình

Lưu ý rằng: Bộ cài Mac OS có thể không hiện phân vùng định dạng HFS+ của MacOS nhưng nó có hiện phân vùng định dạng NTFS, chính vì nguyên nhân đó ở phía trên mình có hướng dẫn các bạn dùng tool phân vùng chuẩn bị một phân vùng cài MacOS sẵn định dạng NTFS là vậy ^^


Thoát trình quản lý ổ đĩa Disk Ultility, Khởi chạy trình cài đặt Install OS X và làm theo hình, quá trình thứ 7 hơi lâu (hãy kiên nhẫn)


Sau khi chạy xong máy sẽ tự động khởi động lại. Lặp lại thao tác của bước 1 và bước 2 (tức là boot vào USB và khởi động lại vào bộ cài với chế độ Boot Mac OS X in verbose mode). Máy sẽ tiếp tục tiến hành cài đặt Mac OS X



Và đây là bức hình lấy đi nước mắt của bao nhiêu người ^^


May mắn con Dell Vostro 3560 này đã nhận full phân giải và nhận đủ Ram của Card đồ họa, vậy là thành công bước đầu.



Bước 4: Backup phân vùng đã cài đặt Mac OS X

Với những người mới làm quen việc cài đặt Mac OS X không ai là không thể tránh khỏi sai xót cả, ít nhất phải cài hỏng một vài lần cho đến khi có kinh nghiệm. Cách dự phòng tốt nhất là tạo backup để quay về tình trạng máy hoạt động tốt một cách nhanh chóng mà không mất thời gian ngồi cài lại.

Có 2 cách tạo backup cho Mac OS X thường dùng là:
  • Dùng Time Machine: Cách này thường được sử dụng để backup Application, User Data trong phân vùng cài Mac
  • Dùng Disk Ultility: Cách này thường dùng để tạo một bản backup hoàn chỉnh ( file *.dmg) để sau này nếu có hư HDD hay mất máy thì ta restore lại cho nhanh. 
Dù cách 1 hay cách 2 thì trước tiên ta đều phải chuẩn bị phân vùng riêng cho nó dung lượng khoảng trên 15GB tùy thuộc vào lúc bạn chọn backup là mới cài xong chưa cài soft gì nhiều, bạn ước lượng dung lượng cho phù hợp. Bạn thích phân vùng bằng tool gì hay cách nào cũng được miễn phân vùng chứa file backup của Mac OS X phải ở định dạng Mac OS Extended (journaled)

Quy trình: (Mình sử dụng cách 2)



Boot vào bộ cài Mac OS X trên USB sẽ gặp giao diện này


Trên thanh công cụ chọn Disk Ultility



Tạo file backup theo hình minh họa dưới đây



Đây là thông tin file backup thành công



Bước 5: Kiểm tra phần cứng đã nhận diện thế nào

Đừng nhầm lẫn việc vào được Desktop của Mac OS là đã cài thành công đâu nhé, bạn chỉ mới đi được khoảng 1/3 chặng đường thôi. Bây giờ ta tiến hành kiểm tra khả năng nhận diện phần cứng của Mac OS X với máy tính của bạn thế nào, ở đây mình lấy con Dell Vostro 3560 làm ví dụ

Từ Desktop của Mac click lên hình trái táo trên cùng phía tay trái chọn About this Mac

Bạn sẽ xem được thông tin phần cứng cơ bản thế này, ở đây do config.plist chuẩn nên con Dell Vostro 3560 này nhận đủ dung lượng Ram của Card màn hình (onboard). Một số máy do cấu hình sai thông tin ram ở đây chỉ nhận được dung lượng tính bằng MB và màn hình rất giật và lag


Để xem thông tin chi tiết về phần cứng hơn bạn click vào mục System report... sẽ gặp giao diện như bên dưới. Bạn click vào từng mục xem thông tin xem máy đã nhận được những gì, chưa nhận được gì



Được rồi, cơ bản về việc cài Mac OS đã xong, nhiệm vụ kế tiếp của chúng ta là cài kext để giúp máy nhận phần cứng đầy đủ hơn; cài clover để có thể boot trực tiếp vào Mac OS mà không phải thông qua USB.

To be Continued ...

Sunday, January 11, 2015

[Guide] Tạo USB để cài Mac OS (Phần 2)


Lever 2: Tạo USB cài Mac OS:

Để tạo được USB cài Mac OS X ngoài máy ảo ta cần những thứ sau:
  • Install OS X Mavericks 10.9.5 (download)
  • Install OS X Yosemite 10.10.2 (download)
  • Install OS X El Capitan 10.11.5 (download)
  • Install MacOS Sierra 10.12 (download)
  • Install MacOS Sierra 10.12.5 (download) - new
  • Clover bản mới nhất (download)
  • HFSPlus.efi (download)
  • FakeSMC.kext (download) - Kext giả lập máy Mac quan trọng nhất trong Hackintosh
  • VoodooPS2Controller.kext (download) - điều khiển bàn phím chuột khi boot vào bộ cài
  • NullCPUPowerManagement.kext (download)
  • Hackintosh Vietnam - Ultimate AIO Tool  (download) để tạo config.plist nhanh cho máy.
    Tuy nhiên hiện nay tool đã ngừng cập nhật, bạn có thể lấy config.plist từ nguồn của Rehabman phù hợp với máy bạn https://github.com/RehabMan/OS-X-Clover-Laptop-Config
  • Cloud Clover Editor (chỉnh sửa config.plist trên nền web)
  • Một chiếc USB thật tốt - Một số máy sẽ gặp lỗi boot nếu sử dụng USB 3.0

Bộ cài OS X được download từ Appstore và chỉ có thể download trực tiếp trên máy chạy Mac OS, vì vậy mình cũng khuyên các bạn nên tạo trước một tài khoản Apple ID, đăng nhập và download thông qua máy ảo. Bộ cài phía trên được mình download trên Mac OS và upload lên Fshare




Chuẩn bị bộ cài

Giải nén và copy Install OS X ***.app vào thư mục Applications thông qua ổ share đã cấu hình




Kết nối USB vào máy ảo

Cắm USB vào máy tính - nếu USB không tự nhận chọn như hình để kết nối USB vào máy ảo

Hình dung quy trình
  • Mục đích của bài viết trước và những gì vừa làm phía trên là làm sao để USB kết nối được với máy tính đang chạy Mac OS X, và ta đã làm xong, việc bây giờ là làm sao tích hợp bộ cài lên USB và làm cho USB này có thể cài Mac được
  • Có hai công cụ bạn cần sử dụng có sẵn ngay trong Mac OS là Terminal và Disk Ultility. Bạn có thể gõ tên trên thanh tìm kiếm của Mac OS có biểu tượng là cái kính lúp gần đồng hồ để lôi đầu hai em này ra

Cấu trúc phân vùng của một chiếc USB cài Mac OS
  • Phân vùng chứa bộ cài (install_osx): Để thuận tiện và nhanh chóng chỉ cần Erase USB thành một phân vùng duy nhất. 
  • Phân vùng EFI: Chứa Clover, có vai trò như một hệ điều hành nhỏ nhằm máy tính nhận được phân vùng chứa bộ cài Mac OS là giúp khởi động bộ cài từ phân vùng này.



Erase và đặt tên cho USB

Để đơn giản bạn chỉ cần chọn vào tên thiết bị USB của bạn sau đó chọn Erase để Disk Utility tự động gom USB về một phân vùng duy nhất. Sau khi tích hợp bộ cài xong tiến hành cài Clover, lúc này Clover sẽ tự động tách một phân vùng riêng cho nó





Tích hợp bộ cài vào USB

Có 2 cách được khuyên nên dùng để tạo bộ cài là:
  • Phương pháp Createinstallmedia hỗ trợ từ 10.9+ trở lên
  • Phương pháp BaseBinaries clone là phương pháp cổ điển để tạo USB cài hackintosh từ những thời kỳ đầu, với phương pháp này ta dễ xóa bỏ hay thêm kext trong bộ cài gốc của Mac OS vì vậy thích hợp hơn cho newbie.
Lưu ý: thời gian tích hợp bộ cài vào USB khá lâu, có thể mất cả tiếng đồng hồ tùy vào tốc độ đọc ghi của USB và cách thiết đặt chuẩn kết nối của máy ảo



Phương pháp Createinstallmedia


Trước khi chạy lệnh ở terminal bạn cần phải có bộ cài trong thư mục Applications và tên của phân vùng bạn muốn ghi bộ cài lên cần đổi tên là install_osx
  • Đối với OS X Mavericks
    sudo /Applications/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia --volume /Volumes/install_osx --applicationpath /Applications/Install\ OS\ X\ Mavericks.app --nointeraction 

  • Đối với Yosemite
    sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/install_osx --applicationpath /Applications/Install\ OS\ X\ Yosemite.app --nointeraction

  • Đối với EL Capitan
    sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/install_osx --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app --nointeraction

  • Đối với Sierra
    sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/install_osx --applicationpath /Applications/Install\ macOS\ Sierra.app --nointeraction

Phương pháp BaseBinaries clone
    Lưu ý: phương pháp này bạn có thể làm thông qua giao diện bằng cách dùng Disk Utility và Finder nhưng để thuận tiện thì ta có thể dùng lệnh cho nhanh. Bạn copy từng lệnh và dán vào Terminal
    Trước khi chạy lệnh ở terminal bạn cần phải có bộ cài trong thư mục Applications và tên của phân vùng bạn muốn ghi bộ cài lên cần đổi tên là install_osx
  • Đối với OS X Mavericks
    # temporary directory
    mkdir /tmp/install_esd

    # mount InstallESD.dmg in installer package
    hdiutil attach "/Applications/Install OS X Mavericks.app/Contents/SharedSupport/InstallESD.dmg" -readonly -mountpoint /tmp/install_esd -nobrowse

    # restore it to target
    sudo asr restore -source /tmp/install_esd/BaseSystem.dmg -target /Volumes/install_osx -erase -format HFS+ -noprompt

    # rename the target to be less unwieldy
    diskutil rename "OS X Base System" install_osx

    # remove Packages symlink
    rm /Volumes/install_osx/System/Installation/Packages

    # copy Packages as folder
    cp -a /tmp/install_esd/Packages /Volumes/install_osx/System/Installation

    # copy BaseSystem.dmg
    cp -a /tmp/install_esd/BaseSystem.dmg /tmp/install_esd/BaseSystem.chunklist /Volumes/install_osx

    # unmount InstallESD.dmg
    hdiutil detach /tmp/install_esd

    # remove temporary directory
    rmdir /tmp/install_esd

  • Đối với Yosemite
    # temporary directory
    mkdir /tmp/install_esd

    # mount InstallESD.dmg in installer package
    hdiutil attach "/Applications/Install OS X Yosemite.app/Contents/SharedSupport/InstallESD.dmg" -readonly -mountpoint /tmp/install_esd -nobrowse

    # restore it to target
    sudo asr restore -source /tmp/install_esd/BaseSystem.dmg -target /Volumes/install_osx -erase -format HFS+ -noprompt

    # rename the target to be less unwieldy
    diskutil rename "OS X Base System" install_osx

    # remove Packages symlink
    rm /Volumes/install_osx/System/Installation/Packages

    # copy Packages as folder
    cp -a /tmp/install_esd/Packages /Volumes/install_osx/System/Installation

    # copy BaseSystem.dmg
    cp -a /tmp/install_esd/BaseSystem.dmg /tmp/install_esd/BaseSystem.chunklist /Volumes/install_osx

    # unmount InstallESD.dmg
    hdiutil detach /tmp/install_esd

    # remove temporary directory
    rmdir /tmp/install_esd

  • Đối với EL Capitan
    # temporary directory
    mkdir /tmp/install_esd

    # mount InstallESD.dmg in installer package
    hdiutil attach "/Applications/Install OS X El Capitan.app/Contents/SharedSupport/InstallESD.dmg" -readonly -mountpoint /tmp/install_esd -nobrowse

    # restore it to target
    sudo asr restore -source /tmp/install_esd/BaseSystem.dmg -target /Volumes/install_osx -erase -format HFS+ -noprompt

    # rename the target to be less unwieldy
    diskutil rename "OS X Base System" install_osx

    # remove Packages symlink
    rm /Volumes/install_osx/System/Installation/Packages

    # copy Packages as folder
    cp -a /tmp/install_esd/Packages /Volumes/install_osx/System/Installation

    # copy BaseSystem.dmg & AppleDiagnostics.dmg
    cp -a /tmp/install_esd/BaseSystem.dmg /tmp/install_esd/BaseSystem.chunklist /tmp/install_esd/AppleDiagnostics.dmg /tmp/install_esd/AppleDiagnostics.chunklist /Volumes/install_osx

    # unmount InstallESD.dmg
    hdiutil detach /tmp/install_esd

    # remove temporary directory
    rmdir /tmp/install_esd
  • Đối với Sierra
    # temporary directory
    mkdir /tmp/install_esd

    # mount InstallESD.dmg in installer package
    hdiutil attach "/Applications/Install macOS Sierra.app/Contents/SharedSupport/InstallESD.dmg" -readonly -mountpoint /tmp/install_esd -nobrowse

    # restore it to target
    sudo asr restore -source /tmp/install_esd/BaseSystem.dmg -target /Volumes/install_osx -erase -format HFS+ -noprompt

    # rename the target to be less unwieldy
    diskutil rename "OS X Base System" install_osx

    # remove Packages symlink
    rm /Volumes/install_osx/System/Installation/Packages

    # copy Packages as folder
    cp -a /tmp/install_esd/Packages /Volumes/install_osx/System/Installation

    # copy BaseSystem.dmg & AppleDiagnostics.dmg
    cp -a /tmp/install_esd/BaseSystem.dmg /tmp/install_esd/BaseSystem.chunklist /tmp/install_esd/AppleDiagnostics.dmg /tmp/install_esd/AppleDiagnostics.chunklist /Volumes/install_osx

    # unmount InstallESD.dmg
    hdiutil detach /tmp/install_esd

    # remove temporary directory
    rmdir /tmp/install_esd



Cài đặt Clover lên USB vừa tạo


Chú ý: tại hình thứ 4 là cài đặt driver cho Clover Bootloader. Thông thường chỉ cần chọn 3 tùy chọn như trên là được. Các driver còn lại tùy vào từng máy mà chọn thêm (nếu cần). Lưu ý thêm có vài driver trong Clover sẽ giải quyết một số lỗi ở một vài máy nhưng nó cũng có thể gây lỗi cho máy khác, tùy vào khi bạn boot thử có gặp lỗi như phần miêu tả của driver khi cài đặt không mà thêm bớt cho phù hợp. Riêng driver OsxLowMemFix... không được đi kèm với driver OsxAptionFixDrv... vì sẽ xảy ra xung đột




Chỉnh sửa Config.list phù hợp với máy của bạn

Mỗi máy có một cấu hình khác nhau, để Clover nhận diện máy bạn và có thể boot được vào bộ cài bạn cần cấu hình cho Config.plist

Config.plist dành cho USB cài Hackintosh không nhất thiết phải quá nhiều thiết lập. Bạn nên tải config.plist của Rehabman và dùng trình Clover Configurator để edit thêm (nhớ chọn config.plist đúng với dòng máy của bạn, đổi tên nó thành config.plist trước khi ném vào phân vùng EFI trên Clover)
https://github.com/RehabMan/OS-X-Clover-Laptop-Config

Note: Để chỉnh sửa nhanh config.plist nhanh bạn có thể sử dụng Cloud Clover Editor để chỉnh sửa ngay trên nền Web cho thuận tiện
http://cloud-clover-editor.sourceforge.net/cce/index.php


Hầu hết các thiết lập Rehabman đã cấu hình cho bạn, nhưng bạn cần chỉnh sửa nó một chút cho phù hợp với máy bạn, chú ý các thiết lập sau:


ig-platform-ids phổ biến thường gặp (nguồn Rehabman)
      • 0x01660003: dành cho HD4000 phân giải 1366x768
      • 0x01660004: dành cho HD4000 phân giải1600x900, 1920x1080
      • 0x01660008, 0x01660009: dành cho HD4000 phân giải 1600x900, 1920x1080
      • 0xa260006: dành cho HD4400/HD4600/HD5000
      • Đối với Haswell ig-platform-id thử các giá trị này: 0xa260005, 0xa260000, 0xa160000, 0xa2e0008, 0xa2e000a
Bạn cũng nên tiến hành giả lập SMSBIOS luôn để sau khi cài đặt thông tin ở info của máy Mac cho đúng. Nhớ chọn cấu hình Macintosh tương ứng với chip mà bạn đang dùng, để ý luôn năm sản xuất nhá.




Di chuyển những file đã chuẩn bị vào đúng vị trí

      • Copy Config.plist vào USB vào đường dẫn EFI\CLOVER\
      • Copy DSDT.aml và các SSDT*.aml vào đường dẫn EFI\CLOVER\ACPI\Patched
      • Copy HFSPlus.efi vào đường dẫn EFI\CLOVER\driver64UEFIxóa VboxHfs-64.efi đi
      • Copy FakeSMC.kextVoodooPS2Controller.kext vào đường dẫn
        EFI\CLOVER\kexts\otherxóa các folder còn lại đi




Đối với những bạn chưa có DSDT và SSDT

DSDT là linh hồn của cỗ máy hackintosh, kết hợp với Clover bootloader nó giúp Mac OS X nhận diện được phần cứng một cách đầy đủ, từ đó giảm thiểu tối đa lỗi trong quá trình cài. Hầu hết các lỗi xảy ra khi cài Mac OS là do khi load kext không nhận diện được phần cứng sinh ra lỗi. Lỗi này thường gặp ở các kext đồ họa, kext điều khiển CPU...

Thường thì lấy DSDT là công đoạn gần cuối khi cài Mac OS X, nhưng để dễ dàng hơn trong quá trình cài, giúp quá trình cài nhanh gọn và ít lỗi thì ta có thể lên Google tìm thử dòng máy mình (hay laptop của mình) đã có DSDT người ta patch sẵn chưa?! Thường thì các máy cùng chung mainboard có thể dùng được DSDT của nhau. Riêng mình thì khuyên các bạn tập Patch DSDT trước thông qua máy ảo đã cài sẵn bằng cách áp dụng các gói patch của Rehabman

Hướng dẫn Patch DSDT cho máy Hackintosh (Phần 5)

Lưu ý rằng: khi chưa có DSDT/SSDT thì Mac OS chưa quản lý được năng lượng phần cứng. Để tránh cho hệ thống bị panic bạn copy thêm NullCPUPowerManagement.kext vào đường dẫn EFI\CLOVER\kexts\other




Làm gì khi không thể boot được vào bộ cài Mac OS (hackintosh)

Không riêng gì các bạn newbie, đây là chuyện gặp như cơm bữa của người cài hackintosh. Cách tạo USB cài Mac OS phía trên là chung nhất cho nhiều máy, nhưng tùy vào những trường hợp cụ thể mà ta linh hoạt để cấu hình cho phù hợp. Đôi lúc cần phải boot thử xem thông báo lỗi thế nào sau đó tùy vào kinh nghiệm mà thêm thắt cho phù hợp.

Lỗi phổ biến nhất do thiếu DSDT/SSDT là Missing Bluetooth Controller Transport lỗi này liên quan đến card đồ họa rời,  bạn có thể khắc phục tạm bằng cách truy cập vào bộ cài trên USB theo đường dẫn /System/Library/Extensions tìm và xóa các kext có tên AppleIntelHD*.kext và AppleIntelF*.kext




Vậy là cuối cùng cũng xong cái USB để cài Mac OS X (phù mệt......! ) Nếu sau này muốn dùng USB này cài cho máy khác bạn lưu ý tạo lại Config.plist cho phù hợp. Nhiệm vụ tiếp theo là làm sao cài được Mac OS X từ chiếc USB này

To be continue ...

Sunday, December 28, 2014

[Guide] Tạo máy ảo Mac OS trên VMware (Phần 1)



Người ta thường nói: "cài thành công Mac OS X trên máy là con đường để chạy đa hệ điều hành". Việc cài Mac lên máy tính thông thường không phải của Apple (gọi là hackintosh) là một công việc gian nan vì trong quá trình cài bạn sẽ găp rất nhiều lỗi, bạn phải vượt qua từng cửa ải cho đến khi thành công. Khi vào được desktop của Mac tin rằng bạn sẽ vô cùng hạnh phúc vì tôi và rất nhiều người cũng từng trải qua cảm giác thú vị này ^^


Quy trình cài mac trên máy tính thông thường:

  • Lever 1: Tạo máy ảo để tích hợp bộ cài vào USB 
  • Lever 2: Tạo USB cài Mac 
  • Lever 3: Chuẩn bị phân vùng, cài Mac, xử lý lỗi trong quá trình boot 
  • Lever 4: Cài clover, cài kext (driver) 
  • Lever 5: Patch DSDT/SSDT 
  • Lever 6: Tinh chỉnh và hoàn thiện máy hackintosh
Blog được tạo ra chỉ với mục đích chia sẻ kinh nghiệm. Không thu phí bạn đọc dưới bất kỳ hình thức nào. Chúc các bạn thành công!
Join Our Newsletter