紹介
著者
- Linux Kernel Module Programming Guide は Ori Pomerantz が Linux v2.2 向けに最初に執筆
- Peter Jay Salzman が Linux v2.4 向けに更新
- Michael Burian が Linux v2.6 向けの共同メンテナンスを担当
- Bob Mottram が Linux v3.8 以降のバージョン向けにサンプルを更新
- Jim Huang が最近の Linux バージョン(v5.0 以上)向けに更新し、LaTeX ドキュメントを修正
謝辞
カーネルモジュールとは?
- Linux カーネルモジュールは、必要に応じてカーネルへ動的にロードおよびアンロードできるコードセグメント
- カーネルモジュールは、システムを再起動せずにカーネル機能を拡張
- モジュールがなければ、新機能を追加するたびにカーネルを再ビルドし、システムを再起動する必要がある
カーネルモジュールパッケージ
- Ubuntu/Debian:
sudo apt-get install build-essential kmod
- Arch Linux:
sudo pacman -S gcc kmod
自分のカーネルにはどのモジュールがあるのか?
lsmod コマンドで、現在カーネルにロードされているモジュールを確認可能
/proc/modules ファイルでも確認可能
カーネルのダウンロードとコンパイルが必要か
- このガイドに従うために、カーネルをダウンロードしてコンパイルする必要はない
- テスト用ディストリビューションでサンプルを実行するのが安全
始める前に
- モジュールのバージョン管理、X Window System の使用、SecureBoot などの注意事項
ヘッダー
- カーネルヘッダーファイルのインストールが必要
- Ubuntu/Debian:
sudo apt-get install kmod linux-headers-$(uname -r)
- Arch Linux:
sudo pacman -S linux-headers
- Fedora:
sudo dnf install kernel-devel kernel-headers
サンプル
- すべてのサンプルはドキュメントの examples サブディレクトリにある
Hello World
最も簡単なモジュール
hello-1.c ファイルを作成してコンパイル
- モジュールのロードおよびアンロード方法を説明
Hello と Goodbye
module_init および module_exit マクロの使用例
__init と __exit マクロ
__init マクロは初期化関数の完了後にメモリを解放
__exit マクロは、モジュールがカーネルに組み込まれている場合に関数を省略
ライセンスとモジュールの文書化
MODULE_LICENSE マクロを使用してモジュールのライセンスを指定
MODULE_AUTHOR、MODULE_DESCRIPTION マクロの使用例
コマンドライン引数の受け渡し
module_param マクロを使用してモジュールにコマンドライン引数を渡す
MODULE_PARM_DESC マクロを使用して引数の説明を追加
複数ファイルにまたがるモジュール
- 複数のソースファイルに分割されたカーネルモジュールの例
事前コンパイル済みカーネル向けモジュールのビルド
- 事前コンパイル済みカーネル向けモジュールのビルド方法を説明
GN⁺のまとめ
- このガイドは Linux カーネルモジュールプログラミングに関する包括的な案内書であり、多様なサンプルとともに、カーネルモジュールの基本概念から高度なトピックまで扱っている
- カーネルモジュールを使えば、システムを再起動せずにカーネル機能を拡張でき、これは開発者にとって大きな利点となる
- モジュールのバージョン管理や SecureBoot などの注意事項を十分に理解して従う必要がある
- 関連プロジェクトには Linux Device Drivers、The Linux Programming Interface などがある
1件のコメント
Hacker Newsのコメント