วิธีโหลด & Unload Kernel Extensions ใน Mac OS X
สารบัญ:
ส่วนขยายเคอร์เนลเรียกสั้น ๆ ว่า kext เป็นโมดูลของโค้ดที่โหลดโดยตรงในพื้นที่เคอร์เนลของ Mac OS X สามารถเรียกใช้ในระดับต่ำเพื่อทำงานที่หลากหลาย kext ส่วนใหญ่เป็นส่วนหนึ่งของซอฟต์แวร์ระบบ Mac OS X หลัก ซึ่งโดยปกติจะเป็นไดรเวอร์อุปกรณ์ฮาร์ดแวร์ แต่แอปของบุคคลที่สามบางแอปจะติดตั้ง kext ด้วยเช่นกัน
บางครั้ง ผู้ใช้ Mac ขั้นสูงและผู้ดูแลระบบอาจต้องโหลดหรือยกเลิกการโหลดส่วนขยายเคอร์เนลด้วยตนเองเนื่องจากส่วนขยายเคอร์เนลมักเป็นส่วนประกอบที่สำคัญของ MacOS จึงเหมาะสำหรับผู้ใช้ที่มีเหตุผลเฉพาะในการปรับเปลี่ยนว่าจะโหลดหรือยกเลิกการโหลด kext ลงในพื้นที่เคอร์เนล MacOS X เท่านั้น การแก้ไขพฤติกรรม kext ที่ไม่เหมาะสมอาจทำให้ฮาร์ดแวร์ Mac ใช้งานไม่ได้หรือไม่สามารถเข้าถึงได้ และยังสามารถขัดขวางไม่ให้ Mac OS X ทำงานได้เลย ดังนั้นอย่าพยายามเปลี่ยนส่วนขยายเคอร์เนลใดๆ โดยไม่มีเหตุผลที่น่าสนใจและทำความเข้าใจว่ามันคือการใช้งานอะไร
กำลังโหลดส่วนขยายเคอร์เนลใน Mac OS X ด้วย kextload
ในการโหลดส่วนขยายเคอร์เนลลงใน Mac OS X คุณจะต้องใช้ยูทิลิตี้ kextload บรรทัดคำสั่ง ไวยากรณ์นั้นง่ายพอ ต้องใช้ sudo สำหรับการเข้าถึงระดับผู้ดูแลระบบเพื่อดำเนินการ:
sudo kextload /path/to/kext.kext
คุณยังสามารถใช้ตัวระบุบันเดิล (ซึ่งมักเป็นเป้าหมายของคำสั่งดีฟอลต์) ด้วยแฟล็ก -b:
sudo kextload -b com.apple.driver.ExampleBundle
ไม่ว่าจะด้วยวิธีใด กด return และด้วยการป้อนรหัสผ่านของผู้ดูแลระบบ ส่วนขยายเคอร์เนลจะถูกโหลดลงใน Mac OS X
คุณสามารถยืนยันได้ว่ามีการโหลดเคอร์เนลแล้วโดยแสดงรายการด้วย kextstat โดยใช้ grep เพื่อค้นหาชื่อที่กำหนด เช่น
$ kextstat |grep com.apple.driver.ExampleBundle 125 0 0xdddddd7f23351040 0x5000 0x5000 com.apple.driver.ExampleBundle (1) 12 8 7 5 4 2 1
สิ่งนี้จะมีประโยชน์หลังจากติดตั้งส่วนขยายเคอร์เนลลงใน Mac OS X ด้วยตนเอง เนื่องจากในบางสถานการณ์จะทำให้ไม่จำเป็นต้องรีบูตเครื่อง Mac
Mac OS X เวอร์ชันสมัยใหม่ยังอนุญาตให้โหลดส่วนขยายเคอร์เนลได้ด้วยคำสั่ง kextutil ซึ่งมีคุณสมบัติครบถ้วนกว่าเล็กน้อยสำหรับเหตุผลในการดีบัก แต่อย่างอื่นจะเหมือนกันสำหรับการโหลด kext
ยกเลิกการโหลดส่วนขยายเคอร์เนลด้วย kextunload
การยกเลิกการโหลดส่วนขยายเคอร์เนลจาก Mac OS X โดยพื้นฐานแล้วจะเหมือนกับการโหลด kext ยกเว้นว่าคุณจะใช้ยูทิลิตี้ kextunload กับ sudo ดังนี้:
sudo kextunload -b com.apple.driver.ExampleBundle
หรือชี้ไปที่เส้นทางส่วนขยายเคอร์เนลโดยตรง:
sudo kextunload /System/Library/Extensions/ThirdPartyMystery.kext
อีกครั้ง คุณสามารถยืนยันได้ว่าส่วนขยายเคอร์เนลถูกยกเลิกการโหลดแล้วโดยใช้ kextstat และ grep โดยที่ส่วนขยายนั้นจะไม่ส่งคืนอะไรเลย