Apr 2, 2018

Phần 4: Hackintosh thực hành patch DSDT cổng USB

April 02, 2018 Posted by Tô Hùng Dương

Cổng USB phải là điều bạn quan tâm đầu tiên bởi vì bộ cài sẽ được cắm vào cổng này. Thực hành patch DSDT cho cổng USB cũng rất điển hình, từ sau guide này level bạn sẽ lên một bậc. Cho tiện thì mình sẽ gọi chung ổ USB, ổ cứng di động là USB.
Mình nhắc lại điều đã nói ở Phần 1: "Hãy gạt bỏ những suy nghĩ và phương pháp mà trước giờ bạn thường sử dụng để đọc bài này".  Mình cam đoan nếu như bạn bỏ qua Phần 1, Phần 2Phần 3 thì đọc Phần 4 này bạn sẽ không hiểu gì cả.
Các bài hướng dẫn tràn lan đang dẫn dắt bạn theo hướng "cài lấy được":
* Bạn không hiểu vì sao lại làm thế dẫn tới suy nghĩ không cần phải biết chỉ cần làm theo.
* Lâu ngày sẽ sinh tâm lý không muốn tìm hiểu thêm, trốn tránh các bước khó càng nhiều càng tốt, bạn tìm lý do để bao biện cho việc lười biếng này, 2 trong số đó là:
*phải là dân IT, phải là dân lập trình mới fix được lỗi của DSDT.
*phải có kiến thức, có kinh nghiệm mới chơi được Hackintosh. 

Điều này là sai, mình khẳng định là sai.
Bạn không trốn tránh mãi được, mình và chuỗi bài viết của mình sẽ giúp bạn đối mặt với khó khăn thay vì né tránh nó.
Lỗi "cấm đi ngược chiều" thần thánh do không nhận USB.


So sánh nhỏ:
Cách patch DSDT kiểu cũ để xử lý vấn đề USB như này:
Đầu tiên bạn phải tải các file công cụ về rồi tiến hành:
Bước 1) dịch file DSDT.aml ra DSDT.asl,
Bước 2)  fix sạch  error của DSDT,
Bước 3) rename device và apply patch,
Bước 4) save lại ra DSDT.aml.

Bước 2) ☠ chính là bước làm newbie nản lòng nhất vì không phải lỗi nào cũng có patch fix sẵn.

Cách mình đưa ra:
Vận dụng tính chất External include của ACPI (đã nói ở Phần 2)để thực hiện các thao tác tương đương.
Bước 1) rename Device và Method _DSM bằng config
Bước 2) override method _DSM của EHCI và XHCI bằng một SSDT khác.

* không cần tải thêm công cụ nào hết.
* không cần dịch ngược, không cần fix error DSDT không đụng chạm gì vào file DSDT gốc.
=> loại bỏ khó nhăn nhức đầu nhất với newbie.

Hiện tại trong đầu bạn có thể sẽ xuất hiện vài dấu "?" lớn như sau:
EHCI và XHCI là gì?
* Method _DSM là gì?
External include là gì và nó hoạt động như nào?
Find and Replace ACPI của Clover hoạt động ra sao?
...
thì bạn hẵng kiềm chế mình sẽ giải thích sau khi thao tác xong.

Patch DSDT cho cổng USB:

Bước 1) rename Device và Method _DSM.

Bước 2) override method _DSM cho XHC
Để đảm bảo override method _DSM cho XHC thành công, bạn sẽ override luôn _OSI
Dùng SSDT-XHC.amlSSDT-XOSI.aml

Lưu file config, SSDT-XHC.aml và SSDT-XOSI.aml bạn cứ lưu lại vào máy tính, xong xuôi chúng ta sẽ nói chung một thể sẽ lưu nó ở đâu trong bộ cài.

EHCI(Enhanced Host Controller Interface) và XHCI(eXtensible Host Controller Interface) là khái niệm về phần cứng, 2 module này quản lý các cổng USB 2.0 và 3.0. Khi bạn cắm thiết bị USB vào, hệ điều hành sẽ thông qua 2 module quản lý này để điều khiển thiết bị. MacOS quản lý EHCI và XHCI thông qua tên của Device trong DSDT. Rename chúng cho giống với máy Mac thì MacOS sẽ điều khiển chúng trơn chu được.

Method _DSM (Device-Specific Methods), nó định nghĩa các thuộc tính của thiết bị. MacOS chỉ lấy các thuộc tính của thiết bị thông qua method này. Các method _DSM nguyên bản của DSDT/SSDT của máy Hackintosh không có chứa thuộc tính MacOS cần, cho nên bạn có thể ung dung loại bỏ mà không gặp vấn đề gì.

SSDT là bảng phụ của DSDT, nó sẽ được gộp vào DSDT khi nạp vào hệ điều hành. Mình gọi đây là cơ chế  External include.
External include hoạt động ra sao ?

  1. => Rename _DSM thành XDSM, method _DSM trở nên vô nghĩa vì nó sau khi rename thì là XDSM mà MacOS không load gì từ XDSM hết.
  2. => Bởi vì không còn thấy _DSM trong DSDT nên MacOS sẽ tìm kiếm _DSM của device ở SSDT.
  3. => Trong bài này, MacOS tìm đến  và load _DSM của EHCI và XHCI có trong nội dung của file SSDT-XHC.aml.

Find and Replace ACPI của Clover sẽ Find and Replace tên toàn bộ DSDT và SSDT có sẵn của hệ thống. Cái lợi của nó là sẽ bao phủ DSDT và tất cả các bảng SSDT.

  • Cách patch kiểu cũ không thể bao phủ toàn bộ mà chỉ rename trên DSDT và các SSDT được patch mà thôi. Nếu bạn chọn patch toàn bộ SSDT đồng nghĩa ngồi fix toàn bộ các lỗi của từng file, cũng đồng nghĩa với việc tăng rủi ro patch sai. Newbie patch sai thì lại càng rối và rối. 
  • Nếu bạn chọn patch một vài SSDT cần thiết, khả năng phát sinh các lỗi khi hoạt động do rename thiếu.Nếu trong DSDT của bạn, không có XHC1 mà nó đã sẵn là XHC thì không sao hết, không find thấy XHC1 nên sẽ không thực hiện replace này. Tương tự nếu DSDT không có EHC0, EHC1 thì cũng không thực hiện replace.

Rename _DSM thành XDSM từ bài này không chỉ có tác dụng cho riêng cụm USB mà có tác dụng cho toàn bộ các thành phần khác của hệ thống. Từ giờ trở đi muốn MacOS load _DSM của thành phần nào, bạn sẽ phải dùng thêm SSDT_DSM cho thành phần đó. Đọc lại Phần 2 bạn sẽ hiểu tại sao lại thế.

_OSI dùng để xác định phiên bản của Windows, dựa vào đó sẽ có cấu hình cụm USB phù hợp. Phần cứng dùng để Hackintosh không được thiết kế để chạy MacOS nên khi MacOS load DSDT sẽ không tìm thấy cấu hình USB phù hợp với mình, override _OSI sẽ cấu hình lại cụm USB phù hợp với MacOS.Rename _OSI thành XOSI, MacOS sẽ load lại XOSI trong SSDT-XOSI.aml.

Phương pháp này có tên gọi là "hot patch". 
Nó được sinh ra trong hoàn cảnh từ Skylake trở đi có nhiều hệ thống nếu patch trực tiếp vào file DSDT/SSDT sẽ không thể boot được.
Phương pháp này cũng có lợi điểm là tái sử dụng mạnh mẽ cho bất kỳ hệ thống nào, bạn thấy đó không cần quan tâm DSDT/SSDT hiện tại ra sao, chỉ cần thực hiện 2 bước là patch xong DSDT cho cổng USB.

Tổng kết:
*Chúng ta khởi động như vậy thôi, nhồi thêm nữa sẽ phản tác dụng.
*Để hoàn thành toàn bộ cho cổng USB sẽ cần thêm một số patch DSDT nâng cao, cần thêm Kext nữa.
*Kext sẽ nói sau khi xong hết về patch DSDT cho các thành phần khác.
*Patch DSDT nâng cao sẽ nói thêm sau khi cài xong MacOS cho thong thả.
*Config nãy lưu lại, sẽ tiếp tục dùng cho các bài tiếp theo.

Phần 4 sẽ kết thúc ở đây, bạn từ từ ngâm cứu sẽ là tiền đề tốt để làm theo Phần 5 sắp tới nhé.

➥ Subscribe my Youtube: https://www.youtube.com/user/ToHungDuong
➥ Follow My Facebook: https://www.facebook.com/DuongToOSX
➥ Follow My Blog : https://www.duongth.com
➥ Join Hội Dev Thích Mèo: https://www.facebook.com/groups/DevThichMoe/

Mọi thảo luận, giải đáp thắc mắc đều có tại Group Hội Dev thích Moè : https://www.facebook.com/groups/DevThichMoe