Thế giới OS X trên PC

home

views comments
Nếu bạn đã đọc đến bài này thì chắc là đã biết AppleHDA là gì và tầm quan trọng của nó đối với một hệ thống Hackintosh, vậy nên cái phần mở đầu này mình sẽ nói thật ngắn gọn thôi.

Trước tiên, các bạn hãy dành thời gian đọc bài này của mình, nếu như những giải pháp mình đưa ra trong đó không thể làm thỏa mãn đôi tai của bạn thì xin chúc mừng, bạn đã tìm đúng bài cần đọc rồi đó ^_^.

Các bạn nên biết rằng patch AppleHDA là một kỹ năng nâng cao của Hackintosh, nó đòi hỏi rất nhiều ở người patch sự kiên trì bền bỉ và tinh thần ham học hỏi. Khi viết bài này, mình đã cố gắng viết sao cho đơn giản dễ hiểu, cộng thêm với sự hỗ trợ của các công cụ hữu ích thì việc patch AppleHDA không còn quá khó khăn như trước đây nữa. Tuy nhiên, hãy luôn xác định rằng bạn có thể sẽ mất nhiều giờ, thậm chí là nhiều ngày, nhiều tháng để nắm bắt được toàn bộ quá trình patch. Một cỗ máy Hackintosh với hệ thống âm thanh hoàn hảo chẳng có gì là khó nếu những gì bạn bỏ ra là xứng đáng :D.

Các bạn có thể tham khảo guide đầy đủ, chi tiết bằng tiếng Anh ở đây:
Bài viết mang tính chất tổng hợp lại từ nhiều nguồn khác nhau, kết hợp với kinh nghiệm cá nhân. Nếu thấy có chỗ nào không đúng, hi vọng các bạn có thể bớt chút thời gian comment bên dưới để mình hoàn chỉnh bài viết hơn. Mình xin cảm ơn!

Guide này chỉ áp dụng cho các máy laptop cài Hackintosh 10.8 trở đi, với các version thấp hơn, vui lòng tham khảo bài viết bằng tiếng Anh ở trên.

Mình xin chân thành cảm ơn tác giả bài hướng dẫn gốc EMlyDinEsh cùng các bạn khác như Mirone, Bcc9, RehabMan, Pokenguyen, Danght, Tuanpekoe, El Nos... những người đã góp phần không nhỏ vào việc đơn giản hóa quá trình patch AppleHDA.


HƯỚNG DẪN PATCH APPLEHDA CHO LAPTOP CÀI HACKINTOSH


Yêu cầu:

1. Máy tính cài Mac OS X, Ubuntu (LiveUSB cũng được) và biết cách thao tác, sử dụng một số app trên hai hệ này.
2. Download bộ công cụ patch AppleHDA bao gồm:
+ Các app cần sử dụng trong quá trình patch.
+ Layout và Platform.
+ Folder Codecgraph và patch-hda.
+ Codec_dump ALC269VC mình dùng để viết hướng dẫn và các kext đã patch thành công, các bạn có thể dùng để đối chiếu.


Các bước:

1. Dump codec từ Ubuntu.
2. Chỉnh sửa codec verbs.
3. Xác định pathmap, patch layout và platform.
4. Patch binary
5. Patch DSDT.
6. Kiểm tra tình trạng kext.


Chú ý: Các bạn nên đọc qua tất cả các bước một lượt để hiểu sơ qua về quá trình rồi mới bắt tay vào làm nhé. Như thế sẽ bớt lỗi vặt hơn ^_^.

BƯỚC 1: DUMP CODEC TỪ UBUNTU OS VÀ SƠ ĐỒ HÓA CÁC KẾT NỐI.


1. Dump Codec từ Ubuntu 

Các bạn có thể dùng Ubuntu LiveUSB (Google nhé) hoặc nếu có sẵn Ubuntu trên HDD rồi thì càng tốt, copy đoạn code sau vào Terminal (Ctrl+T) rồi Enter:

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 khi lệnh được thực hiện, sẽ có 2 file được dump ra ngoài màn hình nền Desktop, copy file codecdump.zip ra một nơi nào đó rồi đem sang máy cài Mac làm bước tiếp theo.

2. Chạy script để sơ đồ hóa các kết nối.

- Cài graphviz-2.32.0.pkg trong bộ công cụ ở trên.
- Giải nén codecdump.zip, ta sẽ thấy có 2 file trong đó, tuy nhiên, mình sẽ chỉ sử dụng 1 file thôi. Các bạn tìm file nào có tên codec sound như hình thì xóa dòng AFG Function Id: 0x1 (unsol 1) đi và rename file đó thành codec_dump.txt.

- Copy codec_dump.txt vào thư mục codecgraph (đặt thư mục này ngoài Desktop nhé), mở Terminal và gõ lệnh như sau:

> sudo -s
Gõ mật khẩu root của máy rồi Enter, lưu ý là mật khẩu sẽ không hiển thị trên màn hình.
> cd [Kéo thả thư mục Codecgraph vào rồi Enter]
> [Kéo thả file Scrip Patch Codec by HoangThanh vào rồi Enter]

- Đợi khoảng 5 giây cho lệnh chạy xong, chúng ta sẽ copy 2 file codec_dump_dec.txt.svgfinalverbs.txt ra một nơi khác để tiện chỉnh sửa.

BƯỚC 2: CHỈNH SỬA CODEC VERBS


1. Chỉnh Verbs
- Mở finalverbs.txt vừa tạo được ở trên, trong đó có 2 nội dung sẽ sử dụng cho việc patch là DevID và Modified Verbs. Tuy nhiên, trong khuôn khổ của bước này, ta sẽ chỉ quan tâm đến Modified Verbs mà thôi. Copy 4 nhóm ký tự cuối cùng của Modified Verbs vào PinConfigurator như hình.

- Tại hình số 3, các bạn để ý các số 14h, 18h, 12h, 15h trong ngoặc, những số này tương ứng với các node của Pin Complex. Ta thấy node 1d hoàn toàn không ảnh hưởng gì đến các cổng âm thanh nên mình sẽ xóa nó đi.

- Giờ mình sẽ giải thích hình số 4.
Internal + Jack: là thiết bị built-in hay gắn trong/tích hợp (là loa và mic được thiết kế đi kèm và không thể tách rời với máy)
Jack or ATAPI, 1/8” stereo/mono: là thiết bị external hay gắn ngoài (các thiết bị tai nghe hoặc mic thu âm rời…)

Như vậy, theo như cách giải thích trên thì đúng ra các thông số của card phải là:
Nid 20 (14h): Loa tích hợp (Speaker).
Nid 24 (18h): LineIn (đúng ra nên là mic gắn ngoài nhưng vì Mac không sử dụng mic gắn ngoài nên ta sẽ chuyển nó về LineIn).
Nid 18 (12h): Mic tích hợp (Microphones).
Nid 21 (15h): Loa rời (Headphone).

Tuy nhiên, các thông số trong hình lại hiển thị khác, đặc biệt là sự xuất hiện của 2 Microphones (Nid 24-18h và Nid 18-12h) mà không thấy có LineIn thì hơi vô lý. Chính vì thế ta sẽ sửa lại các verbs bên trên để chuẩn lại cho đúng:

Modified Verbs là verb đã được chỉnh sửa lại rồi nên hầu hết các codec laptop chỉ cần sửa như trên là được. Nếu muốn hiểu sâu hơn về cách sửa verbs, các bạn có thể tham khảo bài này.

Ngoài ra, nếu muốn máy tự động chuyển qua lại giữa speaker và headphone (cắm headphone thì âm thanh tự chuyển sang tai nghe) các bạn thêm một nhóm sau vào sau cùng: 01470c02 (bạn có thể sẽ phải thay 14 bằng Nid speaker của soundcard máy bạn).

Sau khi chỉnh sửa lại, ta có verbs hoàn chỉnh:
01271c30 01271d01 01271ea0 01271f90
01471c10 01471d01 01471e17 01471f90
01571c40 01571d10 01571e21 01571f00
01871c20 01871d50 01871e81 01871f00 01470c02

Copy lại các verbs trên vào PinConfigurator, ta sẽ thấy có sự thay đổi so với ban đầu:


2. Copy các verbs vào info.plist

- Copy AppleHDA.kext gốc trong System/Library/Extensions ra Desktop để tiện chỉnh sửa.
- Dùng PlistEdit Pro để mở Info.plist tại:
AppleHDA.kext/Show Package Contents/Contents/PlugIns/AppleHDAHardwareConfigDriver.kext/AppleHDA.kext/Show Package Contents/Contents/Info.plist. 
Sau đó tìm đến key như hình:


Trong HDAConfigDefault thì thường có khoảng trên 20 keys, các bạn xem từng key một, đến key nào có đầy đủ các giá trị như hình số 2 (thường là key số 4 hoặc 5) thì giữ lại key đó và xóa tất cả các key còn lại. Mặc định khi chỉ có 1 key thì key đó sẽ được đặt tên là key 0.

Tiếp đến, các bạn chỉnh sửa như sau:

AFGFlowPowerStates: giữ nguyên.
CodecID: copy tên codec đã được chuyển từ hệ hex sang dec trong finalverbs.txt.
FuncGroup: giữ nguyên.
ConfigData: các bạn chuyển dãy verbs đã chỉnh sửa trong PinConfigurator về thành một dòng, mỗi nhóm cách nhau một khoảng trắng rồi copy vào Info.plist.
LayoutID: 28.

BƯỚC 3: XÁC ĐỊNH PATHMAP, PATCH LAYOUT VÀ PLATFORM.


1. Xác định pathmap.

Giờ là lúc dùng đến file codec_dump_dec.txt.svg tạo được lúc chạy Terminal, các bạn mở nó lên sẽ thấy bên trong là một sơ đồ các kết nối âm thanh với rất nhiều các hình vẽ khác nhau. Tính chất phức tạp của sơ đồ tùy thuộc vào từng loại codec, nếu chia theo mức độ thì codec của IDT là phức tạp nhất, sau đó đến Realtek và cuối cùng là Conexant (tất nhiên là còn nhiều loại codec khác nhưng đây là 3 loại hay gặp nhất trên các laptop bây giờ).
Tuy nhiên, thông thường, dù sơ đồ có phức tạp đến đâu thì luôn chia thành 2 phần riêng biệt là Input Device và Output Device, dưới đây là hình minh họa cho codec của Realtek và Conexant. (Mình không chụp hình của IDT vì sơ đồ nó rộng quá, zoom bé lại thì chẳng nhìn thấy gì nữa cả :3)



Mình sẽ giải thích ý nghĩa của các hình vẽ trong sơ đồ:


Thứ tự kết nối của các Input Device (gồm Mic và LineIn) sẽ là:


Thứ tự kết nối của các Output Device (gồm Speaker và Headphone) sẽ là:

Giờ chúng ta sẽ đi xác định Input device trước:
Nguyên tắc khi chọn các node input là node nào có xuất hiện [N/A] đằng trước thì mình không cần quan tâm. Với Input Device, chúng ta sẽ quan tâm đến các node pin complex có dạng như [Fix] Mic at... (Microphone)[Jack] Mic at... (LineIn), đồng thời để ý các đường mũi tên có màu xanh dương nét liền - những đường này biểu thị các kết nối ưu tiên.



Ví dụ với codec ALC 269VC này thì các bạn để ý các đường kết nối từ 9 => 34 => 18 đều là các đường nét liền màu xanh dương. Node pin complex 18 là node của Microphone, như vậy Microphone sẽ có kết nối là 9 - 34 -18
Do các kết nối ưu tiên đều đã dành cho microphone rồi nên các kết nối không ưu tiên sẽ là của LineIn, nhìn trên hình ta có 8 - 35 - 25.

Chú ý:
- Một số codec của Realtek và Conexant từ đời Haswell trở đi chỉ có kết nối cho Microphone mà không có kết nối cho LineIn (điển hình là codec ALC233 sử dụng combo jack của Asus), trong trường hợp các bạn sẽ chỉ còn cách chấp nhận là máy sẽ không nhận mic ngoài.
- Một số codec của Conexant và Realtek không xuất hiện Audio Mixer/Audio Selector trong sơ đồ, trong trường hợp đó các bạn cứ xác định các kết nối chỉ có pin complex và audio input thôi.

Tiếp theo, chúng ta sẽ đi xác định các kết nối của các Output Device.

Tương tự như với Input Device, tất cả các node có xuất hiện [N/A] ở đầu ta sẽ loại bỏ, đồng thời chú ý các kết nối ưu tiên. Nếu trên vùng của Output Device có xuất hiện các node của bên Input như [Fixed] Mic... hoặc [Jack] Mic at... thì ta cũng không cần quan tâm.
Với output device, chúng ta sẽ để ý các node có dạng [Fixed] Speaker at... (speaker)[Jack] HP out... (headphone).

Như vậy nhìn vào hình, ta có thể dễ dàng xác định các kết nối như sau:
Speaker: 20 - 13 -3
Headphone: 21 - 12 -2

Chú ý: Trong các codec của Conexant không thấy sự xuất hiện của Audio Mixer trong sơ đồ, trong trường hợp đó các bạn cứ xác định các kết nối chỉ có pin complex và audio output thôi.

Như vậy, sau khi xác định tất các kết nối rồi, ta có:
Microphone: 9 - 34 - 18.
LineIn: 8 - 35 - 25.
Headphone: 21 - 12 -2.
Speaker: 20 - 13 - 3.

OK, các bạn copy mấy số này ra một chỗ riêng, chút nữa sẽ dùng chúng để patch platform ^_^.

2. Patch layout.xml và platform.xml

a) Phần này là phần dễ nhất nè, các bạn mở file layout28.xml bằng PlistEdit Pro và sửa các thông số như sau:

LayoutID: để layout trùng với layout của Info.plist, trong trường hợp này là 28.
CodecID: bên trong key này có một key con đặt tên là 0, các bạn điền tên codec của sound card dưới dạng mã dec trong finalverbs.txt vào key 0 này, CodecID này trùng với CodecID trong Info.plist.
PathmapID: điền một số bất kỳ nào đó, số này phải trùng với số pathmapid trong platform nên thường thì nó sẽ được đặt theo tên của codec, trong trường hợp này là 269.
Sau cùng nhớ save lại nhé.

b) Patch platform.xml

Tương tự, các bạn mở platform.xml bằng PlistEdit Pro, sau đó mở key Pathmaps sẽ thấy bên trong có rất nhiều các key nhỏ khác, các bạn mở key số 0 ra thấy bên trong có một key Pathmap và một key PathmapID. Key PathmapID này bạn để số trùng với số PathmapID trong layout28.xml. Tiếp đến, mở key Pathmap ra sẽ thấy có 2 key nhỏ là 0 và 1, mở tiếp 2 key này ra thì trong mỗi key này lại có 2 key nhỏ khác nữa, các key này chính là các key điều khiển các thiết bị như đã thể hiện trong layout28.xml. <== Khó hiểu quá o.O, thôi nhìn hình cho dễ hình dung nha ^0^.


Các bạn còn nhớ thứ tự các kết nối mình đã xác định ở phần trước không, giờ là lúc chúng ta sẽ dùng đến chúng, nhìn hình cho dễ hiểu nha :).


Tất nhiên, khi nào chỉnh xong rồi, các bạn nhớ save lại nhé :D.

c) Convert các file xml sang xml.zlib.
2 file layout28.xml và platform.xml nếu cứ để như vậy thì kext sẽ không đọc được, các bạn cần chuyển chúng về layout28.xml.zlibplatform.xml.zlib. Để convert file, các bạn mở app HDAWizard trong bộ công cụ về, chuyển sang tab Convert, sau đó kéo thả 2 file layout28.xml và platform.xml vào, đợi khoảng 2s ta sẽ có 2 file mới với định dạng xml.zlib.
Các bạn copy đè 2 file này vào AppleHDA.kext/Contents/Resources

BƯỚC 4: PATCH BINARY CHO KEXT

Trong bộ công cụ có folder patch-hda.zip, các bạn giải nén và copy folder đó ra ngoài Desktop, sau đó mở Terminal và gõ lệnh sau:

cd ~/desktop/patch-hda
./patch-hda.pl 10ec0269

Các bạn thay 10ec0269 bằng DevID dưới dạng mã hex của codec đang patch, DevID có thể tìm trong finalverbs.txt.


Sau đó các bạn vào System/Library/Extensions/AppleHDA.kext/Contents/MacOS sẽ thấy trong đó có 2 file binary, copy file AppleHDA trong đó chép đè lên AppleHDA.kext/Contents/MacOS của kext đang patch.

Chú ý: Lệnh này chỉ thực hiện được khi folder patch-hda được đặt ngoài Desktop và kext AppleHDA.kext gốc vẫn còn trong S/L/E, nếu thiếu 2 điều kiện này, lệnh sẽ bị lỗi.
OK, vậy là bước patch kext đã xong, chỉ còn chút xíu nữa thôi là xong rồi ^_^.

BƯỚC 5: Patch DSDT, cài kext.


1. Patch DSDT

Trên một hệ thống Mac Hack, muốn có âm thanh không phải cứ patch kext xong là có ngay. Bạn cần inject layout cho kext, hiểu đơn giản là cung cấp những thông tin cơ bản để máy nhận biết chip audio. Dưới đây, mình sẽ hướng dẫn 3 cách inject layout cho AppleHDA, trong đó, mình khuyến khích các bạn sử dụng cách thứ nhất là inject qua DSDT (sử dụng MacIASL); cách 2 và cách 3 về lý thuyết là được tuy nhiên mình chưa từng làm thử nên sẽ không thể hỗ trợ nhiều nếu các bạn sử dụng những cách này. Ngoài ra, cách 2 và cách 3 thông thường chỉ áp dụng cho những máy nào mà DSDT không có Device (HDEF).

Inject layout qua DSDT.
Trong MacIASL, thêm method _DSM vào Device (HDEF) có nội dung như sau:

Method (_DSM, 4, NotSerialized)
{
If (LEqual (Arg2, Zero))
{
Return (Buffer (One)
{
0x03
})
}

Return (Package (0x06)
{
"layout-id",
Buffer (0x04)
{
0x1C, 0x00, 0x00, 0x00
},

"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
},

"PinConfigurations",
Buffer (Zero) {}
})
}

Trong đoạn code trên thì phần quan trọng nhất là layout-id (chỗ mình in đậm và bôi đỏ). Tùy thuộc vào layout của kext mà các bạn sửa cho phù hợp. Layout có thể được điền vào dưới dạng hệ thập phân (hệ cơ số 10) hoặc hệ thập lục phân (hệ cơ số 16) đều được, tuy nhiên mình thường dùng hệ thập lục phân vì nó chuẩn theo ngôn ngữ chung của DSDT. Dưới đây là các layout thường được dùng cho AppleHDA:



Chú ý: Tham khảo Guide for Newbie (phần 5) để biết thêm về cách patch DSDT. Trong nhiều trường hợp, bạn sẽ cần phải patch thêm cả HPET và IRQ thì mới lên audio.

Inject layout qua config.plist cho những ai sử dụng Clover bootloader
Mở config.plist bằng Clover Configurator, chuyển sang tab Devices và chỉnh như hình:


Inject layout qua chameleon.boot.plist cho những ai sử dụng Chameleon bootloader.
Mở org.chameleon.boot.plist bằng Chameleon Wizard và chỉnh như hình. Ngoài ra, khi cài bootloader cần chọn cài thêm module HDAEnabler nữa.


2. Cài kext và DSDT

Yêu cầu:
- Với Yosemite, config.plist hoặc chameleon.org.boot.plist bắt buộc phải có kext-dev-mode=1.
- Với El Capitan, config.plist để CsrActiveConfig là 0x03 và BooterConfig là 0x28.

Cài Kext
Dùng một trong hai app Kext Utility hoặc Kext Wizard để cài kext:
+ Kext Utility: nhập pass rồi kéo thả file kext vào rồi đợi.
+ Kext Wizard: xem hình.

Cài DSDT:
Sau khi đã add layout-id vào DSDT, các bạn lưu lại file dưới định dạng .aml vào copy như sau:
Clover: EFI\Clover\ACPI\Patched\DSDT.aml.
Chameleon: Mac Volume\Extra\DSDT.aml.


home

views comments
Để có âm thanh trở lại sau mỗi lần update osx
Nếu đã từng dùng qua nhiều phiên bản OS X hack thì bạn sẽ không ngac nhiên khi nhận ra mỗi lần cập nhật lên một version mới, AppleHDA lại không hoạt động. Điều này rất dễ hiểu thôi, build mới thì kext mới, kext mới cài đè vào kext cũ nên kext đã patch không có tác dụng. 

Để khắc phục tình trạng này, bạn có thể cài đè lại kext patch cho phiên bản trước đó (roll back kext), tuy nhiên không phải lúc nào cách này cũng được. Việc roll back kext chỉ phát huy tác dụng trong trường hợp Apple không thay đổi binary của kext, nếu nó bị thay đổi ở một số chỗ nào đó thì dù bạn có cài lại bao nhiêu lần AppleHDA thì cái icon sound bé bé xinh xinh nó vẫn mờ.

Vì vậy, hôm nay mình viết bài hướng dẫn Re-patch kext AppleHDA, nhằm giúp các bạn khắc phục được vấn đề mất âm thanh sau mỗi lần cập nhật OS X. Như mình đã đề cập bên trên, việc âm thanh mất chủ yếu là do binary của kext bị thay đổi nên nói là re-patch cho oách thôi chứ thực ra là patch lại mỗi cái binary, các thứ khác chỉ việc copy paste lại là được. Cách làm đơn giản lém!

Yêu cầu:
  • AppleHDA đã hoạt động trên một version OS X nào đó từ 10.8 trở về sau và hiện các bạn vẫn còn giữ lại kext đó.
  • Hiểu và nắm bắt được một số thông tin cơ bản của AppleHDA.
  • Biết cách thao tác và sử dụng một số app trên OS X.
  • Công cụ: PlistEdit Pro (Dùng thử thôi cũng được) và patch-hda.zip.

Các bước: Xác định layout >> Chỉnh sửa info.plist >> Copy lại layout và platform >> Patch lại binary >> Cài kext.
Bonus: Patch AppleHDA on the fly - Update thoải mái không lo mất âm thanh.

Bước 1: Xác định layout (Bỏ qua nếu đã biết).

Layout dùng cho AppleHDA thường được inject qua DSDT/Bootloaders. Điều may mắn là những file này hoàn toàn không bị thay đổi khi cập nhật OS X, vậy nên, ở phiên bản cũ layout như thế nào thì phiên bản mới layout nó vẫn như thế.
Để xác định layout, bạn vào System Information >> Audio >> High Definition Audio >> Layout.



Bước 2: Chỉnh sửa info.plist.

  • Copy kext AppleHDA mới cập nhật từ System\Library\Extensions ra Desktop hoặc nơi nào đó khác để tiện chỉnh sửa.
  • Dùng app PlistEdit Pro mở 2 file info.plist của 2 kext AppleHDA (đã patch và chưa) tại đường dẫn: 
AppleHDA.kext\Contennts\Plugins\AppleHDAHardwareConfigDriver.kext\Contents\Info.plist\IOKitPersonalities/HDAConfigDefault.

  • Đến đây, kiểm tra tất cả các keys trong đó xem key nào có layout trùng với layout ở trên thì copy tất cả các giá trị trong đó sang Info.plist của kext mới.
  • Các keys còn lại các bạn có thể để lại hoặc không nhưng tốt hơn hết là xóa chúng đi, tránh việc trùng lặp layout.

Bước 3: Copy các file layout và platform sang kext mới.
  • Thao tác trên kext AppleHDA cũ: vào AppleHDA.kext/Contents/Resources copy 2 file Platforms.xml.zlibLayoutX.xml.zlib (X là số layout tương ứng với layoutID trong Info.plist).
  • Thao tác trên kext AppleHDA mới: vào AppleHDA.kext\Contents\Resources, paste 2 file vừa copy bên trên.
Bước 4: Patch binary.
  • Giải nén và copy thư mục patch-hda ra ngoài Desktop.
  • Trong Terminal, gõ lệnh như sau:

cd ~/desktop/patch-hda
./patch-hda.pl 10ec0282 (Thay 10ec0282 bằng DeviceID card sound của máy bạn).

  • Đợi một lúc cho đến khi nào nó báo patch successfully như trong hình, nhập mật khẩu admin nếu được yêu cầu (mật khẩu sẽ không hiện lên màn hình).

  • Vào System\Library\Extensions\AppleHDA.kext\Contents\MacOS, copy file AppleHDA paste đè vào thư mục MacOS tương ứng của kext ngoài Desktop.

Bước 5: Xong xuôi tất cả ta cài kext thôi ^_^.

******************************************************************
home

views comments
Kho kext appleHDA và 3 phương pháp để sử dụng, tối ưu hóa âm thanh trên hackintosh

AppleHDA.kext là driver quản lý âm thanh trong hệ điều hành Mac OS X. So với VoodooHDA thì AppleHDA hoàn toàn vượt trội trong việc đem đến chất lượng âm thanh cũng như đảm bảo tính ổn định cho hệ thống.

Hiện nay, phần lớn các codec sound phổ thông cho các dòng laptop/desktop đều đã được patch và các bạn có thể tìm thấy dễ dàng trên các forum trong cũng như ngoài nước. Bài viết này của mình không ngoài mục đích cung cấp cho các bạn cách tiếp cận các kext đã được patch sẵn đó, hướng dẫn sử dụng kext giúp các bạn tiết kiệm phần nào thời gian và công sức.

Mình xin chân thành cảm ơn Mirone, Vusun123, Pokenguyen, Bcc9, RehabMan cùng rất nhiều các cao thủ khác, những người đã patch kext cũng như đóng góp công sức để việc patch AppleHDA trở nên dễ dàng hơn!

Chào mừng các bạn đến với bài viết:

AppleHDA: 3 phương pháp tối ưu hóa âm thanh cho Hackintosh


Bài hướng dẫn gồm 2 phần chính như sau:

I. Tổng hợp các kext AppleHDA đã được patch sẵn.
II. Hướng dẫn sử dụng.
III. Kiểm tra tình trạng kext sau cài đặt.

I. Tổng hợp các kext AppleHDA đã được patch sẵn.


Hackintosh Vietnam Tool

Niềm tự hào của hackintosher Việt Nam là đây. Tool tổng hợp rất nhiều kext AppleHDA từ nhiều nguồn khác nhau, trong đó phần lớn các kext cho laptop do anh Sơn Huỳnh (Vusun123) patch.
Link:http://www.insanelymac.com/forum/files/file/210-hackintosh-vietnam-ultimate-aio-tool/

Kho AppleHDA cho Yosemite của Mirone

Một trong những cao thủ của làng Hackintosh thế giới, chuyên về patch AppleHDA. Mirone đã patch được rất nhiều kext cho cả laptop và desktop. Nhằm tôn trọng bản quyền tác giả, mình sẽ post link trực tiếp kho AppleHDA của Mirone chứ không re-up lại.
Link: https://github.com/Mirone

Kho AppleHDA của Toleda

Toleda cũng là một trong những người chơi Hackintosh rất giỏi. Kho AppleHDA của Toleda chủ yếu là dành cho các codec của Realtek (mã ALC XXX) dùng trên Desktop.
Các codecs hỗ trợ: ALC 269, ALC 283, ALC 885, ALC 887, ALC 889, ALC 892, ALC 898, ALC 1150.
Link: https://github.com/toleda/audio_RealtekALC

Chú ý: Kext AppleHDA của Toleda được cài bằng lệnh, mình sẽ hướng dẫn cách cài những kext này riêng.

Một số kext do mình tự patch

Trong quá trình support cho group, mình có hỗ trợ một số bạn patch AppleHDA, số lượng kext tuy không nhiều nhưng mình đều đã test cẩn thận. Đa số các kext mình patch cho Yosemite 10.10 trở lên, tuy nhiên, do sơ ý, một số kext mình quên không ghi lại phiên bản OS nên có thể khi các bạn cài vào sẽ không có sound (dù làm đúng hướng dẫn). Nếu rơi vào tình trạng như vậy, các bạn đọc bài này để biết cách cập nhật lại kext.

Update 20/10/2015: Kext ngừng update vô thời hạn do mình có việc bận nên tạm thời nghỉ chơi Hack. Các bạn có thể tham khảo bài này để có thể tự re-patch kext cho mình :).
Update 02/10/2015: Cập nhật tất cả các kext lên 10.11. Các version cũ hơn, vui lòng tìm tại ĐÂY.

Chú ý: Các kext ALC mình đều sử dụng layout 28 để patch.

II. Hướng dẫn sử dụng kext

Update 02/10/2015: 


  • Đối với OS X El Capitan 10.11, các bạn chỉnh lại config.plist tại Rt Variables để BootConfig là 0x28 và CsrActiveConfig là 0x67.
  • Cập nhật Clover bootloader lên phiên bản mới nhất.

1. Xác định tên codec dựa vào DeviceID


Các codec của Realtek thường có mã ALC XXX có thể được xác định dễ dàng thông qua DeviceID/CodecID trên Windows/Mac.
Trên Windows


Trên Mac
Dùng app DPCI Manager để xác định DeviceID/Codec ID của sound card.


Qua Codecdump


2. Xác định layout của kext


Khi các bạn down kext từ các nguồn trên về, tác giả đều có đính kèm những file text cung cấp các thông tin cơ bản về kext trong đó có layout.
Hackintosh Vietnam Tool: thông tin về layout được để trong phần mô tả bằng tiếng Anh.
Mirone: thông tin về layout được để trong file README/LEIA-ME.rtf.
Kext mình patch: thông tin về layout được để trong Resources\Kext Info.

Trong trường hợp bạn down kext từ một nguồn nào đó về nhưng tác giả lại không đề cập đến layout sử dụng, các bạn có thể biết được layout bằng cách vào:

AppleHDA.kext\Contents\PlugIns\AppleHDAHardwareConfigDriver.kext\Contents\info.plist.

Mở file Info.plist bằng PlistEdit Pro và tìm kiếm như hình dưới đây:

Lưu ý: Các layout được sử dụng phổ biến hiện này là 3, 4, 5, 7, 12 và 28.

3. Inject layout


Trên một hệ thống Mac Hack, muốn có âm thanh không phải cứ patch kext xong là có ngay. Bạn cần inject layout cho kext, hiểu đơn giản là cung cấp những thông tin cơ bản để máy nhận biết chip audio. Dưới đây, mình sẽ hướng dẫn 3 cách inject layout cho AppleHDA, trong đó, mình khuyến khích các bạn sử dụng cách thứ nhất là inject qua DSDT (sử dụng MacIASL); cách 2 và cách 3 về lý thuyết là được tuy nhiên mình chưa từng làm thử nên sẽ không thể hỗ trợ nhiều nếu các bạn sử dụng những cách này. Ngoài ra, cách 2 và cách 3 thông thường chỉ áp dụng cho những máy nào mà DSDT không có Device (HDEF).

Inject layout qua DSDT.
Trong MacIASL, thêm method _DSM vào Device (HDEF) có nội dung như sau:

Method (_DSM, 4, NotSerialized)
{
If (LEqual (Arg2, Zero))
{
Return (Buffer (One)
{
0x03
})
}

Return (Package (0x06)
{
"layout-id",
Buffer (0x04)
{
0x1C, 0x00, 0x00, 0x00
},

"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
},

"PinConfigurations",
Buffer (Zero) {}
})
}

Trong đoạn code trên thì phần quan trọng nhất là layout-id (chỗ mình in đậm và bôi đỏ). Tùy thuộc vào layout của kext mà các bạn sửa cho phù hợp. Layout có thể được điền vào dưới dạng hệ thập phân (hệ cơ số 10) hoặc hệ thập lục phân (hệ cơ số 16) đều được, tuy nhiên mình thường dùng hệ thập lục phân vì nó chuẩn theo ngôn ngữ chung của DSDT. Dưới đây là các layout thường được dùng cho AppleHDA:



Inject layout qua config.plist cho những ai sử dụng Clover bootloader
Mở config.plist bằng Clover Configurator, chuyển sang tab Devices và chỉnh như hình:


Inject layout qua chameleon.boot.plist cho những ai sử dụng Chameleon bootloader.
Mở org.chameleon.boot.plist bằng Chameleon Wizard và chỉnh như hình. Ngoài ra, khi cài bootloader cần chọn cài thêm module HDAEnabler nữa.


3. Cài kext và DSDT


Cài Kext
Dùng một trong hai app Kext Utility hoặc Kext Wizard để cài kext:
+ Kext Utility: nhập pass rồi kéo thả file kext vào rồi đợi.
+ Kext Wizard: xem hình.

Cài DSDT:
Sau khi đã add layout-id vào DSDT, các bạn lưu lại file dưới định dạng .aml vào copy như sau:
+ Clover: EFI\Clover\ACPI\Patched\DSDT.aml.
+ Chameleon: Mac Volume\Extra\DSDT.aml.

Chú ý: Tham khảo Guide for Newbie (phần 5) để biết thêm về cách patch DSDT. Trong nhiều trường hợp, bạn sẽ cần phải patch thêm cả HPET và IRQ thì mới lên audio.

HƯỚNG DẪN CÀI CÁC KEXT CỦA TOLEDA BẰNG LỆNH


Yêu cầu:
- Máy hiện đang cài các OS X 10.8 trở lên, dưới 10.8 không được hỗ trợ.
- Nếu đang dùng 10.11 El Capitan, rootless=1 là bắt buộc phải có trong boot-args, để BooterConfig 0x28 CsrActiveConfig 0x67.
- Nếu đang dùng 10.10.X Yosemite, kext-dev-mode=1 là bắt buộc phải có trong boot-args.

Cài đặt Kext:
- Tải về file audio_realtekALC-110.command (chọn View Raw để down)
- Giải nén và click đúp chuột vào file >> nhập password.
- Xác nhận tên codec ALC XXX (chỉ áp dụng cho các codec 885, 887, 888, 889, 892, 898, 1150).
- Xác nhận có bật audio HDMI cho card HD4600 hay không: gõ Y (Yes) hoặc N (No).
- Kiểm tra lại trong System\Libaray\Extensions xem kext đã được patch hay chưa.
- Khởi động lại và kiểm tra tình trạng các input/output.

III. Kiểm tra tình trạng kext sau cài đặt

Việc đầu tiên sau khi cài đặt là các bạn khởi động lại máy. Sau khi khởi động lại, sẽ xảy ra một trong hai trường hợp sau:
- Máy có âm thanh: nếu như vậy thì có thể nói là bạn đã thành công phần nào. Tiếp sau đó, bạn vào System Preferences/Sound và kiểm tra tình trạng nhận các thiết bị trong thẻ Input và Output.
- Máy không có âm thanh: restart lại từ 1-2 lần nữa để máy tiếp nhận đầy đủ thông tin của kext và DSDT. Nếu sau 1-2 lần restart mà vẫn chưa có, bạn kiểm tra lại layout và tình trạng load của kext như hình dưới, trong trường hợp có vấn đề, kiểm tra lại các bước trên xem mình đã làm đúng hết chưa.
Cuối cùng, nếu làm đi làm lại vẫn không được thì đã đến lúc bạn tự patch kext cho mình.


Chúc các bạn thành công!
~~~~~~~~~~~~~~~~~~~~THE END~~~~~~~~~~~~~~~~~~~~~~
AppleHDA.kext có thể được coi như là một chương trình quản lý âm thanh trong hệ điều hành Mac OS X, nó cho phép bạn bật/tắt hoặc tăng/giảm âm lượng, thu âm hoặc làm những thứ khác liên quan đến âm thanh. Nếu bạn mong muốn có những trải nghiệm thực thụ hệ điều hành táo khuyết thì AppleHDA là không thể thiếu.

Hiện nay, phần lớn các codec sound phổ thông cho các dòng laptop/desktop đều đã được patch và các bạn có thể tìm thấy dễ dàng trên các forum trong cũng như ngoài nước. Bài viết này của mình không ngoài mục đích cung cấp cho các bạn cách tiếp cận các kext đã được patch sẵn đó, hướng dẫn sử dụng kext giúp các bạn tiết kiệm phần nào thời gian và công sức.

Mình xin chân thành cảm ơn Mirone, Vusun123, Pokenguyen, Bcc9, RehabMan cùng rất nhiều các cao thủ khác, những người đã patch kext cũng như đóng góp công sức để việc patch AppleHDA trở nên dễ dàng hơn!

Bài hướng dẫn gồm 2 phần chính như sau:
I. Tổng hợp các kext AppleHDA đã được patch sẵn.
II. Hướng dẫn sử dụng.
III. Kiểm tra tình trạng kext sau cài đặt.

***************************************************************************************************************************************

I. Tổng hợp các kext AppleHDA đã được patch sẵn.

  • Hackintosh Vietnam Tool
Niềm tự hào của hackintosher Việt Nam là đây. Tool tổng hợp rất nhiều kext AppleHDA từ nhiều nguồn khác nhau, trong đó phần lớn các kext cho laptop do anh Sơn Huỳnh (Vusun123) patch.
Link:http://www.insanelymac.com/forum/files/file/210-hackintosh-vietnam-ultimate-aio-tool/
  • Kho AppleHDA cho Yosemite của Mirone
Một trong những cao thủ của làng Hackintosh thế giới, chuyên về patch AppleHDA. Mirone đã patch được rất nhiều kext cho cả laptop và desktop. Nhằm tôn trọng bản quyền tác giả, mình sẽ post link trực tiếp kho AppleHDA của Mirone chứ không re-up lại. 
Link: https://github.com/Mirone

  • Kho AppleHDA của Toleda
Toleda cũng là một trong những người chơi Hackintosh rất giỏi. Kho AppleHDA của Toleda chủ yếu là dành cho các codec của Realtek (mã ALC XXX) dùng trên Desktop.
Các codecs hỗ trợ: ALC 269, ALC 283, ALC 885, ALC 887, ALC 889, ALC 892, ALC 898, ALC 1150.
Link: https://github.com/toleda/audio_RealtekALC

Kext AppleHDA của Toleda được cài bằng lệnh, mình sẽ hướng dẫn cách cài những kext này riêng.


  • Một số kext do mình tự patch
Trong quá trình support cho group, mình có hỗ trợ một số bạn patch AppleHDA, số lượng kext tuy không nhiều nhưng mình đều đã test cẩn thận. Đa số các kext mình patch cho Yosemite 10.10 trở lên, tuy nhiên, do sơ ý, một số kext mình quên không ghi lại phiên bản OS nên có thể khi các bạn cài vào sẽ không có sound (dù làm đúng hướng dẫn). Nếu rơi vào tình trạng như vậy, các bạn đọc bài này để biết cách cập nhật lại kext.
ALC 233 - Asus TP550L series
ALC 233 - Sony Vaio Fit SVF15A13SGB
ALC 233 - Asus X550L series (Mic not work)
ALC 269VC - Sony Vaio SVE15133CVW
ALC 269VB - Acer Aspire V3-571 series
ALC 269 - Asus K43E
ALC 270 - Asus X45CC series
ALC 275 - Dell XPS 15 series
ALC 282 - Dell Inspiron 3421/3521 series
ALC 283 - Acer Aspire E5-572G (LineIn not work)
ALC 662 laptop
ALC 663 - Asus N56JN
Conexant 20590
IDT92HD87B1/3 - Dell Inspiron N4050

Chú ý: Các kext ALC mình đều sử dụng layout 28 để patch.

-----------------------------------------------------------------------------------------------

II. Hướng dẫn sử dụng kext

1. Xác định tên codec dựa vào DeviceID

Các codec của Realtek thường có mã ALC XXX có thể được xác định dễ dàng thông qua DeviceID/CodecID trên Windows/Mac.
  • Trên Windows

  • Trên Mac
Dùng app DPCI Manager để xác định DeviceID/Codec ID của sound card.

  • Qua Codecdump

2. Xác định layout của kext

Khi các bạn down kext từ các nguồn trên về, tác giả đều có đính kèm những file text cung cấp các thông tin cơ bản về kext trong đó có layout.
  • Hackintosh Vietnam Tool: thông tin về layout được để trong phần mô tả bằng tiếng Anh.
  • Mirone: thông tin về layout được để trong file README/LEIA-ME.rtf.
  • Kext mình patch: thông tin về layout được để trong Resources\Kext Info.

Trong trường hợp bạn down kext từ một nguồn nào đó về nhưng tác giả lại không đề cập đến layout sử dụng, các bạn có thể biết được layout bằng cách vào:

AppleHDA.kext\Contents\PlugIns\AppleHDAHardwareConfigDriver.kext\Contents\info.plist.

Mở file Info.plist bằng PlistEdit Pro và tìm kiếm như hình dưới đây:
Lưu ý: Các layout được sử dụng phổ biến hiện này là 3, 4, 5, 7, 12 và 28.

3. Inject layout 

Trên một hệ thống Mac Hack, muốn có âm thanh không phải cứ patch kext xong là có ngay. Bạn cần inject layout cho kext, hiểu đơn giản là cung cấp những thông tin cơ bản để máy nhận biết chip audio. Dưới đây, mình sẽ hướng dẫn 3 cách inject layout cho AppleHDA, trong đó, mình khuyến khích các bạn sử dụng cách thứ nhất là inject qua DSDT (sử dụng MacIASL); cách 2 và cách 3 về lý thuyết là được tuy nhiên mình chưa từng làm thử nên sẽ không thể hỗ trợ nhiều nếu các bạn sử dụng những cách này. Ngoài ra, cách 2 và cách 3 thông thường chỉ áp dụng cho những máy nào mà DSDT không có Device (HDEF).

  • Inject layout qua DSDT.
Trong MacIASL, thêm method _DSM vào Device (HDEF) có nội dung như sau:


Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x06)
                {
                    "layout-id", 
                    Buffer (0x04)
                    {
                        0x1C, 0x00, 0x00, 0x00
                    }, 

                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }, 

                    "PinConfigurations", 
                    Buffer (Zero) {}
                })
            }

Trong đoạn code trên thì phần quan trọng nhất là layout-id (chỗ mình in đậm và bôi đỏ). Tùy thuộc vào layout của kext mà các bạn sửa cho phù hợp. Layout có thể được điền vào dưới dạng hệ thập phân (hệ cơ số 10) hoặc hệ thập lục phân (hệ cơ số 16) đều được, tuy nhiên mình thường dùng hệ thập lục phân vì nó chuẩn theo ngôn ngữ chung của DSDT. Dưới đây là các layout thường được dùng cho AppleHDA:




  • Inject layout qua config.plist cho những ai sử dụng Clover bootloader
Mở config.plist bằng Clover Configurator, chuyển sang tab Devices và chỉnh như hình:


  • Inject layout qua chameleon.boot.plist cho những ai sử dụng Chameleon bootloader.
Mở org.chameleon.boot.plist bằng Chameleon Wizard và chỉnh như hình. Ngoài ra, khi cài bootloader cần chọn cài thêm module HDAEnabler nữa.


3. Cài kext và DSDT

  • Cài Kext
Dùng một trong hai app Kext Utility hoặc Kext Wizard để cài kext:
+ Kext Utility: nhập pass rồi kéo thả file kext vào rồi đợi.
+ Kext Wizard: xem hình.


  • Cài DSDT:
Sau khi đã add layout-id vào DSDT, các bạn lưu lại file dưới định dạng .aml vào copy như sau:
+ Clover: EFI\Clover\ACPI\Patched\DSDT.aml.
+ Chameleon: Mac Volume\Extra\DSDT.aml.

Chú ý: Tham khảo Guide for Newbie (phần 5) để biết thêm về cách patch DSDT. Trong nhiều trường hợp, bạn sẽ cần phải patch thêm cả HPETIRQ thì mới lên audio.



-----------------------------------------------------------------------------------------------



HƯỚNG DẪN CÀI CÁC KEXT CỦA TOLEDA BẰNG LỆNH

Yêu cầu:

- Máy hiện đang cài các OS X 10.8 trở lên, dưới 10.8 không được hỗ trợ.
- Nếu đang dùng 10.11 El Capitan, rootless=1 là bắt buộc phải có trong boot-args.
- Nếu đang dùng 10.10.X Yosemite, kext-dev-mode=1 là bắt buộc phải có trong boot-args.

Cài đặt Kext:

- Tải về file audio_realtekALC-110.command (chọn View Raw để down)
- Giải nén và click đúp chuột vào file >> nhập password.
- Xác nhận tên codec ALC XXX (chỉ áp dụng cho các codec 885, 887, 888, 889, 892, 898, 1150).
- Xác nhận có bật audio HDMI cho card HD4600 hay không: gõ Y (Yes) hoặc N (No).
- Kiểm tra lại trong System\Libaray\Extensions xem kext đã được patch hay chưa.
- Khởi động lại và kiểm tra tình trạng các input/output.

-----------------------------------------------------------------------------------------------
III. Kiểm tra tình trạng kext sau cài đặt
Việc đầu tiên sau khi cài đặt là các bạn khởi động lại máy. Sau khi khởi động lại, sẽ xảy ra một trong hai trường hợp sau:
- Máy có âm thanh: nếu như vậy thì có thể nói là bạn đã thành công phần nào. Tiếp sau đó, bạn vào System Preferences/Sound và kiểm tra tình trạng nhận các thiết bị trong thẻ Input và Output.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~THE END~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sự lan tỏa
0
0
0
Tìm kiếm trên trang web
Quảng cáo
Cẩm nang Hackintosh
search
lưu trữ blog
Bình luận mới nhất
Recent Comments Widget
Thống kê lượt truy cập
Giới thiệu

www.osx86vn.com Rất đơn giản thôi, nếu bạn lỡ đem lòng yêu nét đẹp, sự tinh tế trong từng đường nét, từng cửa sổ của OS X nhưng lại không có đủ kinh phí cho một máy tính Macintosh thực thụ, thì nơi đây dành cho bạn. HACKINTOSH - một giải pháp mang tính kinh tế nhưng song hành cùng với đó là sự tuyệt diệu của hệ điều hành Táo khuyết. Với HACKINTOSH, bạn đem điều kì diệu cho chính chiếc PC mình đang sử dụng. Và còn rất rất nhiều điều tuyệt vời khác nữa mà chúng tôi dành riêng để bạn trải nghiệm, tìm kiếm điều bí mật qua từng con chữ, từng hình ảnh nơi forum này..

Chúng tôi trên Facebook