Tình trạng
Không mở trả lời sau này.

vusun123

Super Moderator
Staff member
12/5/15
626
255
63
Hà Nội
Các GPU AMD chạy Hackintosh khó hơn GPU Nvidia ở chỗ chúng có hệ thống Framebuffer quản lý việc load các port nào của card, gây ra tình trạng 80% boot vào chạy không hoàn chỉnh. Cụ thể hơn:
  • GPU AMD trên desktop phần lớn hoạt động với GraphicsEnabler=No ( không inject ATI trong config.plist ), full QE/CI nhưng 1 số phần mềm lại không ưa nó, đích danh là DVD Player. Nhưng nếu dùng GraphicsEnabler=Yes ( Inject ATI trong config.plist ) kèm chỉ định framebuffer cần dùng thì 1 số bị đen màn, 1 số vào được và full QE/CI nhưng không dùng được nhiều màn hình ( multiple display ), 1 số thì vào được nhưng không full QE/CI
  • GPU AMD trên laptop thì phần lớn chạy với GraphicsEnabler=No nhưng không full QE/CI

Để giải quyết các vấn đề trên, chúng ta cần patch các framebuffer có trong các kext AMD hiện có trên OS hiện tại. Có các vấn đề sau cần lưu ý trước khi bắt đầu:

  • Bootloader cần dùng ? Clover hay Chameleon tốt hơn ? Câu trả lời là Clover, vì tính năng inject ATI của Clover tốt hơn hẳn so với GraphicsEnabler của Chameleon ( vốn dành cho nhiều loại GPU ). Tiếp đến là có tính năng Fake ID ATI dành cho những GPU có Device ID không nằm trong list support của kext nhưng có thể fake sang 1 GPU gần nó nhất để kext AMD có thể load, thay vì việc phải lôi từng kext ra để sửa tay. Cuối cùng là khả năng patch kext on-the-fly của Clover, rất hữu hiệu khi update OS, không cần phải lôi kext ra sửa binary bằng tay nữa ( tuy nhiên Apple rất hay chơi xỏ khi thỉnh thoảng lại sửa đổi binary gốc chứa framebuffer cần patch, vấn đề này được nêu trong quá trình patch)
  • Với các GPU AMD trên laptop, khi đã patch thành công sẽ có thanh chỉnh độ sáng và full QE/CI, không bị tình trạng sọc màn hay không QE/CI. Tuy nhiên 1 số hiếm GPU dù patch full nhưng sẽ bị loang lổ màu gradient, vấn đề này sẽ được bàn sau

Trước khi bắt đầu, các bạn download bộ tool cần dùng cho việc patch tại đây. Các yêu cầu trước khi patch:

  • Có thể boot được vào Mac OS X, không cần thiết phải full QE/CI ( đơn giản nhất là kiếm 1 máy khác chạy OS X cùng phiên bản với máy cần patch VGA của các bạn ). Cài Command Line Tool tại đây ( hoặc đơn giản hơn là cài luôn XCode )
  • Sử dụng 1 USB Clover để dump vbios hiện tại của GPU đang sử dụng. USB Clover này bắt buộc phải là định dạng FAT32 để các bạn có thể dump được vbios, chi tiết bên dưới
  • Đối với laptop, chỉ những máy sử dụng 1 GPU AMD Radeon mới có thể patch được. Những máy 2 GPU combo Intel + AMD đừng cố thử
  • Đối với desktop, tránh việc sử dụng nhiều GPU AMD Radeon trong cùng 1 máy khi đang dùng Hackintosh ( ngoại trừ trường hợp đó là 1 GPU giống nhau ). Nếu trong trường hợp nhiều card đó là 1 GPU giống nhau thì sẽ cần patch thêm DSDT để OS X nhận diện đủ số card. Combo GPU Nvidia + AMD Radeon vẫn có thể chấp nhận được
Bài viết đúng như title, nâng cao, vì vậy ai không làm được thì nên nhờ người khác làm
Nguồn: Rampage Dev wordpress + kinh nghiệm cá nhân
 
Bước 5: Phân tích cấu trúc framebuffer
Ví dụ với Elodea, xóa hết các chuỗi 7 số đầu tiên ở mỗi dòng đi, chúng ta được
Mã:
02  00  00  00  00  01  00  00  09  01  00  00  12  04  03  03
00  04  00  00  04  03  00  00  00  01  00  00  10  00  05  05
00  04  00  00  04  03  00  00  00  01  00  00  11  02  01  01
00  04  00  00  00  01  00  00  00  09  10  00  21  03  02  02
00  04  00  00  00  01  00  00  00  09  10  00  22  05  04  04
Phân tích cấu trúc 1 dòng như sau: chia dòng đó thành 4 phần bằng nhau
Mã:
02  00  00  00
00  01  00  00
09  01  00  00
12  04  03  03
Chia tiếp 2 dòng cuối thành từng chuỗi 2 cặp bằng nhau như sau
Mã:
02  00  00  00
00  01  00  00
09  01
00  00
12  04
03  03
Chia tiếp 2 dòng cuối thành từng chuỗi 1 cặp bằng nhau như sau
Mã:
02  00  00  00
00  01  00  00
09  01
00  00
12
04
03
03
Tới đây ta có các thông tin sau:
Mã:
02  00  00  00 : Connector type**
00  01  00  00 : ATY, ControlFlags**
09  01 : Features **
00  00 : Unknown*
12 : Transmitter*
04 : Encoder*
03 : Hotplug ID*
03 : Sense ID**
*: Thông số càng chính xác càng tốt
**: Thông số sai sẽ dẫn tới patch sai


Bước 6: Phân tích Connector type của VGA
Mã:
Connector Type LVDS          0x00000002  = 02  00  00  00 > màn hình laptop
Connector Type DVIDL        0x00000004 = 04  00  00  00 > Dual Link DVI
Connector Type VGA            0x00000010 = 10  00  00  00
Connector Type S-V              0x00000080 = 08  00  00  00
Connector Type DP                0x00000400 = 00  04  00  00
Connector Type HDMI          0x00000800 =  00  08  00  00
Connector Type DVISL          0×00000200 = 00  02  00  00 > Single Link DVI
Chú ý: đối với desktop, các bạn phân biệt Single Link DVI và Dual Link DVI theo hình dưới:

SbmNDFx.gif

Thông số từ vbios của AMD 6470M được sửa lại như sau:
Mã:
Connector Type LVDS:  02000000
Connector Type DP:  00040000
Connector Type DP:  00040000
Connector Type DP:  00040000
Connector Type VGA :  10000000


Bước 7: Phân tích ATY,ControlFlags
Mã:
LVDS                      ControlFlag : 0x0040 và 0x0100
DVI                          ControlFlag : 0x0016, 0x0014 và 0x214
VGA                        ControlFlag : 0x0010
S-Video                  ControlFlag : 0x0002
DVI                          ControlFlag : 0x0014, 0x0214 và 0x0204
DisplayPort          ControlFlag : 0x0100, 0x0104, 0x0304, 0x0604 và 0x0400
HDMI                    ControlFlag : 0x0204
DVI                        ControlFlag : 0x0016

Lưu ý là các bạn phải tìm ra được thông số phù hợp với card của mình, cái này đôi khi phải thử nhiều lần
Thông số từ vbios của AMD 6470M được sửa lại như sau:
Mã:
Connector Type LVDS:  40000000
Connector Type DP:  04030000
Connector Type DP:  04030000
Connector Type DP:  04030000
Connector Type VGA :  10000000


Bước 8: Phân tích Features
Mã:
Giá trị đầu tiên:
Use Internal                    0x01 = 01
Use RGB On YUV            0x04 = 04
Use Backlight                0x08 = 08
Backlight Inverted          0x10 = 10
Use Clamshell                0x20 = 20

Giá trị thứ hai:
LVDS            0x09 = 09
DVI                0x00 = 00
VGA                0x00 = 00
S-Video        0x04 = 04
DVI                0x00 = 00
DisplayPort  0x00 = 00
HDMI            0x00 = 00
DVI                0x00 = 00
Thông số từ vbios của AMD 6470M được sửa lại như sau:
Mã:
Connector Type LVDS:  0901 ( laptop luôn dùng 0901 để có thể chỉnh được độ sáng )
Connector Type DP:  0001
Connector Type DP:  0001
Connector Type DP:  0001
Connector Type VGA :  0001


Bước 9: Phân tích Unknown
Phần này không có gì phải sửa, các bạn để yên 00 00 đó
Mã:
Connector Type LVDS:  0000
Connector Type DP:  0000
Connector Type DP:  0000
Connector Type DP:  0000
Connector Type VGA :  0000


Bước 10: Phân tích Transmitter
Nhìn lên thông tin vbios, các bạn sẽ thấy chữ “osx txmit”. Đây chính là Transmitter mà chúng ta sẽ sử dụng. Thông số từ vbios của AMD 6470M được sửa lại như sau:
Mã:
Connector Type LVDS:  10
Connector Type DP:  11
Connector Type DP:  21
Connector Type DP:  12
Connector Type VGA :  00


Bước 11: Phân tích Encoder
Mã:
DIG1            0x00 = 00      = DIGA
DIG2            0x01 = 01        = DIGB
DIG3            0x02 = 02      = DIGC  Radeon HD 5XXX Series hoặc mới hơn
DIG4            0x03 = 03      = DIGD  Radeon HD 5XXX Series hoặc mới hơn
DIG5            0x04 = 04      = DIGE  Radeon HD 5XXX Series hoặc mới hơn
DIG6            0x05  = 05      = DIGF Radeon HD 5XXX Series hoặc mới hơn
DAC            0x10 = 10
Nhìn lên thông tin vbios, các bạn sẽ thấy chữ “enc” sau duallink. Đây chính là Encoder mà chúng ta sẽ sử dụng. Thông số từ vbios của AMD 6470M được sửa lại như sau:
Mã:
Connector Type LVDS:  00
Connector Type DP:  02
Connector Type DP:  03
Connector Type DP:  04
Connector Type VGA :  10


Bước 12: Phân tích Hotplug ID
Chỗ này đặt thứ tự từ trên xuống: 01, 02, 03, ...
Mã:
Connector Type LVDS:  01
Connector Type DP:  02
Connector Type DP:  03
Connector Type DP:  04
Connector Type VGA :  05


Bước 13: Phân tích Sense ID
Nhìn lên thông tin vbios, các bạn sẽ thấy chữ “senseid”. Đây chính là Sense ID mà chúng ta sẽ sử dụng. Thông số từ vbios của AMD 6470M được sửa lại như sau:
Mã:
Connector Type LVDS:  01
Connector Type DP:  04
Connector Type DP:  02
Connector Type DP:  03
Connector Type VGA :  08


Bước 15: Tập hợp thông tin
Tập hợp những dữ liệu đã sửa về GPU của bạn để ra kết quả connector của GPU:
Mã:
02000000 40000000 0901 0000 10 00 01 01
00040000 04030000 0001 0000 11 02 02 04
00040000 04030000 0001 0000 21 03 03 02
00040000 04030000 0001 0000 12 04 04 03
10000000 10000000 0001 0000 00 10 05 08
 
Bước 16: Xác định xem có cần Fake ID ATI hay không
Vào thư mục System/Library/Extensions. Chuột phải kext AMDxxxxController mà các bạn cần patch > Show Package Contents > Contents. Mở file Info.plist ra. Search cụm từ sau
Mã:
IOPCIMatch
WvcTmyq.png

Chúng ta có 1 loạt các Device ID GPU AMD được OS X hỗ trợ mặc định. Quay trở lại thông tin vbios, với AMD Radeon 6470M chúng ta có:
Mã:
PCI ID: 1002:6760
Đọc ngược lại chúng ta có 0x67601002, Device ID này có xuất hiện trong info.plist của kext AMD6000Controller nên chúng ta không cần fake ID
Nếu như Device ID của các bạn không có trong info.plist của kext cần patch, cần xác định xem Device ID nào gần của bạn nhất để fake sang. Ví dụ của bạn là 0x68421002, các bạn xác định được cần fake sang ID của 0x68411002


Bước 17: Thiết lập config.plist để test patch framebuffer
Sử dụng HVT, các bạn chọn các mục sau cho config:

  • CPU: tùy thuộc CPU các bạn sử dụng
  • SSDT: tùy thuộc CPU các bạn sử dụng
  • Graphics: AMD
  • InjectEDID: Nên chọn, 1 số desktop dùng sẽ bị nhận nhầm 1 màn hình thành 2 màn hình, khi đó bỏ chọn
  • Kernel, Bootflag và Kext Patches: Chọn những gì bạn cần
Sau đó ấn next để tạo config.plist trên desktop. Sử dụng Clover Configurator, import file config trên desktop đó, chuyển sang mục Graphics:
9tTOEyh.png

  • Dual Link: chỉ áp dụng cho Laptop, Desktop vô dụng. Chọn 0 nếu độ phân giải 1366x768; chọn 1 nếu độ phân giải 1600x900 trở lên
  • FB Name: điền tên framebuffer các bạn chọn
  • VRAM: điền số VRAM hiện ra trong thông tin bios dump
  • Video ports: khá lằng nhằng. Nên để trống để test trước tiên. Nếu thất bại thì sửa thành từ 1 đến số connector cao nhất của GPU
  • Inject EDID và Inject ATI: nếu chọn config như trên mặc định sẽ có
  • Load VBIOS: Bắt buộc với Laptop, có thể cần với Desktop. Rename file c0000.bin thành tên VenID_DevID.ROM theo GPU của các bạn với thông tin của bước 16. Ví dụ với AMD 6470M là 1002_6760.ROM. Copy vào EFI\Clover\ROM. Riêng Desktop có thể dùng GPU-Z bên Windows để dump ROM hiện tại
  • PatchVBios: nên chọn. Tuy nhiên 1 số card khi chọn bị đen màn, khi đó thì bỏ chọn
Chuyển tiếp sang mục Kernel and Kexts Patch:
vQ3yiXW.png

  • ATI Connectors Data: Lấy framebuffer các bạn chọn để patch ra, xóa hết các khoảng trống và gộp chúng thành 1 dòng. Ví dụ với Elodea:
Mã:
0200000000010000090100001204030300040000040300000001000010000505000400000403000000010000110201010004000000010000000910002103020200040000000100000009100022050404
  • ATI Connectors Patch: Tương tự như ATI Connectors Data, áp dụng với thông tin các bạn có được ở bước 15. Ví dụ với AMD 6470M
Mã:
0200000040000000090100001000010100040000040300000001000011020204000400000403000000010000210303020004000004030000000100001204040310000000100000000001000000100508
  • ATI Connectors Controller: điền mã kext các bạn cần patch, ví dụ với AMD 6470M là 6000
  • Kexts to Patch: ấn dấu + ở dưới khung, nó sẽ tạo thêm 1 dòng blank. Điền các thông tin như trong ảnh. Chú ý phần Replace sửa thành Device ID của các bạn giống bước 16, phải tích vào InfoPlistPatch để nó patch info.plist của kext
Chú ý: những ai cần fake id như theo bước 16 thì đọc tiếp. Ai không cần thì skip xuống phía dưới
Chuyển tiếp qua mục Devices:
SH1RioL.png

Mục Fake ID, ở khung ATI đang được highlight, điền Device ID các bạn cần fake sang. Trong ví dụ đang là 0x68411002

Sau khi xong mọi thứ, export config.plist để save nó lại


Bước 18: Test
Khuyến cáo nên tạo 1 USB Clover, cho các file cần thiết vào đó ( ROM, DSDT/SSDT nếu có ). Config.plist copy vào EFI\Clover đè lên file có sẵn nếu có. Boot vào usb đó và sau đó boot vào OS X và CẦU CHÚA rằng bạn đã patch đúng
*Lưu ý: với các máy boot lần đầu vào OS X thì cần " boot without cache "
 
  • Like
Reactions: bachduong and daohn
Tình trạng
Không mở trả lời sau này.