Chi tiết về ACPI

Sơ lược về ACPI

Hầu hết các hackintosher khi lần đầu tiên tiếp xúc với ACPI. Đa phần các bạn đều bối rối và hoang mang ngay khi mở nó ra.

Có rất nhiều hackintosher hễ đọc đến guide yêu cầu kiến thức về ACPI sẽ lập tức tìm giải pháp "mì ăn liền" nào đó.

Nếu bạn là người như vậy thì guide này chính là dành cho bạn

ACPI là gì?

Công dụng thực của ACPI?

Một số công dụng chính
  1. System power management

  2. Device power management

  3. Processor power management

  4. Device and processor performance management

  5. Configuration / Plug and Play

  6. System Events

  7. Battery management

  8. Thermal management

  9. Embedded Controller

  10. SMBus Controller

Sự thay đổi của ACPI

Bản chất của ACPI

Sự phân cấp trong hệ thống ACPI

Tìm hiểu chi tiết về quá trình khởi động ACPI

Hệ thống con ACPI được khởi tạo sau quá trình POST (Power-On Self Test) của hệ thống. Quá trình khởi tạo diễn ra theo thứ tự như sau:

  1. POST hoàn tất: Hệ thống kiểm tra và xác nhận phần cứng cơ bản.

  2. Tải BIOS/UEFI: Nạp chương trình BIOS hoặc UEFI để khởi động hệ điều hành.

  3. Khởi tạo ACPI:

    • Tìm kiếm và tải các bảng ACPI: BIOS/UEFI tìm và tải các bảng ACPI từ bộ nhớ ROM.

    • Chuyển điều khiển tới hệ điều hành: BIOS/UEFI chuyển thông tin bảng ACPI cho hệ điều hành.

  4. Hệ điều hành đọc và xử lý bảng ACPI: Hệ điều hành đọc các bảng ACPI (.aml) để lấy thông tin phần cứng.

  5. Cấu hình và quản lý phần cứng: Hệ điều hành sử dụng thông tin từ bảng ACPI để cấu hình và quản lý phần cứng.

Quá trình load ACPI

Cấu trúc dữ liệu của ACPI

Bản thân ACPI bao gồm 2 cấu trúc dữ liệu đó là:

  • Data tables

    • Tạm dịch: Dữ liệu dạng bảng

  • Definition blocks

    • Tạm dịch: Khối định nghĩa

Lý do SSDT được ưa chuộng hơn DSDT

Như các bạn cũng đã biết khi bạn vừa hackintosh xong mọi phần cứng của thiết bị gần như tế liệt.

Như không chỉnh được dộ sáng, IGPU không nhận, Sleep wake không được và còn vô vàng những điều khác

Chi tiết về sự thay đổi ACPI từ Apple

Apple không tuân thủ hoàn toàn các bảng ACPI theo chuẩn ACPI cho phần cứng của họ, điều này được giải thích như sau:

  1. Thiết kế hệ thống độc quyền:

    • Apple thiết kế và kiểm soát toàn bộ phần cứng và phần mềm của họ, từ thiết bị đến hệ điều hành macOS. Điều này cho phép họ tối ưu hóa hiệu suất và khả năng tương thích theo cách riêng của họ mà không cần phải tuân theo tiêu chuẩn chung một cách nghiêm ngặt.

  2. Tùy chỉnh và tối ưu hóa:

    • Apple tùy chỉnh các bảng ACPI để phù hợp với các yêu cầu cụ thể của phần cứng và phần mềm của họ. Điều này giúp tối ưu hóa hiệu suất và quản lý năng lượng tốt hơn so với việc tuân thủ hoàn toàn các chuẩn ACPI chung.

  3. Hỗ trợ hệ điều hành riêng:

    • macOS được thiết kế để hoạt động tốt nhất trên phần cứng của Apple. Vì vậy, việc tùy chỉnh các bảng ACPI theo cách riêng giúp hệ điều hành này khai thác tối đa khả năng của phần cứng Apple mà không gặp phải các giới hạn của tiêu chuẩn chung.

Như đã nói hệ thống firmware cập nhật các bảng ACPI một cách động trong thời gian chạy

Nên tiêm một bảng DSDT đã sửa có thể gây ra xung đột và lỗi.

Vì bảng DSDT có thể thay đổi khi cập nhật BIOS, tiêm một bảng DSDT cũ đã được sửa có thể làm hỏng các chức năng của macOS

Do không tương thích với các thay đổi mới trong phần cứng và phần mềm.

Chi tiết
  • Cập nhật động của bảng ACPI:

    • Hệ thống firmware có khả năng cập nhật các bảng ACPI trong thời gian chạy. Điều này có nghĩa là bảng DSDT (Differentiated System Description Table) và các bảng ACPI khác có thể thay đổi khi hệ thống hoạt động.

  • Nguy cơ từ việc tiêm bảng DSDT đã sửa:

    • Tiêm một bảng DSDT đã được sửa có thể không khớp với các cập nhật động này, dẫn đến xung đột và lỗi hệ thống.

    • Nếu bảng DSDT được sửa không tương thích với các thay đổi mới, điều này có thể gây ra lỗi phần cứng hoặc làm hỏng các chức năng của hệ điều hành macOS.

  • Cập nhật BIOS và thay đổi DSDT:

    • Khi BIOS được cập nhật, bảng DSDT có thể thay đổi để phản ánh các cải tiến hoặc sửa lỗi mới. Việc này có thể làm cho bảng DSDT cũ không còn phù hợp nữa.

    • Tiêm một bảng DSDT cũ đã được sửa lên trên bảng DSDT mới từ BIOS có thể gây ra xung đột, vì các thông tin trong bảng cũ không còn phù hợp với trạng thái phần cứng và phần mềm hiện tại.

Chi tiết
  • Vá động với SSDTs:

    • Tuân thủ ACPI: SSDTs được sử dụng để thêm hoặc sửa đổi các phần nhỏ của hệ thống mà không thay thế toàn bộ DSDT. Điều này giúp duy trì sự tuân thủ ACPI và tránh xung đột với các cập nhật động từ firmware.

    • Linh hoạt: SSDTs có thể được tạo ra và áp dụng một cách linh hoạt, chỉ can thiệp vào những phần cần thiết mà không ảnh hưởng đến toàn bộ cấu trúc ACPI.

  • Quá trình hiệu quả và minh bạch:

    • Hiệu quả: Sử dụng SSDTs giúp tối ưu hóa quá trình vá lỗi và cập nhật, vì chỉ những phần cụ thể của hệ thống được can thiệp. Điều này giúp tránh các xung đột và giảm thiểu rủi ro lỗi hệ thống.

    • Minh bạch: SSDTs làm cho quá trình vá lỗi trở nên rõ ràng hơn. Bạn có thể thấy chính xác những gì đã được thay đổi mà không cần lo lắng về việc thay thế toàn bộ DSDT.

  • Tránh sử dụng DSDT đã vá:

    • Nguy cơ xung đột: DSDT đã vá có thể gây ra xung đột với các cập nhật firmware động, dẫn đến lỗi hệ thống và làm giảm tính ổn định của hệ điều hành.

    • Khó duy trì: Khi BIOS được cập nhật, DSDT có thể thay đổi. Sử dụng DSDT đã vá yêu cầu phải vá lại mỗi khi có cập nhật BIOS, gây ra phiền phức và tăng nguy cơ xung đột.

  • Hackintosh không cần DSDT đã vá:

    • Hoàn chỉnh và đầy đủ chức năng: Một hệ thống hackintosh có thể hoàn toàn hoạt động đầy đủ và ổn định mà không cần sử dụng DSDT đã vá, nếu sử dụng SSDTs đúng cách.

    • Thông tin sai lệch: Những ai cho rằng hackintosh không có DSDT đã vá là không hoàn chỉnh hoặc không đầy đủ chức năng là không đúng, vì sử dụng SSDTs là một phương pháp tối ưu và tuân thủ chuẩn ACPI hơn.

Các thành phần cơ bản được chỉnh sửa

Những thông tin dưới đây được trích dẫn lại từ https://vnohackintosh.com/docs/usb-creation/basic-acpi/

  • Embedded controllers (EC)

    • Tất cả các mainboard của Apple đều có device EC trong DSDT, nhưng mà tên của chúng không phải là EC mà là EC0, ECDV, H_EC. Kể từ macOS Catalina trở đi, yêu cầu cần có một device tên là EC thì mới khởi động được.

    • Có hai cách xử lý, một là rename EC0 hay H_EC thành EC, hai là tạo một device giả (fake device) có tên là EC (SSDT-EC.aml)

    • Đối với laptop, embedded controller cần thiết để có thể dùng pin và phím tắt. Việc đổi tên sẽ gây ra sự cố với Windows do OpenCore sẽ nạp ACPI đã sửa còn Clover thì không, do đó thường sử dụng cách thứ hai là giả maọ device.

  • Plugin type

    • Cho phép sử dụng XCPM để cung cấp khả năng quản lý nguồn CPU trên Intel Haswell và các CPU mới hơn, điều này không tương thích với AMD

    • Hiểu đơn giản là có cái này CPU mới chạy ổn định, nhận đủ xung nhịp, không nhảy xung lên xuống một cách lung tung.

  • AWAC system clock

    • Đây là một thiết bị mới có trên dòng mainboard 3000 series trở đi, nó thay thế cho RTC clock (khi AWAC bật thì RTC tắt). Vấn đề ở đây là macOS nó lại cần RTC chứ không cần AWAC

    • Vẫn là hai cách, chỉnh sửa code ACPI để bật RTC tắt AWAC (SSDT-AWAC-DISABLE.aml), hoặc tạo device giả mạo (SSDT-RTC0.aml)

  • NVRAM SSDT

    • Dòng main board 300 series (trừ chipset Z370) kể cả pc lẫn laptop sẽ dính lỗi không hỗ trợ ghi NVRAM, cần sửa lỗi này để quá trình bật tắt hay cài đặt macOS diễn ra bình thường (SSDT-PMC.aml)

  • Backlight

    • Sử dụng để sửa lỗi hỗ trợ điều khiển đèn nền (tăng giảm độ sáng màn hình) trên laptop (SSDT-PNLF.aml)

Last updated