Patch Apple HDA

Tải file

B1: Tải xcode

B2: Tải trình edit file xml

Một số app khuyến khích

B3: Tải Pin Configurator

B4: Tải graphviz.pkg và cài đặt python2

Nếu như file cài đặt đã cũ và bạn không thể cài đặt thì hãy nhập các lệnh sau

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew install graphviz

#Copy từng dòng 1 vào terminal không copy cùng lúc

B5: Tải codecgraph

Sau kkhi giải nén thì hãy xoá những file sau

B6: Git Clone các file sau về và để ở desktop

B7: Tải các file layout và platform.

B8: Tải ISO của linux

Một số distro khuyến khích

Các sửa file codecgraph.py

Chỉ áp dụng khi gặp lỗi

B1: Mở file codecgraph.py bằng xcode hay bất kì một trình edit text nào bạn biết

B2: Tìm đến dòng đầu tiên #!/usr/bin/python sửa đổi lại thành #!/usr/local/bin/python

Nếu lỗi thì đổi thành #!/usr/local/bin/python2

Before:

After:

B3: Save lại

Như vậy là done rồi

Chuẩn bị

B1: Tạo 1 chiếc usb live linux

Có thể dùng Rufus hoặc ventoy

B2: Boot vào linux live usb và nhập lệnh sau vào terminal

Sau khi chạy file xong tiến hành copy file codecdump.zip ở Desktop vào một nơi nào đó rồi reboot lại macos

B3: Giải nén file ra thông thường ta nhận được 2 file

  • card0-codec#0.txt

  • card1-codec#0.txt

Ta sẽ mở thử từng file và nhìn vào mục codec giữ file có codec đúng với codec bạn cần patch và xoá file còn lại đi

B4: Ta sẽ tiếp tục xoá dòng AFG Function Id: 0x1 (unsol 1) đi

B5: Rename file thành codec_dump.txt

Nếu bạn làm đúng hết tất cả bạn sẽ có 1 folder như sau

B6: Bạn mở terminal ra rồi kéo file Scrip Patch Codec by HoangThanh vào và nhấn enter

Hãy nhớ để chạy được file này bạn phải cài đặt graphviz nếu không sẽ gặp lỗi như sau

Chỉnh sửa codecverbs

B1: mở file finalverbs.txt lên ta sẽ có như sau

B2: Hãy chú ý vào mục Modified Verbs và copy chúng thành 1 file

B3: Copy toàn bộ file vừa tạo vào clipboard sau đó mở tool Pin Configurator

B4: Chọn import --> clipboard

Nếu như bạn làm đúng các bước thì ta sẽ có như sau

B5: Ở đây ta thấy có rất nhiều cột nhưng bạn chỉ cần chú ý vào các cột sau

  • Nid: nó chỉnh là dạng decimal của các node

  • Device: Thiết bị âm thanh

  • Connector: Cổng kết nối của thiết bị

  • Port: Thông tin jack cắm

  • Gross Location: thông tin port internal hay external

  • Geometric Location: Chỉ vị trị của port

  • Color: Màu của cổng âm thanh

  • MISC: Thông tin kênh xuất ra để mặc định

  • EAPD: Kích hoạt tính năng switch giữa speaker và headphones

Cái này cho các bạn biết thêm thôi không cần quá để tâm vì nó đều có ghi ở file codec_dump.txt

Tiếp theo chúng ta sẽ tiến hành chỉnh các Nid

finalverbs.txt là một file đã được script patch từ file codec dump của các bạn. Nên nó sẽ chuẩn đối với hầu hết laptop và phải chỉnh lại rất ít

Được rồi bây giờ ta sẽ tiến hành patch nid đầu tiên là 20

Đầu tiên hãy click vào nid 20 ta sẽ được như sau

Bây giờ bạn sẽ tiến hành search node id dạng hex ở đây là 0x14 ở file codec_dump.txt

Ta cần chú ý vào dòng

Ở đây ta sẽ phân tích được là

  • Device: Speaker

  • Connector: Analog

  • Color: Unknown

  • EAPD: EAPD

  • Port: Fixed

  • Gross Location: Int

  • Geometric Location: N/A

Và đây là những gì hiển thị trong app sau khi đã chỉnh

Tiếp theo ta sẽ chỉnh tiếp tới nid 23

Tương tự ở trên thì mọi thông tin cần thiết của ta đều có ở đây

Ở đây ta cũng sẽ có tương tự như trên

  • Device: Line Out

  • Connector: 1/4

  • Color: Unknown

  • EAPD: NO

  • Port: N/A

  • Gross Location: Ext

  • Geometric Location: N/A

Tiếp theo ta hãy đến với nid 29 nào

Tương tự như các phần trước ta cũng sẽ có cần phần hiển thị thông tin

Ta sẽ chỉnh tiếp nid 33

Tương tự như các phần trên ta cũng sẽ có các mục hiển thị thông tin

  • Device: HP Out

  • Connector: 1/8

  • Color: Black

  • EAPD: NO

  • Port: Jack

  • Gross Location: Ext

  • Geometric Location: Left

Nếu như bạn đã đến được đây thì bạn hãy cố gắng lên nhé chúng ta sắp hoàn thành patch codec verbs rồi

Rồi bây giờ chúng ta hãy tiếp tục chỉnh nid 18

Tiếp theo ta cũng hãy phân tích dựa trên dữ liệu trên sẽ có là

  • Device: Mic

  • Connector: Digital

  • Color: Unknown

  • EAPD: NO

  • Port: Fixed

  • Gross Location: Int

  • Geometric Location: N/A

Và sau những quá trình phía trên ta có được như sau

B6: Ấn Get ConfigData và copy chuỗi ký tự vừa được dump ra một file nào đó

Và đây là thành quả của chúng ta

Xác định pathmap

B1: Ta sẽ mở file codec_dump_dec.txt.svg

Nhìn có giống cái mạng nhện không nào 😂 Nhưng đừng lo nó rất đơn giản việc của bạn chỉ là đọc thật kỹ mà thôi

Trước hết chúng ta hãy cùng nhau tìm hiểu các ký hiệu này nhé

Và để cho các bạn đỡ bỡ ngỡ thì đây là hình ảnh path map của các loại codec Conexant và IDT

Còn đây là path map của Realtek cũng như là của mình

Output

Đây là quy tắc đọc của Output

Tuân theo quy tắc này chúng ta sẽ có thể xác định được như sau

Ta sẽ có Path Map như sau:

  • Speaker: 20 -> 12 -> 2

  • Hp Out: 33 -> 13 -> 3

Input

Quy tắc xác định pathmap input

Tuân theo quy tắc này chúng ta sẽ có như sau

Ta sẽ có Path Map như sau:

  • Mic In: 17 -> 18

Như vậy là ta đã xác định được hết các path map

Patch Platforms.xml và layoutxx.xml

layoutxx.xml

B1: Mở file layoutxx.xml bằng trình edit xml

Như ở đây mình sẽ sử dụng propertree

B2: Ta sẽ tiến hành chỉ như sau:

  • LayoutID: bạn thay đổi hoặc giữ nguyên tuỳ thích, đây mình sẽ thay thành 3

  • CodecID: bạn cần thay bằng DevID ở file finalverbs.txt

  • Inputs: tuỳ vào codec của bạn có LineIn hay không, nếu không có thì xoá dòng linein đi

  • PatchMapID: bạn có thể cho vào đây tên codec bạn patch hoặc bất kì số nào bạn thích

Platformsxx.xml

B1: Mở file Platformsxx.xml bằng trình edit xml

Như ở đây mình sẽ sử dụng propertree

B2: Ta sẽ tiến hành chỉ như sau:

  • PathMaps -> 0 -> PathMap -> 0 -> 0 là Mic

  • PathMaps -> 0 -> PathMap -> 0 -> 1 là LineIn

    • Nếu như đã xoá linein ở file layoutxx.xml thì cũng sẽ xoá dòng linein ở đây

  • PathMaps -> 0 -> PathMap -> 1 -> 0 là HP

  • 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.

Sau khi chỉnh sửa ta sẽ được:

Binary Patch

Hãy chắc rằng bạn đã git clone các repo ở phần tải file

Nhớ là git clone không phải download zip

B1: Các bạn copy folder MacKernelSDK vào folder Lilu

B2: Mở file Lilu.xcodeproj bằng xcode

B3: Build kext Lilu như hình

B4: Sau khi build thành công bạn sẽ có như ảnh

B5: Chuột phải vào file lilu chọn Show in finder

B6: Cho kext lilu vừa build và folder MacKernelSDK vào folder Apple ALC

B7: Vào folder Resources xoá hết các codec thừa đi chừa lại codec đang patch mà thôi như của mình là ALC 283

B8: Vào folder codec và xoá đi tất cả chi chừa lại file info.plist sau đó copy hay file layoutxx.xml và Platforms.xxxml

B9: Rename 2 file layoutxx và platformsxx thành layout và platforms với layout id mà bạn đã chọn ở trên như của mình là

  • layout3.xml

  • platforms3.xml

B10: Mở file AppleALC.xcodeproj bằng xcode

B11: Mở AppleALC.xcodeproj -> PinConfigs -> Info.plist -> IOKitPersonalities -> as.vit9696.AppleALC-> HDAConfigDefault

Bạn có thể tự tạo hoặc edit 1 cái có sẵn

Các bạn cần chỉnh 1 số thứ sau:

  • Codec/Comment: thay đổi tuỳ thích

  • CodecID: thay bằng DevID của codec ở file finalverbs.txt

  • 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

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

B13: Xoá các dòng bên dưới 2 dòng

  • Layouts

  • Platforms

Sao cho chỉ chừa 1 item bên dưới 2 dòng này

Ta cần chỉnh một số thứ như sau

  • Comment: Điền tuỳ thích

  • Id: Điền layout-id của bạn đã chọn ở trên như của mình là 3

  • Path: Điền tên của 2 file layout và platforms của bạn như của mình là

    • layout3.xml.zlib

    • Platforms3.xml.zlib

B14: Ấn Command + S

B15: Ấn Build

B16: Nếu như bạn làm đùng tất cả thì sẽ có được như hình

Và như vậy là đã patch xong rồi

Cài đặt

B1: Chuột phải vào kext apple ALC chọn show in Finder

B2: Thêm kext Apple ALC vào EFI --> OC --> kext và tiến hành snapshot

Nếu là clover thì copy kext vào EFI --> Clover --> Kext --> Other

B3: Reboot và tận hưởng thôi

Last updated