minhkhoinguyen

Privacy Account
Staff member
25/4/15
10,850
667
113
Hà Nội
minhkhoinguyen.com
terminal-icon-osx-300x262.png

Kernel Extensions, hay còn được gọi là Kext, là một tập hợp modules các tập tin mã lệnh được đưa vào không gian nhân xử lí của OS X, có khả năng thực thi một tác vụ đã chỉ định sẵn ở mức low-level. Hầu hết các kext liên quan đến hệ thống OS X, phần còn lại là các trình điều khiển phần cứng, nhưng cũng có khi nhà phát triển thứ ba cần một kext riêng biệt để xử lí tác vụ riêng của phần mềm do họ phát triển.

Thường thì người dùng basic không nên can dự sâu vào vấn đề này, chỉ có các advance user, người quản trị hệ thống hay các hackintosher cần thủ công load/unload một kext nào đó vào/ra hệ thống. Do Kernel Extensions là một phần quan trọng của OS X, nên việc load/unload phải được thực hiện với một lí do cụ thể nào đó được hướng tới chẳng hạn testing kext, software...Việc load/unload kext sai lệch sẽ khiến cho OS X hay phần cứng nào đấy không còn hoạt động bình thường, thậm chí là lỗi hệ thống không thể làm việc tiếp. Vì vậy, trước khi tiến hành người dùng cần cân nhắc và am hiểu kĩ những thành phần liên quan đến kext. Mình cũng không khuyến khích mức người dùng basic tiến hành điều này, tốt nhất nên backup hệ thống trước khi thực hiện.

Loading một Kernel Extension trong OS X với kextload
Để load một Kext vào hệ thống OS X, bạn cần thực thi câu lệnh kextload trên Ternimal. Câu lệnh khá đơn giản, nhớ là thực hiện bằng quyền sudo -s( yêu cầu pass root user):
Mã:
sudo kextload /path/to/kext.kext

VD:
sudo kextload /System/Library/Extensions/ApplePS2Controller.kext

Ngoài ra bạn có thể sử dụng tập tin định danh của Kext( thường file này được sử dụng triệu gọi các thành phần khác trong kext) với tham số -b của kextload
Mã:
sudo kextload -b com.apple.driver.ExampleBundle

Để kiểm tra các Kext nào đang hoạt động hay đã được load vào hệ thống, sử dụng câu lệnh kextstat, nếu cần tìm kiếm thì sử dụng tham số grep

Mã:
$ kextstat |grep com.apple.driver.ExampleBundle
125 0 0xdddddd7f23351040 0x5000 0x5000 com.apple.driver.ExampleBundle (1) 12 8 7 5 4 2 1

Việc này khá hữu ý cho những ai cần test kext( debug) liên quan đến trình điều khiển phần cứng, chỉ cần chắc chắn kext đã được load vào hệ thống và trả về tham số hoạt động, bạn chỉ cần rebuild cache + rebuild permissions để xem phần cứng/phần mềm có liên quan thay đổi như thế nào mà không cần khởi động lại hệ thống. Dĩ nhiên nhiều trường hợp dính lỗi có thể dẫn đến Kernel Panic, hệ thống dừng hoạt động và ép phải restart.
kernel-extensions-mac-os-x.jpg

Unloading a Kernel Extension với kextunload
Cũng gần giống với câu lệnh load kext vào hệ thống, bạn chỉ cần sử dụng kextunload thay cho kextload
Mã:
sudo kextunload -b com.apple.driver.ExampleBundle
hoặc 
sudo kextunload /path/to/kext.kext

VD: sudo kextunload /System/Library/Extensions/ThirdPartyMystery.kext

Sau khi thực thi, để chắc chắn kext đó ko còn load hay hoạt động trong hệ thống, vẫn sử dụng kextstat và grep để kiểm tra