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
System power management
Device power management
Processor power management
Device and processor performance management
Configuration / Plug and Play
System Events
Battery management
Thermal management
Embedded Controller
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:
POST hoàn tất: Hệ thống kiểm tra và xác nhận phần cứng cơ bản.
Tải BIOS/UEFI: Nạp chương trình BIOS hoặc UEFI để khởi động hệ điều hành.
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.
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.
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:
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.
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.
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)
Source tham khảo: https://github.com/5T33Z0/OC-Little-Translated/tree/main/00_ACPI/ACPI_Basics | https://vnohackintosh.com/docs/usb-creation/basic-acpi/ | https://phungvanhung.wordpress.com/2011/10/26/d%E1%BA%B7c-t%E1%BA%A3-acpi-va-v%E1%BA%A5n-d%E1%BB%81-ti%E1%BA%BFt-ki%E1%BB%87m-di%E1%BB%87n-khi-s%E1%BB%AD-d%E1%BB%A5ng-pc/
Last updated