Chi tiết về ACPI

Có một câu hỏi chung dành cho các hackintosher. Đó là SSDT, DSDT và các bản patch rename thật sự là gì và cách mà chúng hoạt động như thế nào?

Guide này sẽ giải đáp tất cả những thứ mà bạn đang thắc mắc

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ì?

ACPI là viết tắt của cụm từ Advanced Configuration & Power Interface.

Đây là một dự án được phát triển bởi Intel, Microsoft, Toshiba,.... và còn nhiều hãng khác

Đây cũng là những người sáng lập nên ACPI special interest group

Viết tắt là ACPI SIG.

Nó là diễn đàng đầu tiên về ACPI và cũng là cơ sở để ACPI phát triển như ngày hôm nay

Vào tháng 10/2013 các nhà phát triển ban đầu của ACPI SIG đã đồng ý chuyển tất cả sang UEFI forum

Và nơi đây cũng chính là nơi mọi sự phát triển về tương lai của ACPI được tiến hành

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

Hiểu một cách nôm na thì ACPI có công dụng xác định giao diện giữa phần mềm hệ thống BIOS hoặc UEFI và hệ điều hành, giao diện trừu tượng hóa phần cứng.

Nó cung cấp cho hệ điều hành các thông tin cơ bản của phần cứng để từ đó kiểm soát và phân phối hợp lý sức mạnh của các thiết bị phần cứng máy tính

Với ACPI, hệ điều hành có thể tắt các thiết bị phần cứng khác nhau khi cần theo tình hình thực tế của thiết bị.

Và bên dưới là hình ảnh minh hoạt cho "công việc" của ACPI

Thêm nữa bản ACPI mới nhất tính đến thời điểm viết bài là phiên bản 6.5 được phát hành vào tháng 8 năm 2022

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

Trước hết bạn cần biết mỗi một mainboard của máy tính đều có một hệ thống các file ACPI được lưu trữ trong BIOS hoặc UEFI

Số lượng và nội dung của các file ACPI là khác nhau cho từng mainboard và chipset

Hơn nữa nó còn có sự thay đổi giữa các phiên bản BIOS khác nhau

Đó cũng là nguyên nhân tại sao khi update bios bạn phải patch lại DSDT nếu static patch hoặc phải dump lại DSDT

Các thay đổi này tuy không nhiều nhưng ảnh hưởng của nó đối với việc hackintosh là không thể chối cãi

Bản chất của ACPI

ACPI theo nghĩa đen chỉ là một tập hợp của nhiều file văn bản được chuyển thể thành mà nhị phân

Để cung cấp cho hệ điều hành một số thông tin cơ bản về phần cứng được sử dụng

Trong đó DSDT và SSDT chỉ là 2 trong số rất nhiều file của hệ thống ACPI

Nhưng những file này lại vô cùng quan trọng đối với việc hackintosh nói riêng và hệ thống ACPI nói chung

Một số file ACPI cơ bản: RSDP, SDTH, RSDT, FADT, FACS, DSDT, SSDT, MADT, SBST, XSDT, ECDT, SLIT, SRAT

Hệ thống ACPI, thông qua các tập tin .aml, cung cấp một phương thức tiêu chuẩn hóa để hệ điều hành hiểu cấu hình phần cứng của một máy tính.

Nó chỉ mô tả phần cứng nhưng không có khả năng hoạt động như một driver.

Thay vào đó, nó cho phép hệ điều hành quản lý phần cứng hiệu quả bằng cách sử dụng thông tin chi tiết được cung cấp trong các bảng ACPI.

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

Trong ACPI subsystem, DSDT đóng vai trò Differentiated System Description Table tạm dịch là bản mô ta đặc tính hệ thống

Cụ thể các thiết bị ngoại vi và tính năng phần cứng hệ thống của nền tảng sẽ được mô tả trong DSDT.

Nếu hiểu theo một chiều hướng nào đó thì các đặc tính của hệ thống sẽ được DSDT định nghĩa

Và DSDT sẽ được load khi khởi động thiết bị

Tiếp theo là SSDT đóng vai trò Secondary System Description Tables tạm dịch là bản mô tả đặc tính hệ thống thứ cấp

Và SSDT sẽ được load trong thời gian chạy

Cuối cùng ACPI được khởi tạo sau POST, hệ điều hành đọc bảng ACPI và sử dụng thông tin này để cấu hình và quản lý phần cứng.

Hiểu đơn giản ta có thể xem DSDT là 1 bản game chính thức còn SSDT là 1 DLC đi kèm

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.

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

Các cấu trúc dữ liệu này là cơ chế giao tiếp chính giữa firmware và hệ điều hành

Chức năng của các dạng cấu trúc:

  • Chức năng của Data tables

    • Data tables sẽ lưu trữ dữ liệu thô tức dữ liệu gốc và được các driver sử dụng

  • Chức năng của Definition blocks

    • Các "khối định nghĩa" chứa các byte code được phiên dịch và thực thi thông qua trình phiên dịch

Và từ chức năng đó của Definition blocks mà ta có thể thông qua SSDT để tiêm các Definition blocks vào hệ thống ACPI

Nhằm thay đổi những thứ cần thiết:

Chúng ta có thể thêm thiết bị ảo, đổi tên thiết bị, thay đổi phương thức điều khiển hoặc định nghĩa lại chúng. và còn nhiều thứ khác

Mục đích chung của những việc làm này giúp các thông tin về phần cứng trở nên phù hợp với macos

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

Vậy nguyên nhân là do đâu?

Những vấn đề đó đến từ việc các bảng DSDT có sẵn trong máy các bạn được viết ra đễ hỗ trợ cho windows

Đến đây nhiều bản sẽ hỏi thế tại sao linux lại chạy được và không gặp những lỗi như trên?

Nguyên nhân tiếp theo đó là do Apple không tuân thủ hoàn toàn các bảng ACPI theo chuẩn ACPI

Để có thể tùy chỉnh và tối ưu hóa hệ thống phần cứng và phần mềm của họ một cách tốt nhất

Từ đó đảm bảo hiệu suất và khả năng quản lý năng lượng tối ưu.

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ững vấn đề được đề cập ở trên điều có thể giải quyết bằng cách patch DSDT và đưa DSDT đã patch vào trong quá trình khởi động

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.

Vì vậy, việc vá động với SSDTs (Secondary System Description Tables) được ưa chuộng và sạch sẽ hơn về mặt tuân thủ ACPI so với việc sử dụng một DSDT (Differentiated System Description Table) đã vá.

Thêm vào đó, toàn bộ quá trình này hiệu quả hơn, minh bạch và thanh thoát hơn.

Nguyên nhân là khi dùng SSDT bạn chỉ thay đổi một bộ phận của DSDT mà thôi thay vì việc load toàn bộ DSDT như static patch

Ở dấy để tránh hiểu lầm thì cơ bản DSDT vẫn sẽ được load toàn bộ khi khởi động và đến khi load SSDT thì những thay đổi của bạn sẽ được apply vào

Đó là lý do tại sao bạn nên tránh sử dụng các DSDT đã vá.

Và bất kỳ ai nói rằng một hệ thống hackintosh mà không có một DSDT đã vá là không hoàn chỉnh hoặc không hoạt động đầy đủ cũng không hoàn toàn đúng.

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

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