このページの本文へ

前へ 1 2 次へ

Apple Geeks 第1回

不要なドライバーをスッキリ整理、KEXT関連コマンドを知る

2010年08月02日 23時30分更新

文● 海上忍

  • この記事をはてなブックマークに追加
  • 本文印刷

 本連載「Apple Geeks」は、Apple製ハードウェア/ソフトウェア、またこれらの中核をなすOS X/iOSに関する解説をあますことなくお贈りする連載です(目次はこちら)。

 UNIX使い向けをはじめ、Apple関連テクノロジー情報を知りつくしたいユーザーに役立つ情報を提供します。


機能拡張の仕組みと使い方

 ついに復活しました! 場所も名前も変わったものの、書き手と担当編集者は同一人物。スタイルやノリも同じ。何と同じか……ですと? 筆者の名前と「OS X」でググってくださいませ。毎週月曜更新ですので、ご愛顧のほどよろしくお願いします!

 さて、今回は「KEXT」について。いわゆるデバイスドライバーとしての機能を提供するプログラムだが、システムの核たるカーネルに近い部分で動作するため、システムの安定動作に大きく影響する。ここを整理し、システムの負荷軽減ひいては安定稼働に寄与することが、今回の目的だ。


What's KEXT?

 KEXT(Kernel EXTension)は、文字通りカーネルを拡張するローダブルモジュールの一種。必要に応じてメモリーにロードされ、各種ハードウェアやファイルシステムにアクセスする機能を提供する。その多くはデバイスドライバーであり、アップルが開発したシステム標準装備のものから、周辺機器に添付されていたサードパーティー製まで、基本的に/System/Library/Extensionsディレクトリー以下へインストールされる。

 KEXTは、一度管理者権限でインストールしてしまえば、メンテナンスフリーだ。必要に応じ動的にメモリー上へロードされるため、ユーザーが存在を意識する必要はない。

 しかし、システム不安定化の原因となることも。ベータ版のドライバーをインストールしてからシステムが不安定だ、ときどきカーネルパニックが発生するといった場合にはそのKEXTを疑うべきだろう。

 とはいえ、/System/Library/Extensionsディレクトリーを眺めたところで、どのKEXTが問題のドライバーなのか、多くのユーザーには判別が難しいはず。「よくわからないままに削除を強行したところ、それは重要なシステム標準装備のKEXTだった」となると目も当てられない。カーネルに近い部分で動作するプログラムなだけに、安易な削除は反対にシステムを不安定化させかねないのだ。

カーネル機能拡張書類「KEXT」。アンインストーラーがない場合の無効化には、多少のコツが必要


対象のKEXTを絞り込む

 問題のKEXTを特定するには、2段階の作業が必要だ。作業には「アプリケーション」 - 「ユーティリティ」フォルダーにある「ターミナル」(Terminal)が欠かせないため、まずは起動してほしい。

 最初は、システム上に存在する(システムが認識している)KEXTの確認から。方法は2つ、「システムプロファイラ」で「ソフトウェア」→「機能拡張」を選択するか、「ターミナル」で「kextfind -e」を実行するかだ。これで、KEXTの名称や製造元などの情報を確認できるため、おおよその見当がつくことだろう。

システムプロファイラでKEXTを一覧できる

 続いては、対象のKEXTがメモリー上にロードされているかどうかの確認を行なう。利用するのは「kextstat」、実行時点でメモリー上にロードされているKEXTをリストアップするコマンドだ。このとき注目すべきは、KEXTが持つ一意のID(CFBundleIdentifier)。今回の作業の目的は、サードパーティー製KEXTの洗い出しにあるため、grepにパイプしてアップルが開発したもの(すべてcom.appleから始まる)を除外して表示する(「kextstat | grep -v com.apple」)。これで、メモリー上にロードされているKEXTをリストアップできたはずだ。

IDが「com.apple」から始まるKEXTはシステム用のため、作業対象から除外すること

 対象とするKEXTのCFBundleIdentifierに目星がついたら、以下の要領でkextfindコマンドを実行し、そのIDを持つKEXTを検索してみよう(com.iospirit.driver.rbiokithelperは、あくまで筆者の環境での一例)。最初の手順でおおよその見当をつけたKEXTと一致していれば、そのKEXTをメモリー上からアンロードしたあと/System/Library/Extensionsディレクトリーから削除する、という流れで作業を進める。


$ /usr/sbin/kextfind -bundle-id com.iospirit.driver.rbiokithelper
/System/Library/Extensions/RBIOKitHelper.kext


前へ 1 2 次へ

カテゴリートップへ

この連載の記事

ASCII.jp RSS2.0 配信中