Phần 1: Chuẩn bị:

B1: 1 Cái USB 8GB.

B2: 1 File ISO Linux (khuyến khích dùng Ubuntu hoăc có thể dùng WSL).

B3: Xcode.

B4: Tải Pin Configuration và giải nén.

B5: Tải layout và platform.

B6: Tải graphviz.pkg.

B7: Tải CodecGraph và giải nén.

B8: Tải ProperTree.

B9: Tải AppleALP RepoLilu.kext.

Phần 2: Dump Codec

B1: Các bạn Boot qua Linux (có thể sử dụng Dualboot hoặc Live trên USB hoặc WSL).

B2: Mở Terminal (ấn Ctrl + T) và gõ các lệnh sau:

cat /proc/asound/card0/codec#1 > ~/Desktop/codec_dump.txt

Hoặc:

cat /proc/asound/card0/codec#0 > ~/Desktop/codec_dump.txt

Hoặc:

cd ~/Desktop && mkdir CodecDump && for c in /proc/asound/card*/codec#*; do f="${c/\/*card/card}"; cat "$c" > CodecDump/${f//\//-}.txt; done && zip -r CodecDump.zip CodecDump

Sau đó các bạn copy file codecdump.zip sang macOS.

Phần 3: Chuẩn bị sơ đồ Path Map và Verbs

B1: Cài graphviz.pkg

B2: Giải nén file codec dump.zip và copy file ccodec_dump.txt vào folder CodecGraph (folder này nên đặt ngoài Desktop).

B3: Gõ lệnh sau vào Terminal:

cd ~/Desktop/codecgraph

// và sau đó gõ tiếp lệnh dưới

kéo thả file script patch codec vào rồi enter

B4: Chúng ta sẽ Copy 2 file codec_dump_dec.txt.svg và finalverbs.txt ra một nơi khác.

Phần 4: Xác định Verb Data

Ở đây các bạn mở file finalverbs.txt lên sẽ có dạng:


Verbs from Linux Codec Dump File: codec_dump.txt

Codec: Realtek ALC269VC   Address: 0   DevID: 283902569 (0x10ec0269)

   Jack   Color  Description                  Node     PinDefault             Original Verbs
--------------------------------------------------------------------------------------------------------
Digital Unknown  Mic at Int N/A              18 0x12   0x90a60930   01271c30 01271d09 01271ea6 01271f90
 Speaker at Int N/A    0x14 0x14                        2417426704 01471c10 01471d01     01471e17 01471f90  
 HP Out at Ext Left    0x15 0x15                        52498463 01571c1f 01571d10     01571e21 01571f03  
    1/8   Black  Speaker at Ext Rear         23 0x17   0x411111f0   01771cf0 01771d11 01771e11 01771f41
 Mic at Ext Left    0x18 0x18                        60905504 01871c20 01871d58     01871ea1 01871f03  
    1/8   Black  Speaker at Ext Rear         25 0x19   0x411111f0   01971cf0 01971d11 01971e11 01971f41
    1/8   Black  Speaker at Ext Rear         26 0x1a   0x411111f0   01a71cf0 01a71d11 01a71e11 01a71f41
    1/8   Black  Speaker at Ext Rear         27 0x1b   0x411111f0   01b71cf0 01b71d11 01b71e11 01b71f41
  ATAPI  Purple  Speaker at Ext N/A          29 0x1d   0x40138205   01d71c05 01d71d82 01d71e13 01d71f40
    1/8   Black  Speaker at Ext Rear         30 0x1e   0x411111f0   01e71cf0 01e71d11 01e71e11 01e71f41
--------------------------------------------------------------------------------------------------------


   Jack   Color  Description                  Node     PinDefault             Modified Verbs
--------------------------------------------------------------------------------------------------------
Digital Unknown  Mic at Int N/A              18 0x12   0x90a60930   01271c30 01271d00 01271ea6 01271f90
 Speaker at Int N/A    0x14 0x14                        2417426704 01471c10 01471d00     01471e17 01471f90  
 HP Out at Ext Left    0x15 0x15                        52498463 01571c40 01571d10     01571e21 01571f00  
 Mic at Ext Left    0x18 0x18                        60905504 01871c20 01871d50     01871ea1 01871f00  
  ATAPI  Purple  Speaker at Ext N/A          29 0x1d   0x40138205   01d71c50 01d71d80 01d71e13 01d71f40
--------------------------------------------------------------------------------------------------------

Ở đây 2 có 2 mục cần quan tâm mục đầu tiên là devid (sẽ dùng ở phần dưới) mục thứ 2 là Modified Verbs (ta sẽ làm việc với mục này)

Ta có dòng đầu tiên được chia thành 4 nhóm hãy cùng tìm hiểu chức năng và ý nghĩa các nhóm nhưng trước hết ta sẽ hiểu định nghĩa chung.

 01271c30 01271d00 01271ea6 01271f90

Ta có 0 12 71c 30 có nghĩa là:

0 : Codec address.

12: Node id.

71c : Verb command (sẽ tuần theo 1uy tắt nhóm đầu sẽ là 71c nhóm 2 là 71d nhóm 3 là 71 e nhóm 4 là 71f và 70c EAPD)

30: Verb data (đây là phần quan trọng nhất)

Phần 5: Patch Verb Data

B1: Các bạn copy Modified Verbs ra 1 text riêng sao đó sao chép vào bộ nhớ tạm (Command + C | node 1d là 1 node không cần thiết nên các bạn xóa đi)

Các bạn sẽ cần chú ý kỹ vào ảnh trên ta thấy 12 và node 18 đều là micin nhưng 18 lại là external nên ta cần file chuyển 18 về line in như thế này:

Vậy quy tắc chuyển như thế nào thì các bạn xem phần dưới nhé:

Bây giờ mình sẽ lấy node 18 làm ví dụ chuyển:

Đầu tiên là nhóm 1:

01871c20 01871d50 01871e81 01871f00  

20 là verb data ( như đã nói ở trên ) ở đây mình sẽ gọi verb data là xy sẽ có dạng:

01871cXY

  • X: Là thông tin port (ở đây các thông tin port không được trùng nhau vd như 50, 50, 20 ta có 2 lần giá trị 5 xuất hiện ở X thì các bạn phải đổi 1 giá trị thành 1 giá trị khác bất kì miễn là không trùng lặp vd ở đây ta có 50, 30, 20).

  • Y: là thông tin kênh (các bạn chỉnh hết về 0).

Tiếp tục ta chuyển đến nhóm thứ 2:

01871c20 01871d50 01871e81 01871f00 
 

Cũng như ở trên mình gọi verbs data là X và Y ta có:

01871dXY

  • X là màu của jack (dựa vào bảng dưới để xác định màu).

Tùy chỉnh theo bảng sau:

Unknown 0 
Black 1 
Grey 2
Blue 3 
Green 4
Red 5
Orange 6
Yellow 7
Purple 8
Pink 9
Reserved A-D
White E
Other F
  • Y là thông tin jack cắm (external là 0 và internal là 1).

Tiếp theo là nhóm thứ 3:

01871c20 01871d50 01871e81 01871f00 

01871eXY

  • X là thiết bị âm thanh (xem bảng dưới để xác định).
Line Out: 0 
Speaker:  1 
HP Out: 2 
CD: 3 
SPDIF Out: 4 
Digital Other Out: 5 
Modem Line Side: 6 
Modem Handset Side: 7 
Line In: 8 
AUX: 9 
Mic In: A 
Telephony: B 
SPDIF In: C 
Digital Other In: D 
Reserved: E 
Other: F
  • Y là cổng kết nối âm thanh (xem bảng dưới để xác định).
Unknown: 0  
1/8" stereo/mono: 1 
1/4" stereo/mono: 2 
ATAPI internal: 3 
RCA: 4 
Optical: 5 
Other Digital: 6 
Other Analog: 7 
Multichannel Analog (DIN): 8 
XLR/Professional: 9 
RJ-11 (Modem): A 
Combination: B  
Other: F

Cặp thứ 4

01871c20 01871d50 01871e81 01871f00 

01871fXY

  • X là Port Connectivity (giúp ứng dụng biết đang kết nói vói speaker, hp hay line in).
  • Y là vị trí port.
//*
ta lấy xy chuyển về dạng nhị phân ( dùng hackintool )

sau đó thêm các số 0 vào trước dãy số đến khi nào đủ 8 chữ số trong dãy số
tiếp theo bạn tách dãy số từ trái sang phải theo quy tắt 2-2-4 
Sau đó thay X và Y lần lượt theo bảng sau 
Ví dụ:
01011001 --> 01 01 1001
*//

Port Connectivity bits 7:6 
-----------------------------------------------------------
00 - Port is connected to a Jack
01 - No External Port -or- No physical connection for Port  
10 - Fixed Function/Built In Device (integrated speaker, mic, etc)
11 - Jack and Internal device are attached 

Location Part 1 - bits 5:4
-----------------------------------------------------------
00 - External on primary chassis
01 - Internal
10 - Separate chassis
11 - Other

Location Part 2 - bits 3:0
-----------------------------------------------------------
The meaning depends on Location Part 1 

00 0000	N/A
00 0001   Rear
00 0010   Front
00 0011   Left
00 0100   Right
00 0101   Top
00 0110   Bottom
00 0111   Special (Rear panel)
00 1000   Special (Drive bay)

01 0000   N/A
01 0111   Special (Riser)
01 1000   HDMI
01 1001   ATAPI

10 0000	N/A
10 0001   Rear
10 0010   Front
10 0011   Left
10 0100   Right
10 0101   Top
10 0110   Bottom

11 0000   N/A
11 0110   ?
11 0111   Inside Mobile Lid (example: mic)
11 1000   Outside Mobile Lid

		Bits
Hex	  76 54 3210
-------------------
71cf01 = 00 00 0001 - Port has a jack - It is External - Rear Location
71cf02 = 00 00 0010 - Port has a jack - It is External - Front Panel Location 
71cf59 = 01 01 1001 - No External Port - ATAPI 
71cf18 = 00 01 1000 - Port has a jack - External - HDMI
71cf90 = 10 01 0000 - Built In Device - Internal - N/A 
	   |  |  ||||
	   |  |  |--------- Location part 2
	   |  |------------ Location part 1  
	   |--------------- Port Connectivity

Nếu bạn sử dụng jack combo thì chắc bạn sẽ cần EAPD thì thêm verb 0XY70c02 thêm nó vào sau cùng và thay XY là node id của speaker.

Phần 6: Xác định Path Map

Đây là lúc bạn dùng đến file codec_dump_dec.txt.svg được dump từ Terminal ở Phần 3.

Các bạn mở lên và sẽ xuất hiện như sau:

Nhìn khá rối đúng không nào nhưng các bạn đừng vội nản vì nó thật sự rất dễ và dễ hơn cách thủ công nhiều.

Trước hết ta cần tìm hiểu các kí hiệu trong sơ đồ sau:

Và đây là thứ tự đọc của Output:

Audio mixer có thể có hoặc không

Thứ tự của Input:

Audio mixer và audio selector có thể có hoặc không

Tiếp theo các bạn hãy chú ý đến các node nào có chữ [N/A] đằng trước tức đây là các node ảo các bạn có thể bỏ qua các node này.

  • Bây giờ ta sẽ xác định các node của audio output:

Nhưng nhìn vào mục số 3 ( node 24 ) đây là Mic nhưng chúng ta đang Patch Output tức là chỉ qua tâm đến Speaker và Headphone nên ta có mục 2 và mục 1 là 2 mục cần quan tâm.

Ta thấy đc liên kết với node 33 là 2 audio mixer 12, 13 nhưng ta thấy node 13 liên kết với node 33 bằng đường không ưu tiên nên ta sẽ loại node 13 đi ta tiếp tục nhìn vào node 12 có 2 đường ưu tiên đc nối đến node 12 nhưng chỉcó 1 audio output đc nối với node 12 nên ta sẽ loại đường kia đi vậy ta có headphone là 33-12-2 tương tự ta có speaker là 20-13-3.

  • Input

Ở đây thì tương dối dễ xác định hơn ta có node 25 có 2 luồng kết nối 1 luồn kết nối đến audio mixer 11 và audio mixer 35 nhưng đường nối đến audio mixer 35 là luồng ưu tiên nên ta loại audio mixer 11 đi và audio mixer đc nối đến audio input 8 nên ta có path map mic in như sau 8-35-25 tương tự ta có path map line in như sau 9-34-24.

Phần 7: Patch Platforms.xml và layout#.xml

B1: Mở file layout#.xml đã tải ở Phần 1

Và chỉnh những nội dung sau:

  • LayoutID: Bạn thay đổi hoặc giữ nguyên hoặc đổi đây mình sẽ thay thành 15.
  • CodecID: Phần này các bạn đã sửa ở Phần 3.
  • Inputs: Tuỳ vào codec của bạn có LineIn hay không, nếu không có thì xoá đi.
  • PatchMapID: Bạn cho vào đây 1 số ngẫu nhiên.

B2: Mở file Platforms.xml lên:

Bạn điền Path Map đã xác định Phần 7 vào đây:

  • PathMaps -> 0 -> PathMap -> 0 -> 0 là Mic.
  • PathMaps -> 0 -> PathMap -> 0 -> 1 là LineIn (mic gắn ngoài do macos không hỗ trợ nên phải khai báo là linein).
  • PathMaps -> 0 -> PathMap -> 1 -> 0 là HP (Headphone).
  • PathMaps -> 0 -> PathMap -> 1 -> 1 là Speaker.
  • PathMaps -> 0 -> PathMap -> PathMapID: ở đây bạn cần điền số giống với PathMapID ở layout#.xml

Nếu trường hợp không có Audio Mixer/Selector thì bạn xoá đi key 1, chỉ điền vào key 0 và key 2 thôi nhé!

Phần 8: Build Kext

B1: Bỏ Kext Lilu vào folder AppleALC.

B2: Vào Resource xóa hết Codec thừa và chừa lại Codec của bạn.

B3: Bỏ 2 file layoutid# và platformid# và folder tên Codec (nên Rename lại theo layout-id bạn đã set)

B4:  Mở AppleALC.xcodeproj –> PinConfigs –> Info.plist –> IOKitPersonalities –> HDA Hardware Config Resource –> HDAConfigDefault bằng Xcode bạn có thể tự tạo hoặc edit 1 cái có sẳn.

Các bạn sửa lại như sau:

  • Codec: thay đổi tuỳ thích.
  • CodecID: thay bằng Vendor Id của codec ở hệ decimal đã chuẩn bị trên.
  • ConfigData: bạn copy codec verb đã chuẩn bị đưa vào đây.
  • LayoutID: nhập layout-id bạn đã chọn để patch ở trên.

B5:  Mở AppleALC.xcodeproj –> Resources –> (tên codec bạn đang patch) –> Info.plist –> Information Property List –> Files.

Và chỉnh những thứ sau:

  • Codec id: id codec của các bạn.
  • Codec name: tên codec của các bạn.
  • layout -> 0 -> comment: điền tên bạn muốn đặt.
  • layout -> 0 -> id: điền id của bạn đã đặt ở Phần 8.
  • layout -> 0 -> path: điền path của file layout#.xml vào đây.
  • platforms -> 0 -> comment: điền tên bạn muốn đặt.
  • platforms -> 0 -> id: điền id của bạn đã đặt ở Phần 8.
  • platforms -> 0 -> path: điền path của file layout#.xml vào đây.

B6: Các bạn ấn Build Kext.

Phần 9: Load Kext AppleALC

B1: Bỏ Kext vừa Build vào EFI–> OC –> Kext và snapshot lại hoặc bỏ vào EFI –> Clover –> kext –> Other.

B2: Add vào boot-arg alcid=# (thay # thành layout id bạn đã đặt ở trên như của mình là alcid=15)

Lưu ý: Source tham khảo Patch AppleHDA cho các laptop chạy Hackintosh – Hackintosh Vietnam – Chuyên trang cung cấp hướng dẫn cài hackintosh | How to patch AppleHDA – Guides and Tutorials – Olarila | [Hướng dẫn] Patch AppleHDA cho các laptop chạy Hackintosh – Sharing Is Caring (trungnguyenblogs.blogspot.com)

Leave a Reply