# Gỡ lỗi OpenCore

Bạn đang đau đầu tìm hiểu tại sao mình gặp lỗi hoặc bị khựng (stalling)? Chà, bạn đã đến đúng nơi rồi đó:

# Tráo đổi file (File Swaps)

Để bắt đầu, hãy đảm bảo bạn đang sử dụng phiên bản DEBUG hoặc NOOPT của OpenCore. Những phiên bản này sẽ cung cấp nhiều thông tin gỡ lỗi hơn so với bản RELEASE. Các file cụ thể cần được tráo đổi bao gồm:

  • EFI/BOOT/
    • BOOTx64.efi
  • EFI/OC/Drivers/
    • OpenRuntime.efi
    • OpenCanopy.efi(nếu bạn có kích hoạt giao diện)
  • EFI/OC/
    • OpenCore.efi

  • Lưu ý: Thường thường tốt nhất là bạn nên gỡ lỗi (debug) hệ thống mà không có OpenCanopy. Nếu bạn bắt buộc phải xài, hãy đảm bảo file này là của bản DEBUG, nếu không bạn sẽ không thu thập được chút thông tin gỡ lỗi (debug information) nào đâu.

# Thay đổi cấu hình (Config Changes)

Tiếp theo, hãy mở file config.plist của bạn và tìm đến phần Misc > Debug. Chúng ta có một vài mục cần "vọc" ở đây:

# Misc > Debug

Tại đây, chúng ta sẽ cần kích hoạt (enable) các mục sau:

  • AppleDebug: YES

    • Cung cấp thêm nhiều thông tin gỡ lỗi (debugging information), đặc biệt là các thông tin liên quan đến boot.efi và đồng thời sẽ lưu nhật ký (log) vào ổ đĩa.
  • ApplePanic: YES

    • Tùy chọn này cho phép lưu lại các lỗi nghiêm trọng của nhân hệ thống (kernel panics) vào ổ đĩa. Mình cực kỳ khuyến khích bạn giữ tham số keepsyms=1 trong boot-args để bảo toàn được nhiều thông tin nhất có thể..
  • DisableWatchdog: YES

    • Vô hiệu hóa trình giám sát UEFI (UEFI watchdog), thường dùng khi OpenCore bị khựng (stalling) ở một tiến trình nào đó không quá quan trọng.
  • Target: 67 (hoặc bạn tự tính toán theo bảng bên dưới)

    • Được sử dụng để kích hoạt các cấp độ gỡ lỗi (debugging levels) khác nhau.
Giá trị Ghi chú
0x01 Cho phép ghi nhật ký (Enable Logging).
0x02 Cho phép hiển thị màn hình gỡ lỗi (Enable Onscreen debug).
0x04 Cho phép ghi nhật ký vào Data Hub (Enable logging to Data Hub).
0x08 Cho phép ghi nhật ký qua cổng nối tiếp (Enable serial port logging).
0x10 Cho phép ghi nhật ký biến UEFI (Enable UEFI variable logging).
0x20 Cho phép ghi nhật ký biến UEFI không biến đổi (Enable non-volatile UEFI variable logging).
0x40 Cho phép ghi nhật ký ra file (Enable logging to file).

Để tính toán giá trị Target, chúng ta có thể sử dụng máy tính hệ thập lục phân (hex calculator) và sau đó chuyển đổi nó sang hệ thập phân (decimal). Ở đây, chúng ta muốn các giá trị được lưu vào một file .txt để xem lại sau:

  • 0x01 — Cho phép ghi nhật ký (Enable Logging)
  • 0x02 — Cho phép hiển thị màn hình gỡ lỗi (Enable on-screen debug)
    • Lưu ý (Note): Nếu mở chức năng này có thể máy sẽ khởi động lâu hơn một chút trên các bản firmware (phần mềm hệ thống) có trình triển khai GOP được viết kém.
  • 0x40 — Cho phép ghi nhật ký ra file (Enable logging to file)

0x01 + 0x02 + 0x40 = 0x43

0x43 chuyển đổi sang hệ thập phân (decimal) sẽ là 67

Vì vậy, chúng ta có thể đặt Misc -> Debug -> Target -> 67

  • DisplayLevel: 2147483714 (hoặc bạn tự tính toán theo bảng bên dưới)
    • Được sử dụng để thiết lập những gì sẽ được ghi lại trong nhật ký (logged).
Giá trị Ghi chú
0x00000002 Thông báo cảnh báo (DEBUG_WARN) trong bản dựng DEBUG, NOOPT, RELEASE.
0x00000040 Thông báo thông tin (DEBUG_INFO) trong bản DEBUG, NOOPT.
0x00400000 Thông báo chi tiết (DEBUG_VERBOSE) trong các bản build tùy chỉnh.
0x80000000 Thông báo lỗi (DEBUG_ERROR) trong bản DEBUG, NOOPT, RELEASE.

Bạn có thể tìm thấy danh sách đầy đủ tại DebugLib.h (opens new window).

Thông thường, chúng ta chỉ cần những mục sau:

  • 0x00000002 — DEBUG_WARN trong bản DEBUG, NOOPT, RELEASE.
  • 0x00000040 — DEBUG_INFO trong bản DEBUG, NOOPT.
  • 0x80000000 — DEBUG_ERROR trong bản DEBUG, NOOPT, RELEASE.

Cũng giống như Target, chúng ta sử dụng máy tính hệ thập lục phân (hex calculator) rồi chuyển sang hệ thập phân (decimal):

0x80000042 chuyển đổi sang hệ thập phân (decimal) sẽ là 2147483714

Misc -> Debug -> DisplayLevel -> 2147483714

Sau khi hoàn tất, file config.plist của bạn trông sẽ như thế này:

# Tắt toàn bộ nhật ký (Disabling all logging)

Để loại bỏ tất cả việc ghi nhật ký ra file (file logging) và các thông báo gỡ lỗi (debug messages), đơn giản là hãy tráo đổi lại tất cả các file OpenCore của bạn sang phiên bản RELEASE như chúng ta đã làm ở phần Tráo đổi file (File Swaps) trước đó.

Cuối cùng, để dừng việc ghi file log vào ổ đĩa (writing to disk), bạn hãy thiết lập các mục sau:

  • AppleDebug = NO
  • ApplePanic = NO
  • Target = 0