Wednesday, July 3, 2024

Sửa lỗi audio với AppleALC

-

Kiểm tra bằng lệnh Kextstat.

Cách sửa lỗi âm thanh trên PC chạy macOS sử dụng Lilu và AppleALC. Để bắt đầu, chúng ta sẽ giả sử bạn đã cài đặt thành công Lilu và AppleALC.

Nếu bạn không chắc chắn chúng đã được cài đúng cách hay chưa, bạn có thể chạy lệnh sau trong Terminal để kiểm tra (điều này cũng sẽ kiểm tra xem AppleHDA đã được tải hay chưa vì nếu không có AppleHDA, thì AppleALC sẽ không có gì để sửa lỗi):

$ kextstat | grep -E "AppleHDA|AppleALC|Lilu"

Nếu cả ba tên “AppleHDA,” “AppleALC,” và “Lilu” đều xuất hiện trong kết quả, thì bạn đã làm đúng. Đồng thời, đảm bảo rằng VoodooHDA không tồn tại trên máy tính của bạn vì nếu có thì nó sẽ gây xung đột với AppleALC.

Xác định Layout ID cho âm thanh.

Phần này sẽ hướng dẫn cho các bạn xác định Layout ID cho âm thanh trên máy tính của bạn.

Kiểm tra codec âm thanh trên máy tính của bạn, ví dụ codec của bạn là ALC1220. Để xác minh codec, bạn có một số cách:

Kiểm tra trang thông số kỹ thuật và hướng dẫn của bo mạch chủ (mainboard) của bạn.

Kiểm tra trong Device Manager trên hệ điều hành Windows.

Sử dụng phần mềm HWInfo64 trên Windows. Đảm bảo bỏ chọn tùy chọn Summary-only và Sensors-only khi mở ứng dụng này để có thể xem chi tiết thông tin.

Sử dụng phần mềm AIDA64 Extreme trên Windows.

Trên hệ điều hành Linux, bạn có thể sử dụng lệnh “cat” trong Terminal để kiểm tra:

cat /proc/asound/card0/codec#0 | less

Sau khi xác định được codec của bạn, bạn cần tra cứu Layout ID tương ứng từ danh sách codec được hỗ trợ bởi AppleALC. Với danh sách này bạn có thể được tìm thấy trên trang web của AppleALC.

VendorCodecRevisions and layoutsMinKernelMaxKernel
AnalogDevicesAD1884layout 119 (10.5)
AnalogDevicesAD19840x100400, layout 1113 (10.9)
AnalogDevicesAD1984A0x100400, layout 11, 13, 4413 (10.9)
AnalogDevicesAD1988Alayout 1213 (10.9)
AnalogDevicesAD1988Blayout 5, 7, 1213 (10.9)
AnalogDevicesAD2000Blayout 5, 713 (10.9)
RealtekALC11500x100001, layout 1, 2, 3, 5, 7, 9912 (10.8)
RealtekALC12200x100101, 0x100003, layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 17, 18, 20, 21, 25, 27, 28, 29, 30, 34, 35, 98, 99, 10012 (10.8)
RealtekALC2150x100002, layout 1813 (10.9)
RealtekALC2210x100003, 0x100103, layout 11, 15, 8812 (10.8)
RealtekALC2220x100001, layout 11, 1212 (10.8)
RealtekALC225/ALC3253layout 28, 30, 33, 9013 (10.9)
RealtekALC230layout 13, 2013 (10.9)
RealtekALC233/ALC32360x100003, layout 3, 4, 5, 13, 21, 27, 28, 29, 32, 3313 (10.9)
RealtekALC235layout 3, 8, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 24, 28, 29, 33, 35, 36, 37, 72, 88, 9913 (10.9)
RealtekALC2360x100001, 0x100002, layout 3, 11, 12, 13, 14, 15, 16, 17, 18, 19, 23, 36, 54, 55, 69, 9913 (10.9)
RealtekALC245layout 11, 12, 1313 (10.9)
RealtekALC255/ALC3234layout 3, 11, 12, 13, 15, 17, 18, 20, 21, 22, 23, 27, 28, 29, 30, 31, 37, 66, 69, 71, 82, 86, 96, 99, 100, 25513 (10.9)
RealtekALC256/ALC32460x100002, layout 5, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 28, 33, 56, 57, 66, 67, 68, 69, 70, 76, 77, 88, 95, 97, 9913 (10.9)
RealtekALC2570x100001, layout 11, 18, 86, 96, 97, 99, 100, 10113 (10.9)
RealtekALC260layout 11, 1213 (10.9)
RealtekALC2620x100100, 0x100302, 0x100202, layout 7, 11, 12, 13, 14, 28, 6612 (10.8)
RealtekALC268layout 3, 119 (10.5)
RealtekALC269/ALC271X0x100203, 0x100004, 0x100202, 0x100100, layout 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 44, 45, 47, 55, 58, 66, 69, 76, 77, 88, 91, 93, 99, 100, 111, 127, 128, 138, 18812 (10.8)
RealtekALC2700x100100, layout 3, 4, 21, 27, 2813 (10.9)
RealtekALC2720x100001, 0x100002, layout 3, 12, 18, 2113 (10.9)
RealtekALC2740x100004, layout 21, 28, 35, 3913 (10.9)
RealtekALC2750x100008, 0x100005, layout 3, 13, 2813 (10.9)
RealtekALC280layout 3, 4, 11, 13, 15, 16, 17, 18, 2113 (10.9)
RealtekALC2820x100003, layout 3, 4, 13, 21, 22, 27, 28, 29, 30, 41, 43, 51, 69, 76, 86, 12712 (10.8)
RealtekALC283layout 1, 3, 11, 12, 13, 15, 44, 45, 66, 73, 8813 (10.9)
RealtekALC284layout 313 (10.9)
RealtekALC285layout 11, 21, 31, 52, 61, 66, 71, 8813 (10.9)
RealtekALC2860x100002, 0x100003, layout 3, 1113 (10.9)
RealtekALC287layout 11, 2113 (10.9)
RealtekALC288layout 3, 13, 2313 (10.9)
RealtekALC289layout 11, 12, 15, 23, 33, 69, 87, 93, 9913 (10.9)
RealtekALC290/ALC3241layout 3, 4, 10, 15, 2813 (10.9)
RealtekALC292layout 12, 15, 18, 28, 32, 55, 5913 (10.9)
RealtekALC293layout 11, 28, 29, 30, 3113 (10.9)
RealtekALC294layout 11, 12, 13, 15, 21, 22, 28, 44, 66, 9913 (10.9)
RealtekALC295layout 1, 3, 11, 13, 14, 15, 21, 22, 23, 24, 28, 7713 (10.9)
RealtekALC2980x100101, 0x100103, layout 3, 11, 13, 16, 21, 22, 28, 29, 30, 32, 33, 47, 66, 72, 9913 (10.9)
RealtekALC2990x100002, layout 21, 2213 (10.9)
RealtekALC6230x100000, layout 13, 2113 (10.9)
RealtekALC6620x100101, 0x100300, layout 5, 7, 11, 12, 13, 15, 16, 17, 18, 19, 6613 (10.9)
RealtekALC6630x100001, 0x100002, layout 3, 4, 15, 28, 9913 (10.9)
RealtekALC665layout 12, 1313 (10.9)
RealtekALC6680x100003, layout 3, 20, 27, 28, 2913 (10.9)
RealtekALC6700x100002, layout 1213 (10.9)
RealtekALC671layout 12, 15, 16, 8813 (10.9)
RealtekALC700layout 1113 (10.9)
RealtekALC882layout 5, 713 (10.9)
RealtekALC8830x100002, layout 7, 2013 (10.9)
RealtekALC8850x100101, 0x100103, layout 1, 12, 13, 15, 48, 50, 53, 56, 58, 60, 62, 63, 64, 65, 67, 70, 73, 7413 (10.9)
RealtekALC8870x100202, 0x100302, layout 1, 2, 3, 5, 7, 11, 12, 13, 17, 18, 20, 33, 40, 50, 52, 53, 87, 9913 (10.9)
RealtekALC888/ALC12000x100001, 0x100101, 0x100202, 0x100302, layout 1, 2, 3, 4, 5, 7, 11, 27, 28, 2913 (10.9)
RealtekALC8890x100004, layout 1, 2, 3, 11, 1213 (10.9)
RealtekALC891/ALC8670x100002, layout 11, 1312 (10.8)
RealtekALC8920x100302, layout 1, 2, 3, 4, 5, 7, 12, 15, 16, 17, 18, 20, 22, 23, 28, 31, 32, 90, 92, 97, 99, 10013 (10.9)
RealtekALC8970x100402, 0x100500, layout 11, 12, 13, 21, 23, 66, 69, 77, 98, 9913 (10.9)
RealtekALC898/ALC8990x100003, layout 1, 2, 3, 5, 7, 11, 13, 65, 66, 98, 99, 10113 (10.9)
RealtekALCS1200A0x100001, layout 1, 2, 3, 7, 11, 49, 50, 51, 52, 6912 (10.8)
RealtekALCS1220A0x100101, 0x100003, layout 1, 2, 3, 5, 7, 8, 11, 13, 15, 20, 2112 (10.8)
CreativeCA01320x100918, layout 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 9913 (10.9)
CirrusLogicCS42060x100103, 0x100301, 0x100302, layout 1, 3, 9, 11, 13, 18, 24, 28, 29, 31, 32, 33, 35, 39, 61, 71, 75, 76, 77, 78, 79, 81, 84, 91, 98, 99
CirrusLogicCS42100x100101, layout 1313 (10.9)
CirrusLogicCS42130x100100, layout 2813 (10.9)
ConexantCX205610x100000, layout 1113 (10.9)
ConexantCX20583layout 313 (10.9)
ConexantCX20585layout 3, 1313 (10.9)
ConexantCX20588layout 313 (10.9)
ConexantCX205900x100000, 0x100002, 0x100003, layout 3, 12, 13, 14, 2813 (10.9)
ConexantCX206320x100100, layout 20, 21, 23, 2813 (10.9)
ConexantCX20641layout 11, 1313 (10.9)
ConexantCX20642layout 11, 1313 (10.9)
ConexantCX20722layout 313 (10.9)
ConexantCX20724layout 3, 1313 (10.9)
ConexantCX20751/CX207520x100100, 0x100001, layout 3, 21, 2813 (10.9)
ConexantCX20753/CX20754layout 3, 14, 15, 2113 (10.9)
ConexantCX20755layout 313 (10.9)
ConexantCX20756layout 3, 1313 (10.9)
ConexantCX20757layout 3, 2813 (10.9)
ConexantCX8050layout 3, 1313 (10.9)
ConexantCX8070/CX11880layout 15, 2113 (10.9)
ConexantCX8150layout 21, 2213 (10.9)
ConexantCX8200layout 3, 15, 21, 23, 8013 (10.9)
ConexantCX8400layout 12, 1313 (10.9)
IDTIDT92HD66C3/65layout 313 (10.9)
IDTIDT92HD71B7Xlayout 313 (10.9)
IDTIDT92HD73C1X5layout 19, 2113 (10.9)
IDTIDT92HD73E1X5layout 1513 (10.9)
IDTIDT92HD75B2X5layout 313 (10.9)
IDTIDT92HD75B3X5layout 313 (10.9)
IDTIDT92HD81B1C5layout 3, 1113 (10.9)
IDTIDT92HD81B1X5layout 3, 11, 12, 20, 21, 2813 (10.9)
IDTIDT92HD87B1layout 313 (10.9)
IDTIDT92HD87B1/30x100205, layout 12, 1313 (10.9)
IDTIDT92HD87B2/4layout 1313 (10.9)
IDTIDT92HD90BXXlayout 3, 1213 (10.9)
IDTIDT92HD91BXX0x100102, 0x100303, layout 3, 12, 13, 33, 8413 (10.9)
IDTIDT92HD93BXX0x100203, layout 1213 (10.9)
IDTIDT92HD95layout 11, 12, 1413 (10.9)
IDTIDT92HD99BXXlayout 313 (10.9)
SigmaTelSTAC92000x102201, layout 118 (10.4)
SigmaTelSTAC92050x100204, layout 118 (10.4)
SigmaTelSTAC9872AK0x100201, layout 1212 (10.8)
VIAVT17050x100000, layout 2113 (10.9)
VIAVT18020x100000, layout 3, 33, 6513 (10.9)
VIAVT2020/VT20210x100100, layout 5, 7, 9, 1313 (10.9)

Controllers patches

VendorPatch for not nativeDeviceModelMinKernelMaxKernel
NVIDIANVIDIA HDMI for GK107 in 10.13.4+0x0E1B17 (10.13)
NVIDIANVIDIA HDMI for GK208 in 10.13.4+0x0E0F17 (10.13)
NVIDIANVIDIA HDMI for GM200 in 10.13.4 – 10.13.60x0FB017 (10.13)17 (10.13)
NVIDIANVIDIA HDMI for GP108 in 10.13.4 – 10.13.60x0FB817 (10.13)17 (10.13)
NVIDIANVIDIA HDMI for GP107 in 10.13.4 – 10.13.60x0FB917 (10.13)17 (10.13)
NVIDIANVIDIA HDMI for GM206 in 10.13.4 – 10.13.60x0FBA17 (10.13)17 (10.13)
NVIDIANVIDIA HDMI for GM204 in 10.13.4 – 10.13.60x0FBB17 (10.13)17 (10.13)
NVIDIANVIDIA HDMI for GM107 in 10.13.4 – 10.13.60x0FBC17 (10.13)17 (10.13)
NVIDIANVIDIA HDMI for GP102 in 10.13.4 – 10.13.60x10EF17 (10.13)17 (10.13)
NVIDIANVIDIA HDMI for GP104 in 10.13.4 – 10.13.60x10F017 (10.13)17 (10.13)
NVIDIANVIDIA HDMI for GP106 in 10.13.4 – 10.13.60x10F117 (10.13)17 (10.13)
AMDAMD R9 290X HDMI0xAAC815 (10.11)
AMDAMD R9 Fury HDMI Audio0xAAE815 (10.11)
AMDAMD Vega-M HDMI0xAB0815 (10.11)
AMDZENAMD Zen Audio Controller 0x14570x1457
AMDZENAMD Zen Audio Controller 0x14870x1487
AMDZENAMD Zen Audio Controller 0x15E30x15E3
IntelHD4600 HDMI Audio0x0C0C13 (10.9)
IntelAtom Z36xxx/Z37xxx Audio Controller0x0F0413 (10.9)
IntelZ97 HDEF controller in 10.90x8CA013 (10.9)13 (10.9)
IntelX99 HDEF controller 0x8D200x8D2013 (10.9)
IntelX99 HDEF controller 0x8D210x8D2113 (10.9)
Intel100 Series (0xA170) Mobile PCH HD Audio0xA170Laptop15 (10.11)
IntelWhiskeyLake Mobile PCH HD Audio0x9DC8Laptop16 (10.12)
IntelIntel NUC8 PCH HD Audio0x9DC8Desktop16 (10.12)
Intel200 Series (0xA171) Mobile PCH HD Audio0xA171Laptop15 (10.11)
IntelIntel NUC8i7HVK 200 Series PCH HD Audio0xA171Desktop16 (10.12)
Intel200 Series PCH HD Audio0xA2F016 (10.12)
Intel300 Series PCH HD Audio in 10.12 – 10.130xA34816 (10.12)17 (10.13)
IntelC620 Series PCH HD Audio0xA1F019 (10.15)
Intel400 Series(0xA3F0) PCH HD Audio0xA3F019 (10.15)
Intel400 Series PCH HD Audio0x06C819 (10.15)
Intel400 Series(0xF1C8) PCH HD Audio0xF1C819 (10.15)
Intel400 Series PCH-LP HD Audio0x02C819 (10.15)
IntelIcelake Smart Sound Technology Audio Controller0x34C819 (10.15)
Intel500 Series(0xF0C8) PCH HD Audio0xF0C819 (10.15)
Intel500 Series(0x43C8) PCH HD Audio0x43C817 (10.13)
Intel600 Series(0x7AD0) PCH HD Audio0x7AD019 (10.15)
IntelAlder Lake PCH-P High Definition Audio Controller (0x51C8)0x51C819 (10.15)
Intel700 Series(0x7A50) PCH HD Audio0x7A5019 (10.15)

Bạn có thể cập nhật các danh sách mới hơn từ trang https://github.com/acidanthera/AppleALC/wiki/Supported-codecs.

Ví dụ, nếu bạn có codec ALC1220, bạn sẽ thấy danh sách các Layout ID hỗ trợ cho codec đó như sau:

0x100003, layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34
  • Từ danh sách này, bạn có thể biết được hai điều quan trọng:
  • Phiên bản phần cứng nào hỗ trợ (0x100003), thông thường chỉ cần quan tâm khi danh sách có nhiều phiên bản khác nhau với các Layout ID khác nhau.
  • Các Layout ID được hỗ trợ bởi codec của bạn (ví dụ: layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34).

Hoặc ví dụ máy của mình đang sử dụng Mainboard H81 Pro BTC https://www.asrock.com/mb/intel/h81%20pro%20btc/.

Nếu tra theo bảng trên khi sử dụng card âm thanh là ALC662 thì bạn có thể thử các Layout ID như dưới đây.

0x100101, 0x100300, layout 5, 7, 11, 12, 13, 15, 16, 17, 18, 19, 66

Dựa trên danh sách Layout ID được hỗ trợ, bạn có thể thử các Layout ID này để xem cái nào hoạt động tốt nhất cho máy tính của bạn.

Lưu ý:
Nếu codec âm thanh của bạn là ALC 3XXX, có thể có trường hợp mã ALC này là thông tin sai lệch và chỉ khả năng nó là một tên gọi khác của drive audio, vì vậy bạn cần tìm hiểu để biết được tên thực sự của drive này.

Kiểm tra Layout ID của bạn.

Để kiểm tra các Layout ID, bạn sẽ sử dụng boot-arg alcid=xxx trong file config.plist của máy tính của bạn, trong đó xxx là mã Layout ID bạn muốn thử.

Dưới đây là hướng dẫn cơ bản:

  • Mở file config.plist trên máy tính của bạn. Thường nó nằm trong EFI hoặc Clover thư mục của hệ điều hành macOS của bạn.
  • Trong config.plist bạn điều hướng đến NVRAM (NVRAM > Add > 7C436110-AB2A-4BBB-A880-FE41995C9F82).
  • Tạo hoặc chỉnh sửa mục boot-args dưới dạng chuỗi (String) và đặt giá trị là “alcid=xxx”, trong đó xxx là mã Layout ID bạn muốn kiểm tra.
  • Ví dụ, nếu bạn muốn thử Layout ID 11, bạn sẽ đặt giá trị của boot-args là “alcid=11”.
  • Lưu và thoát khỏi file config.plist.
  • Khởi động lại máy tính của bạn và kiểm tra âm thanh xem nó đã hoạt động với Layout ID bạn đã chọn chưa. Nếu không thành công, bạn có thể thử lại với một Layout ID khác bằng cách thay đổi giá trị của boot-args.

Dưới đây là cấu trúc dẫn tới boot-args trong file config.plist.

config.plist
├── NVRAM
  ├── Add
    ├── 7C436110-AB2A-4BBB-A880-FE41995C9F82
          ├── boot-args | String | alcid=11

Nếu không có mã Layout ID nào hoạt động, bạn có thể cần tạo SSDT-HPET fixes cho hệ thống của mình. Điều này thường cần thiết trên các laptop và một số máy tính để bàn để AppleHDA hoạt động đúng cách.

Making Layout ID more permanent.

Sau khi bạn đã tìm ra Layout ID hoạt động với máy tính của bạn, bạn có thể tạo một giải pháp cố định hơn để đặt Layout ID gần giống với cách các máy Mac giống như đang sử dụng Layout ID của họ. AppleALC có một ưu tiên về cách xác định Layout ID như sau:

  • alc-id=xxx trong boot-arg: Giúp cho mục đích gỡ lỗi và ghi đè lên tất cả các giá trị khác.
  • alc-layout-id trong DeviceProperties: Nên chỉ được sử dụng trên các máy tính Apple chính hãng.
  • layout-id trong DeviceProperties: Nên sử dụng cho cả máy tính Apple và máy tính không phải của Apple.

Để bắt đầu, chúng ta cần tìm xem drive âm thanh của chúng ta nằm ở đâu trên bản đồ PCI. Đối với điều này, chúng tôi sẽ sử dụng một công cụ tiện dụng có tên gfxutil (mở cửa sổ mới) sau đó với thiết bị đầu cuối macOS:

Ví dụ ở máy mình.

$ /Users/hoanghd/Downloads/gfxutil-1.83b-RELEASE/gfxutil -f HDEF
00:1b.0 8086:8c20 /PCI0@0/HDEF@1B = PciRoot(0x0)/Pci(0x1B,0x0)

Sau đó thêm PciRoot này với id bố cục con vào config.plist của bạn trong DeviceProperties -> Add:

Lưu ý rằng AppleALC có thể chấp nhận cả số thập phân và số thập lục phân. Thông thường, sử dụng số thập lục phân là phương pháp tốt nhất vì bạn tránh các bước chuyển đổi không cần thiết.

Bạn có thể sử dụng công cụ online (nhấp để mở cửa sổ mới) hoặc sử dụng công cụ có sẵn trên terminal của MacOS. Ví dụ dưới đây là ví dụ cách chuyển đổi từ số thập phân sang số thập lục phân bằng lệnh Terminal trên macOS:

printf '%x\n' <giá trị>

Trong ví dụ này, bạn muốn chuyển đổi giá trị alcid=11 thành một giá trị dạng layout-id. Có hai cách để làm điều này, sử dụng dạng Data hoặc Number:

  • Sử dụng dạng Data:
    • Giá trị layout-id sẽ được biểu diễn dưới dạng HEX/Data, ví dụ: <0B000000>. Ở đây, “0B” là giá trị layout-id ở dạng số thập lục phân.
  • Sử dụng dạng Number:
    • Giá trị layout-id sẽ được biểu diễn dưới dạng Number, ví dụ: <11>. Trong trường hợp này, bạn sử dụng số thập phân trực tiếp.

Chú ý rằng giá trị HEX/Data hoặc Number cần có tổng cộng 4 byte. Ví dụ, nếu bạn có layout-id vượt qua 255, bạn cần chắc chắn rằng các byte được hoán đổi. Ví dụ: 256 sẽ trở thành 00 01 00 00.

Nếu bạn sử dụng cách chuyển đổi sang số thập phân (Decimal/Number), bạn không cần quan tâm đến việc hoán đổi byte và kích thước dữ liệu. Tuy nhiên, bạn phải loại bỏ boot-arg alcid=11 sau khi đã đặt giá trị layout-id trong DeviceProperties, vì alcid luôn có ưu tiên cao nhất và AppleALC sẽ bỏ qua các mục khác như trong DeviceProperties.

Miscellaneous issues.

Dưới đây là một số vấn đề phức tạp và cách giải quyết chúng khi sử dụng AppleALC ở các PC chạy hệ điều hành macOS hackintosh:

  • Không có Micro trên AMD:
    • Vấn đề này thường xảy ra khi sử dụng AppleALC trên các máy tính chạy chip AMD. Hiện tại, chưa có các bản vá cụ thể để hỗ trợ Micro. Một giải pháp “tốt nhất” là mua một USB DAC/Mic hoặc sử dụng phương pháp VoodooHDA.kext. Tuy nhiên, cần lưu ý rằng VoodooHDA có thể không ổn định và chất lượng âm thanh kém hơn so với AppleALC.
  • Cùng Layout ID từ Clover nhưng không hoạt động trên OpenCore:
    • Vấn đề này có thể do xung đột IRQ (Interrupt Request) giữa các thiết bị trên máy tính. Trong Clover, có một số bản vá ACPI tự động được áp dụng. Để sửa lỗi này, bạn có thể sử dụng tùy chọn FixHPET trong công cụ SSDTTime để xử lý nhiều trường hợp. Trong trường hợp lạ, khi RTC và HPET cùng sử dụng IRQ từ các thiết bị khác như USB và âm thanh, bạn có thể tham khảo ví dụ về bản vá ACPI của HP Compaq DC7900.
  • Kernel Panic khi thay đổi trạng thái nguồn trong macOS 10.15:
    • Để giải quyết sự cố Kernel Panic khi có sự thay đổi về trạng thái nguồn (power state) trong macOS 10.15, bạn có thể kích hoạt tùy chọn PowerTimeoutKernelPanic trong file config.plist của bạn.
      • Mở config.plist.
      • Điều hướng đến Kernel -> Quirks -> PowerTimeoutKernelPanic.
      • Đặt giá trị thành True.

Lưu ý rằng việc giải quyết các vấn đề phức tạp như vậy có thể yêu cầu hiểu biết sâu rộng về cách làm việc của máy tính hackintosh và có thể đòi hỏi thời gian và nỗ lực đáng kể.

Kiểm tra xem bạn sử dụng đúng kext không?

Để kiểm tra xem bạn đã cài đặt Lilu và AppleALC đúng cách hay chưa, bạn có thể thực hiện các bước sau bằng cách sử dụng Terminal. Chạy lệnh sau để kiểm tra xem các kexts (tiện ích mở rộng kernel) Lilu, AppleALC và AppleHDA có được tải và hoạt động đúng cách:

kextstat | grep -E "AppleHDA|AppleALC|Lilu"
  • Nếu tất cả ba kexts này xuất hiện trong kết quả, điều này có nghĩa rằng bạn đã cài đặt chúng đúng cách và chúng đang hoạt động.
  • Đảm bảo rằng bạn không cài đặt các kexts khác có thể gây xung đột hoặc gây sự cố. Các kexts mà bạn không nên cài đặt bao gồm:
    • RealtekALC.kext
    • CloverALC.kext
    • VoodooHDA.kext
    • HDA Blocker.kext
    • HDAEnabler#.kext (# có thể là 1, 2 hoặc 3)
  • Hãy đảm bảo rằng kext VoodooHDA không được cài đặt, vì nó có thể gây xung đột với AppleALC.

Việc kiểm tra này giúp bạn xác định xem cài đặt và tải các kexts Lilu và AppleALC đã được thực hiện đúng cách trên hệ thống của bạn. Nếu bạn thấy rằng Lilu và AppleALC không xuất hiện trong hệ thống của bạn, dưới đây là các bước bạn có thể thực hiện để khắc phục sự cố:

  • Kiểm tra file log của OpenCore: Trong file log của OpenCore, bạn có thể xem xét liệu Lilu và AppleALC có được vá (inject) vào hệ thống đúng cách hay không.
  • Ví dụ log như sau:
14:354 00:020 OC: Prelink injection Lilu.kext () - Success
14:367 00:012 OC: Prelink injection AppleALC.kext () - Success
  • Nếu bạn thấy “Success” trong log, điều này có nghĩa rằng Lilu và AppleALC đã được vá thành công. Nếu bạn thấy “Invalid Parameter” hoặc bất kỳ thông báo lỗi nào khác, điều này có thể là nguyên nhân khiến nó không hoạt động.
  • Kiểm tra thứ tự vá (injection order): Đảm bảo rằng Lilu được đặt trước AppleALC trong danh sách kexts. OpenCore sử dụng thứ tự vá để xác định thứ tự mà các kexts được vá vào kernel, vì vậy đặt Lilu trước AppleALC có thể giúp đảm bảo rằng nó được vá trước và có thể chạy đúng cách.
  • Cập nhật tất cả các kexts: Đảm bảo rằng tất cả các kexts trên hệ thống của bạn đều là phiên bản mới nhất. Điều này đặc biệt quan trọng đối với các plugin Lilu, vì phiên bản không phù hợp có thể gây ra sự cố. Hãy cập nhật kexts và xem xét sử dụng phiên bản mới nhất.
  • Ghi log vào file (file logging): Nếu bạn muốn ghi log vào file để dễ dàng theo dõi, bạn có thể tham khảo OpenCore Debugging để biết cách thiết lập file logging.

Nếu bạn thực hiện các bước trên và vẫn gặp vấn đề, bạn có thể cần tham khảo các nguồn thông tin và cộng đồng hackintosh để tìm kiếm giải pháp cụ thể cho trường hợp của bạn.

Note: Để cài đặt logging, xem tại OpenCore Debugging.

Kiểm tra xem AppleALC có được vá chính xác không.

Với AppleALC, một trong những điều dễ dàng nhất để kiểm tra xem việc vá lỗi có được thực hiện đúng hay không là xem drive âm thanh của bạn có được đổi tên chính xác hay không. Sử dụng IORegistryExplorer (mở cửa sổ mới) và xem bạn có thiết bị tên HDEF không:

Trong hình ảnh trên, chúng ta chú ý các điểm sau:

  • HDEF Device: Phần này cho thấy rằng quá trình đổi tên (rename) đã được thực hiện thành công và drive âm thanh đã được đặt thành HDEF. Điều này quan trọng để đảm bảo rằng AppleALC có thể tìm thấy và tương tác với thiết bị âm thanh.
  • AppleHDAController attached: Phần này cho thấy rằng drive âm thanh của Apple (AppleHDA) đã được kết nối thành công. Điều này là quan trọng để AppleALC có dữ liệu để làm việc và áp dụng các bản vá cần thiết cho hệ thống.
  • alc-layout-id: Đây là một thuộc tính (property) thể hiện rằng việc vá boot-arg/DeviceProperty đã được thực hiện thành công. Giá trị 07000000 tương ứng với một Layout ID mặc định. Chú ý rằng giá trị alc-layout-id sẽ ghi đè lên giá trị layout-id mặc định và đây sẽ là Layout ID mà AppleHDA sẽ sử dụng.
Lưu ý:
Không nên tự đổi lại tên (rename) drive âm thanh của bạn một cách thủ công, vì điều này có thể gây ra vấn đề do AppleALC đã cố gắng tiến hành các bản vá. Hãy để AppleALC hoàn thiện công việc của nó.

Hình ảnh với Layout ID chính xác.

Hình ảnh với Layout ID không chính xác.


Như bạn đã mô tả, hình ảnh ở dưới thiếu rất nhiều thiết bị AppleHDAInput, điều này ngụ ý rằng AppleALC không thể kết hợp các cổng vật lý trên hệ thống của bạn với các thiết bị mà nó có thể hiểu và đưa ra âm thanh. Điều này đồng nghĩa rằng bạn cần thực hiện một số công việc để tìm ra Layout ID (mã Layout) phù hợp cho hệ thống của bạn.

Tìm Layout ID đúng là quá trình quan trọng để đảm bảo rằng các cổng âm thanh trên máy tính của bạn hoạt động chính xác và bạn có âm thanh từ các thiết bị đầu vào và đầu ra như bạn mong muốn. Thông thường, bạn cần kiểm tra các Layout ID được hỗ trợ cho chip âm thanh của bạn và thử từng mã một để xem cái nào hoạt động tốt nhất.

Có thể cần thực hiện nhiều kiểm tra và điều chỉnh để đạt được kết quả tốt nhất. Hãy tham khảo tài liệu và nguồn thông tin của cộng đồng hackintosh để tìm hiểu cách xác định Layout ID phù hợp cho hệ thống của bạn.

Kiểm tra xem AppleHDA có phải là bản gốc hay không?

Kiểm tra xem AppleHDA có phải là bản gốc (vanilla) hay không rất quan trọng, đặc biệt đối với những người đã thay thế AppleHDA gốc bằng phiên bản tùy chỉnh. Bạn có thể sử dụng lệnh sau để kiểm tra xem AppleHDA của bạn có phải là phiên bản gốc hay không:

sudo kextcache -i / && sudo kextcache -u /

Lệnh trên sẽ kiểm tra tính hợp lệ của chữ ký (signature) cho AppleHDA. Nếu chữ ký không hợp lệ, điều này có nghĩa rằng bạn sẽ cần có một bản sao chính hãng của AppleHDA dành cho hệ thống của bạn và thay thế nó, hoặc cập nhật macOS (kexts sẽ được xóa trong quá trình cập nhật). Vấn đề này thường chỉ xảy ra khi bạn đã tự tiến hành các bản vá cho AppleHDA, vì vậy nếu đây là một cài đặt mới, thì có khả năng rất thấp bạn sẽ gặp vấn đề về chữ ký.

AppleALC hoạt động không đồng nhất.

Nếu bạn gặp tình trạng AppleALC hoạt động không đồng nhất và âm thanh không xuất ra đôi khi, có thể do điều kiện hiếm hoi khi phần cứng của bạn không được khởi tạo đúng lúc cho AppleHDAController, dẫn đến không có âm thanh. Để khắc phục vấn đề này, bạn có thể thực hiện các bước sau:

  • Xác định thời gian trễ bằng boot-args:
    • Sử dụng lệnh boot-args để chỉ định thời gian trễ. Ví dụ:
alcdelay=1000
  • Trong trường hợp này, bạn đang xác định một thời gian trễ 1000 ms (1 giây) cho AppleHDAController. Lưu ý rằng thời gian trễ ALC không được vượt quá 3000 ms.

Xác định thời gian trễ thông qua DeviceProperties (trong thiết bị HDEF):

  • Sử dụng DeviceProperties để xác định thời gian trễ. Điều này có thể thực hiện trong file config.plist của bạn.
  • Thêm thuộc tính sau vào thiết bị HDEF:
alc-delay | Number | 1000
  • Tương tự như trên, giá trị 1000 ở đây đại diện cho thời gian trễ 1000 ms.

Việc xác định thời gian trễ giúp đảm bảo rằng AppleHDAController được khởi động đúng lúc và hệ thống của bạn có thể xuất âm thanh một cách đáng tin cậy.

Trường hợp sử dụng 2 card âm thanh.

Nếu bạn đang sử dụng hai card âm thanh (ví dụ: Realtek tích hợp và một thẻ PCIe ngoại vi) và bạn muốn tránh cho AppleALC patch những thiết bị mà bạn không sử dụng hoặc không cần patch (ví dụ: thẻ PCIe gốc), bạn có thể thực hiện các bước sau. Điều này quan trọng đặc biệt nếu bạn gặp tình trạng AppleALC không patch được drive âm thanh tích hợp khi card âm thanh gắn thêm cũng tồn tại.

  • Xác định vị trí của các drive âm thanh:
    • Đầu tiên, bạn cần xác định vị trí của cả hai drive âm thanh (onboard và thẻ PCIe). Một cách dễ nhất là chạy công cụ gfxutil và tìm kiếm các ID PCI của chúng.
    • Sử dụng lệnh sau để chạy gfxutil:
/path/to/gfxutil

Sau đó, tìm kiếm PciRoot pathing cho cả hai drive. Ví dụ, bạn có thể tìm kiếm PCI ID cho thẻ PCIe Creative Sound-Blaster AE-9PE (ví dụ: 1102:0010) trong đầu ra của gfxutil để xác định PciRoot pathing của nó.

66:00.0 1102:0010 /PC02@0/BR2A@0/SL05@0 = PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)

Từ đây chúng ta có thể thấy rõ đường dẫn PciRoot của mình là:

PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)

Sau khi bạn đã xác định được đường dẫn PciRoot của mình, bạn có thể mở file config.plist của mình và thêm patch. Dưới đây là cách bạn có thể thực hiện điều này:

  • Mở file config.plist của bạn bằng một trình soạn thảo văn bản hoặc công cụ chỉnh sửa plist.
  • Điều hướng đến mục DeviceProperties -> Add (nếu mục này không tồn tại, bạn có thể tạo nó).
  • Thêm PciRoot (với giá trị PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0) – giá trị này phải trùng khớp với PciRoot pathing bạn đã xác định từ công cụ gfxutil).
  • Dưới PciRoot, thêm external-audio với giá trị là Data và có giá trị là 01.

Cấu trúc này trong file config.plist cho phép bạn chỉ định rằng AppleALC sẽ bỏ qua việc patch bộ điều khiển âm thanh bên ngoài. Sau khi bạn đã thêm patch này, bạn có thể lưu và đóng file config.plist, sau đó khởi động lại hệ thống của bạn. Khi bạn khởi động lại, AppleALC nên bỏ qua bộ điều khiển âm thanh bên ngoài của bạn.

DeviceProperties
| --- > Add
 | --- > PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)
  | ----> external-audio | Data | 01

Lưu ý rằng để thực hiện việc xác định vị trí của drive âm thanh gắn thêm, bạn cần biết cả Vendor ID (ID Nhà sản xuất) và Device ID (ID Thiết bị) của card âm thanh gắn thêm. Dưới đây là một số Vendor ID phổ biến để bạn tham khảo:

  • Creative Labs: 1102
  • AsusTek: 1043

Cần lưu ý rằng thông tin ACPI và PciRoot pathing của bạn có thể khác nhau, do đó, bạn nên chú ý đến kết quả đầu ra của công cụ gfxutil của PC để xác định chính xác vị trí của drive âm thanh.

  • Mở file config.plist của bạn bằng một trình soạn thảo văn bản hoặc công cụ chỉnh sửa plist.
  • Điều hướng đến mục DeviceProperties -> Add (nếu mục này không tồn tại, bạn có thể tạo nó).
  • Thêm PciRoot với giá trị PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0) (giá trị này phải trùng khớp với PciRoot pathing bạn đã xác định từ công cụ gfxutil).
  • Dưới PciRoot, thêm external-audio với giá trị là Data và có giá trị là 01.

Cấu trúc này trong file config.plist cho phép bạn chỉ định rằng drive âm thanh bên ngoài không cần được patch. Sau khi bạn đã thêm patch này, bạn có thể lưu và đóng file config.plist, sau đó khởi động lại hệ thống của bạn để áp dụng cài đặt.

Những bước này giúp bạn quản lý việc patch drive âm thanh trên máy tính có nhiều card âm thanh một cách linh hoạt và tránh việc patch những drive không cần thiết.

Mất âm thanh khi khởi động lại từ Windows vào macOS.

Nếu bạn gặp vấn đề khi khởi động lại từ Windows vào macOS và âm thanh bị ngắt, có một số cách bạn có thể thử để khắc phục vấn đề này:

Thêm alctcsel=1 vào boot-args:

Bạn có thể thêm alctcsel=1 vào danh sách boot-args trong file config.plist của bạn. Điều này sẽ cố gắng sử dụng giá trị thời gian tương thích với AppleALC sau khi bạn đã khởi động lại từ Windows.

DeviceProperties
| --- > Add
 | --- > PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)(Adjust to your device)
  | ----> alctcsel | Data | 01000000

Thêm thuộc tính alctcsel vào thiết bị âm thanh trong DeviceProperties:

Trong mục DeviceProperties của file config.plist, bạn có thể thêm thuộc tính alctcsel cho thiết bị âm thanh của bạn. Điều này có thể giúp điều chỉnh thời gian và khắc phục vấn đề âm thanh sau khi bạn khởi động lại từ Windows.

Cả hai cách trên đều giúp đảm bảo rằng âm thanh hoạt động đúng cách sau khi bạn chuyển từ Windows sang macOS. Hãy lựa chọn cách bạn thấy phù hợp nhất và thêm cấu hình tương ứng vào tệp config.plist của bạn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories