最終更新:2017-06-16 (金) 15:39:05 (2523d)
Linux/カーネルモジュール
デバイスドライバなどLinuxカーネルに組み込まれる機能をモジュール化した、カーネルの機能を拡張するためのバイナリファイル
メリット
- カーネルがコンパクトになる
- 動作中のカーネルに組み込むことが可能
- ドライバのアップデートにモジュール単位で対応できる
- ハードウェア構成が変わってもカーネル再構成を必要としない
Linux/カーネルモジュール/ロード
Linux/起動プロセス
- initcall
- start_kernel -> rest_init -> kernel_init -> kernel_init_freeable -> do_basic_setup -> do_initcalls -> do_initcall_level? -> do_one_initcall
insmod/modprobe時
- insmod()関数がinit_moduleシステムコールを呼ぶ
- init_module -> load_module -> do_init_module -> do_one_initcall
udev
- 通常、起動時にデバイスが検出され必要なカーネルモジュールがudevによってロードされます
- 今日、必要なモジュールのロードは全てudevによって自動的に処理されているので、カーネルに含まれていないモジュールを使用する必要がないのならば、起動時にロードするモジュールを設定ファイルに記述する必要はありません。
- https://wiki.archlinuxjp.org/index.php/カーネルモジュール
コマンド
- modprobe - 依存関係をチェックしながらモジュールをロード/アンロードする
- depmod - カーネルモジュールの依存リストを作成
- lsmod - モジュールの一覧を表示
- insmod - 他のモジュールとの依存関係を考慮しないため、 modprobeコマンドが推奨されています。
- rmmod - モジュールをアンロード
- modinfo - モジュールに関する情報を参照
kmod
- Linux kernel module handling
- kmod replaces module-init-tools
- libkmod
- Ubuntu 13.04~
module-init-tools
- ~Ubuntu 12.10
- Ubuntu 13.04からはkmodのラッパー
情報
設定ファイル
- Linux/etc/modules-load.d - udevで読み込むモジュールの一覧
- Linux/etc/modprobe.conf
- Linux/etc/modprobe.d - modprobe用のカスタムパラメータ設定
- Linux/etc/modules - udevで自動的にロードされないモジュールを、起動時にロードしたければ、そのモジュールを/etc/modulesに列挙する
ディレクトリ
ビルドの仕方
Linux/カーネルモジュール/開発
メモ
- カーネルに静的リンクする方法もある。 (make configでy指定)
- カーネルモジュールはmake configでm指定