# Cùng tìm hiểu quá trình macOS khởi động

Khi tìm cách khắc phục lỗi (troubleshooting) trên một máy Hackintosh, bạn sẽ thấy đây thực sự là một quá trình tìm hiểu rất chông gai, rồi phải biết mình đang bị kẹt ở đâu mà tìm ra cách sửa, vì đôi khi từ khóa lỗi bạn tìm kiếm trên Google nó không ra kết quả bạn cần (nhiều khi gặp lỗi oái oăm chưa ai gặp hoặc chưa có người nào tìm ra cách khắc phục). Mặc dù trang này không thể giúp bạn giải quyết mọi vấn đề (vì có hằng hà lỗi mà bạn sẽ gặp phải khi bạn cố chạy macOS trên phần cứng không phải của Apple), nhưng ít ra nó sẽ giúp bạn hiểu rõ hơn mình đang bị kẹt ở giai đoạn nào trong quá trình khởi động macOS, hy vọng sẽ gợi ý cho bạn định hình trong đầu lý do tại sao ha.

# Cách OpenCore khởi động

Phần này mình sẽ viết ngắn gọn thôi, vì các lỗi khởi động OpenCore khá hiếm gặp và thường chỉ là lỗi đơn giản do người dùng cấu hình chưa đúng:

  • Hệ thống mở nguồn và tìm kiếm các ổ đĩa để khởi động hệ điều hành (boot devices)
  • Hệ thống xác định vị trí của BOOTx64.efi trên USB OpenCore của bạn tại đường dẫn EFI/BOOT/
  • BOOTx64.efi được chạy, sau đó nó sẽ nạp tiếp (chain-loads) OpenCore.efi từ thư mục EFI/OC/.
  • Các thuộc tính NVRAM (NVRAM Properties) được áp dụng.
  • Các driver (trình điều khiển) EFI được tải từ EFI/OC/Drivers.
  • Giao thức đầu ra đồ họa (GOP - Graphics Output Protocol) được cài đặt.
  • Các bảng ACPI được tải từ EFI/OC/ACPI.
  • Dữ liệu SMBIOS được áp dụng để chuẩn bị cho quá trình đóng giả máy Mac
  • OpenCore nạp xong và hiển thị cho bạn tất cả các tùy chọn khởi động có thể.
  • Bây giờ bạn có thể chọn khởi động bộ cài macOS (macOS installer).

Nếu bạn gặp vấn đề khi khởi động máy ở một trong các giai đoạn này, hãy kiểm tra các mục chính sau:

Đối với các lỗi tiềm ẩn khác, hãy xem tại đây:

# Chuyển giao (Handoff) boot.efi

Đây là lúc bộ nạp khởi động của macOS (boot.efi) xuất hiện. Cụ thể, nhiệm vụ của nó là chuẩn bị môi trường cho nhân hệ thống (kernel) nạp vào và cũng là nơi OpenCore nạp (inject) các kext. Nếu bạn bị kẹt ở đây, có khả năng là lỗi khi nạp nhân hệ thống, các "thủ phạm" chính thường là:

Để xem các lỗi khác, hãy vào đây:

Lưu ý: Kể từ macOS 10.15.4, Apple đã thay đổi giao thức gỡ lỗi của boot.efi, vì vậy màn hình gỡ lỗi trông sẽ hơi khác so với trước đây nhưng các quy tắc tương tự vẫn được áp dụng.

# Chuyển giao XNU/Kernel (XNU/Kernel Handoff)

Bây giờ boot.efi đã chuẩn bị chu đáo mọi thứ xong xuôi, chúng ta sẽ coi nhân hệ thống (kernel) làm việc như thế nào. Phần này còn kêu là Giai đoạn bắt rễ (Rooting phase) (opens new window):

Đây là giai đoạn mà dữ liệu SMBIOS được xác minh, các bảng ACPI và kext được nạp và macOS cố gắng sắp xếp mọi thứ ổn thỏa. Bị treo ở đây thường là kết cục của:

  • File SSDT đã bị lỗi.
  • Kext bị lỗi (hoặc thiết lập sai trong config.plist -> Kernel -> Add)
  • Bản đồ bộ nhớ (memory map) bị lộn xộn.

Xem thêm thông tin để sửa lỗi tại đây:

Tại dòng chữ [PCI configurations begin] (Bắt đầu cấu hình PCI), phần này bạn có thể coi như là một bài kiểm tra nhanh phần cứng trong hệ thống của chúng ta, cùng các kext và SSDT mà ta đã nạp vào. Đây cũng là nơi IOKit bắt đầu thăm dò (probe) phần cứng để tìm kiếm các thiết bị cần kết nối.

Nếu bị treo tại đây, những hạng mục bạn cần kiểm tra bao gồm:

  • Embedded Controllers (bộ điều khiển nhúng)
  • Ổ cứng lưu trữ (NVMe, SATA, v.v)
  • PCI/e
  • NVRAM
  • RTC
  • PS2 và I2C

Để biết thêm thông tin cụ thể về cách vượt qua lỗi nếu bị treo ở đây, bạn vui lòng đọc:

Đây là lúc quy tắc giới hạn 15 cổng bắt đầu gây chuyện và nhắc bạn rằng phải thực hiện USB mapping (tạo bản đồ USB) ngay lập tức. Nếu không, macOS sẽ từ chối nhận diện các cổng USB, dẫn đến lỗi 'Waiting for Root Device' (Đang chờ thiết bị khởi động) khét tiếng — khi mà hệ thống đã sẵn sàng nhưng lại hông tìm thấy cái USB cài đặt của bạn vì USB đã bị "văng" ra ngoài trong quá trình cố gắng nhận diện. Bạn đọc thêm tại đây:

Đây là lúc FakeSMC/VirtualSMC của chúng ta xuất hiện và thi triển "phép thuật Winx... Enchantix 😂". Bên trong macOS có 1 kext mang tên là Dont Steal Mac OS X.kext (viết tắt là DSMOS) để nhắc nhở bạn không được Fake Macintosh 😂. Bản thân DSMOS là một kext để xác minh xem hệ thống của bạn có SMC hay không và sẽ yêu cầu một chìa khóa (key). Nếu chìa khóa này bị thiếu, DSMOS sẽ không giải mã các tệp thực thi còn lại để tiếp tục khởi động và bạn sẽ bị kẹt tại đây. Nghĩa là macOS luôn chạy kext này trước tiên để xác minh coi nó có đang chạy trên máy Mac không. Vì máy Hackintosh làm gì có chip SMC 😂 Nhưng múa rìu sao qua được mắt của các cao thủ, cái lớp này dễ dàng bị đánh bại bởi 2 kext trên; đóng vai trò là giả lập và bắt chước cách SMC hoạt động để là 1 thợ làm chìa mở khóa cánh cửa tiếp tục khởi động Kernel đó. Bạn cũng có thể bị đứng ở màn hình AppleACPICPU, thực chất nó là cùng một lỗi treo này.

  • kextd stall[0]: AppleACPICPU](./extended/kernel-issues.md#kextd-stall-0-appleacpicpu)

Dưới đây là nội dung Easter Egg mà các kỹ sư của Apple đã khéo léo nhét vào trong kext để "cà khịa" cộng đồng Hackintosh:

Your karma check for today:
There once was a user that whined
his existing OS was so blind,
he'd do better to pirate an OS that ran great
but found his hardware declined.
Please don't steal Mac OS!
Really, that's way uncool.
(C) Apple Computer, Inc.

Bản dịch tiếng Việt:

Coi lại "nhân quả" của bạn phải chịu hôm nay:
Có một anh chàng nọ, cứ ngồi than vãn hoài,
Rằng cái hệ điều hành đang xài, sao mà nó tù túng/ngu ngơ quá đi.
Anh ta nghĩ mình dư sức, đi xài chùa một cái hệ điều hành cực ngon,
Ai dè đâu khi cài xong, thì phần cứng nó "héo hon" không chạy được.
Làm ơn đừng có xài lậu Mac OS!
Thiệt sự đó, làm vậy hông có bảnh chút nào đâu.
Bản quyền thuộc về (C) Tập đoàn Máy tính Apple.

Nguồn gốc: Dont Steal Mac OS X.kext

Giải thích lại cho rõ cái sự "cà khịa" thâm thúy của Apple:

  • Pirate an OS: Apple thừa biết anh em mình đang đi "xài chùa" chất xám của họ.
  • Karma check: Apple dùng từ "nhân quả" (Karma) như một cách cảnh báo: ông đi xài chùa đồ của người ta thì ông phải nhận cái "quả báo" là ngồi fix lỗi lòi bản họng, phần cứng hông tương thích.
  • Whined / Blind: Apple đang mỉa mai mấy ông xài Windows (existing OS) than phiền là Windows lởm, Windows chậm (blind) rồi tìm cách sang xài Mac được tối ưu rất ngon, ý nói mỉa mai Windows hổng có cửa so sánh với sự tinh tế và thông minh của macOS.
  • Hardware declined: Câu này là "đau" nhất nè. Nó xoáy vào nỗi đau của dân Hackintosh: muốn xài đồ xịn mà phần cứng (PC) hông được hỗ trợ tốt bằng hàng real của Apple, nên nó cứ "từ chối" hông cho chạy mượt.
  • Way uncool: Các kỹ sư Apple nhắc nhở nhẹ nhàng các dân chơi Hackintosh nhưng thâm thúy, họ xài từ "uncool" (không bảnh/không ngầu) để đánh vào tâm lý thích thể hiện, vạch lá tìm sâu, phá phách "kiệt tác" của họ, đã "xài chùa" còn tự hào khoe chiến tích lên mạng chia sẻ mới ghê.

Đây là nơi trình điều khiển âm thanh (audio driver) của Apple xuất hiện và là lúc AppleALC tỏa sáng để làm cho driver âm thanh của nó chịu hiểu và giao tiếp với card âm thanh trên máy bạn. Bình thường nha, cực kì hiếm khi thấy lỗi ở đây, nhưng nếu có, bạn hãy thử vô hiệu hóa AppleALC và bất kỳ kext liên quan đến âm thanh nào khác.

Và đây là lúc khởi tạo trình điều khiển card màn hình (GPU driver initialization), giai đoạn cuối cùng để chuẩn bị cho sự xuất hiện của Táo, nơi WhateverGreen thực hiện "ban" phép màu cho card màn hình để nó và driver của Apple bắt tay nhau. Các lỗi gây treo ở đây thường là do bản thân GPU "không chịu hợp tác" chứ không phải do WhateverGreen, các "thủ phạm" chính gồm có:

# Chuyển giao macOS (macOS Handoff)

Cuối cùng bạn cũng đã vượt qua được tất cả các dòng chữ verbose đó! Nếu bạn bị kẹt ở logo Apple sau khi chạy hết verbose, bạn cần kiểm tra một vài thứ trước khi tiếp tục nè: