# Chỉnh sửa bảng DMAR: Cách làm thủ công

Việc chúng ta chuẩn bị làm là loại bỏ các Vùng bộ nhớ dự phòng (Reserved Memory Regions) để cho phép bảng này nạp vào mà không gây xung đột trong macOS — điều này là bắt buộc đối với các thiết bị phần cứng sau:

  • Những loại card mạng Ethernet là biến thể của Intel I225.
  • Những loại card mạng của Aquantia
  • Một số card mạng Wi-Fi

# Chuẩn bị

Đầu tiên, chúng ta cần thu thập các tệp cần thiết để vá bảng DMAR. Nếu bạn có sử dụng tính năng SysReport (đã được hướng dẫn trước đây) có sẵn trong phiên bản Debug (Gỡ lỗi) của OpenCore, bạn sẽ thấy một tệp có tên là DMAR-1.aml nằm trong thư mục SysReport/ACPItại phân vùng EFI của mình. Nếu chưa có, bạn vui lòng làm theo quy trình tại đây để bắt đầu. Sau khi đã có tệp, bạn nên chép nó ra ở một chỗ an toàn để dễ dàng mở và chỉnh sửa trong phần tiếp theo.

# Thao tác

# Tạo bảng DMAR tùy chỉnh của riêng bạn

Cách dễ nhất để thao tác với bảng DMAR là sử dụng phần mềm có giao diện đồ họa MaciASL, đây là phần mềm chỉ có trên macOS, bạn có thể tải về tại đây (opens new window). Đã đến lúc tạo ra phiên bản tùy chỉnh từ bảng DMAR gốc với các Vùng bộ nhớ dự phòng đã được loại bỏ. Để bắt đầu, chúng ta sẽ mở bản sao của tệp DMAR-1.aml mà chúng ta đã trích xuất từ hệ thống.

Ví dụ về bảng DMAR có chứa Reserved Memory Regions Ví dụ về bảng DMAR không chứa Reserved Memory Regions

Nếu bảng DMAR của bạn trông giống như ví dụ số #2 không có Reserved Memory Regions, bạn có thể bỏ qua hướng dẫn này. Việc bạn cần làm chỉ đơn giản là tắt (disable) mục DisableIoMapper trong tệp config.plist và mở VT-d trong BIOS là xong.

Nếu bảng DMAR của bạn trông giống ví dụ số #1, hãy tiếp tục theo dõi phần bên dưới.

Với tệp DMAR-1.aml đang mở, đã đến lúc bắt đầu vá lỗi, bạn đừng lo nè, cái này dễ ẹt hà. Tất cả những gì chúng ta cần làm là bôi đen hết mấy chỗ được dán nhãn là Reserved Memory Region hoặc có loại bảng phụ (Subtable Type) là 0001 cho đến khi bạn gặp loại bảng phụ tiếp theo không phải là 0001 hoặc cho đến khi kết thúc tệp như trong ví dụ bên dưới, sau đó xóa toàn bộ các mục đó đi.

Tìm hiểu thêm

Để tìm hiểu sâu hơn, bạn có thể đọc thêm tài liệu về DMA Remapping Table: "Intel® Virtualization Technology for Directed I/O" (opens new window) (Tạm dịch: Bảng ánh xạ lại DMA: "Công nghệ ảo hóa Intel cho I/O trực tiếp).

Thông tin bắt đầu bằng Raw Table Data (Dữ liệu bảng thô) ở cuối bảng cũng có thể xóa bỏ an toàn nếu bạn muốn; đây thuần túy chỉ là dữ liệu bảng ở dạng nhị phân thô và chỉ xuất hiện để hiển thị. Khi bạn Biên dịch (Compile) và Lưu (Save) dưới dạng tệp ACPI Machine Language Binary (Nhị phân ngôn ngữ máy ACPI), dữ liệu này sẽ tự động thay đổi để phản ánh thông tin mới trong bảng nhị phân.

CẢNH BÁO

LƯU Ý: Đừng nhầm lẫn bảng này với bảng SSDT, viết tắt của Secondary System Description Table - Bảng mô tả hệ thống phụ vì SSDT chỉ cung cấp thêm các chi tiết bổ sung cho tệp DSDT thực tế mà thôi.

# Loại trừ bảng DMAR gốc

Bây giờ bạn sẽ cần chuẩn bị tệp config.plist để xóa hoặc "loại trừ" bảng DMAR gốc. Bạn thực hiện bước này trong phần ACPI->Delete nữa là xong rồi nè.

Lệnh loại trừ

Comment String Drop DMAR Table
All Boolean YES
Enabled Boolean YES
TableSignature Data 444D4152

CẢNH BÁO

Bạn vẫn phải tuân thủ đúng sơ đồ (schema) của tệp config.plist. Vì vậy, hãy chắc chắn tham khảo Tài liệu cấu hình OpenCore (opens new window) để biết tất cả các trường (fields) bắt buộc phải có trong mục ACPI->Delete và điền vào đó các giá trị an toàn (failsafe values) của tụi nó.

# Tổng kết

Tất nhiên, hãy đảm bảo tệp DMAR.aml mới của bạn đã nằm gọn trong thư mục EFI/OC/ACPI trên phân vùng EFI và đã được khai báo vào tệp config.plist. Sau đó, hãy tắt mục DisableIoMapper nằm trong phần Kernel->Quirks và khởi động lại.

Nếu bạn đang sử dụng card mạng Ethernet là biến thể của I225 và đang dùng các tham số khởi động e1000=0 hoặc dk.e1000=0 cho phiên bản macOS 12.2.1 trở xuống. Bạn sẽ cần xóa tham số này trước khi khởi động lại để trình điều khiển com.apple.DriverKit-AppleEthernetE1000 có thể nhận diện đúng card mạng Ethernet Intel I225-V của bạn.