Mọi thứ cần biết về NVRAM
NVRAM là gì?
Khái niệm NVRAM hơi xa lạ với các máy tính PC nhưng thật ra nó rất phổ biến trên các dòng máy Mac. NVRAM là một vùng bộ nhớ trong máy, không bị mất đi sau khi khởi động lại (khác với RAM). NVRAM thường được dùng để lưu các biến và giá trị tổng quát như: độ sáng, volume, tên máy, id của Find My Mac,... Trên Windows và Linux thì các giá trị này thường không lưu vào nvram mà được lưu trên đĩa cứng, do đa số các PC đều không có NVRAM. Tuy nhiên, OS X tận dụng tối đa NVRAM để phục vụ một số tính năng như iMessage, Facetime, boot device,...
NVRAM trên PC
NVRAM cũng như UEFI hiện đang được thêm vào trên các dòng máy PC từ sau này, và một số hệ điều hành Windows, Linux cũng áp dụng nó. Đơn giản nhất là các hệ điều hành Windows UEFI dùng nvram để kiểm tra xem SecureBoot trong UEFI có được bật hay không.
Tuy nhiên, mọi thứ không diễn ra suôn sẻ trên thế giới PC. Vào giai đoạn đầu của bước chuyển Legacy BIOS -> UEFI, nhiều máy đã bị trục trặc nghiêm trọng bởi NVRAM không ổn định. Đáng chú ý nhất là nhiều máy Samsung bị brick ngưng hoạt động do việc ghi NVRAM bị lỗi phải CMOS reset, thậm chí có thể dẫn đến hư firmware. Các hãng khác cũng bắt đầu dè chừng và trong các bản cập nhật BIOS mới, họ có thể tắt NVRAM nếu có phát hiện mối nguy hiểm nào.
Cách test NVRAM
Để test xem NVRAM có hoạt động hay không, bạn vào terminal của OS X và gõ lệnh:
Mã:
sudo nvram MyVar=TestValue
Sau đó gõ lệnh sau để xem NVRAM hiện thời:
Mã:
nvram -p
Bạn sẽ thấy dòng
Mã:
MyVar TestValue
Nếu sau khi bạn khởi động lại, vào terminal dùng lệnh nvram -p mà vẫn thấy dòng trên thì Nvram của bạn đã hoạt động.
NVRAM và Hackintosh
1/ Chameleon
Do kiến trúc đặc thù của Chameleon bootloader nên hầu như tất cả các efi-runtime của hệ thống đều không được Chameleon giữ lại trước khi khởi động OS X, điều này cũng có nghĩa NVRAM sẽ không hoạt động trên máy cho dù máy tính bạn đã được bật NVRAM.
Để khắc phục tình trạng này, FileNVRAM module đã được tạo ra để giả lập NVRAM cho Chameleon. Bằng việc tích hợp vào nhân của OS X một module giả lập FileNVRAM, các tính năng yêu cầu NVRAM sẽ hoạt động bình thường. Module FileNVRAM sẽ được chạy khi bạn khởi động OS X, lấy thông tin từ /Extra/nvramxxxxxxxx.plist và tải các biến vào NVRAM ảo, đồng thời tải kext FileNVRAM vào hệ thống. Mọi thao tác với NVRAM của OS X sẽ diễn ra bình thường thông qua FileNVRAM, và nội dung sẽ được lưu trên đĩa cứng.
2/ Clover UEFI
Khác với Chameleon, Clover tuân theo các chuẩn Apple hơn nên có thể sử dụng NVRAM của hệ thống (nếu có).
Để test xem bạn có Native NVRAM không, vào /EFI/Clover/Driver64UEFI/ và xoá EmuVariableUefi-64.efi, sau đó khởi động lại. Thực hiện các bước test NVRAM ở trên, nếu nó hoạt động thì máy bạn có hỗ trợ Native NVRAM và không cần dùng EmuVariableUefi-64.efi.
Nếu không có EmuVariableUefi-64.efi và NVRAM không hoạt động thì máy bạn đã tắt NVRAM, bạn cần phải dùng EmuVariableUefi-64.efi.
Cơ chế của EmuVariableUefi-64.efi là tự động load file nvram.plist mới nhất trong các ổ đĩa HFS+/FAT32 và giả lập NVRAM cho OS X. Tuy nhiên driver này không tự động lưu dữ liệu trong NVRAM vào file nvram.plist, nên cần có một trong các thủ thuật sau:
RC Script
Đây là cách được dùng bởi các bộ cài Clover (đến bản 2709 vẫn dùng). Sử dụng tính năng của OS X là tự động load /etc/rc.local khi khởi động, và /etc/rc.shutdown.local khi tắt máy, bộ cài Clover thêm các lệnh lưu log file vào rc.local và lệnh lưu nvram.plist vào rc.shutdown.local.
Thật ra RC Script đã được khai tử từ thời Leopard (10.5), nhưng do may mắn nó vẫn hoạt động đến Mavericks (10.9). Không may là nó chính thức biến mất ở Yosemite (10.10), nên hiện tại nhiều bạn dùng bộ cài Clover cũ bị mất các biến NVRAM sau khi khởi động lại máy, đó là do lệnh save nvram.plist không còn được thực thi khi tắt máy nữa.
LoginHook/LogoutHook
Để thay thế tạm thời cho RC Script, một số bạn dùng LoginHook/LogoutHook thay cho rc.local/rc.shutdown.local. LoginHook sẽ tự động chạy lệnh khi login, và logouthook sẽ chạy lệnh khi logout.
Tuy giải quyết được tạm thời việc save NVRAM nhưng LoginHook/LogoutHook cũng có một số khuyết điểm. Các lệnh sẽ được chạy khi login/logout chứ không phải khi khởi động/tắt máy. Một điều quan trọng nữa là cách này đã bị khai tử từ thời....Tiger (10.4), nên việc ra đi chỉ còn là vấn đề thời gian.
Launchd
Đây là cách chính thức của Apple dành cho việc chạy lệnh khi khởi động/tắt máy, và cũng là cách mà các bộ cài Clover phiên bản 2712 trở về sau dùng đến để tránh trường hợp bị die bất tử.
Tác giả: pokenguyen