

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
カーネルモジュールとは?
カーネルモジュールは、OSの心臓部であるカーネルに動的に追加できるプログラムの部品です。カーネルはOSの基本機能を提供します。ここに新しい機能を「追加」したいとき、完全に新しいOSを再構築するのではなく、カーネルモジュールを読み込んで機能を拡張します。
なぜカーネルモジュールが必要なのか
日常のパソコンやサーバーでは、機能を全部最初から組み込むとサイズが大きくなりすぎたり、使われない機能が増えたりします。そこで必要な機能だけを後から追加できるのがカーネルモジュールです。例えば新しいデバイスを使えるようにしたい場合、デバイスドライバをモジュールとして追加します。
基本の仕組み
カーネルモジュールはOSの核となるカーネルとやり取りをします。モジュールを読み込むときはOSが自動的に初期化処理を呼び出し、使い終われば停止してメモリを解放します。読み込みは動的で、必要なときだけ機能を使える点が特徴です。削除も可能で、ハードウェアを取り外すときに安全に動作を止められるよう設計されています。
作成と読み込みの基本手順
実務ではC言語などを使ってカーネルモジュールを作成します。作成後は次のような流れで使います。まずモジュールをカーネルに読み込ませ、動作を確認します。その後、不要になればモジュールを取り外します。具体的なコマンド名は環境により異なりますが、一般的には以下のような作業を行います。読み込みにはモジュール名を指定します。取り外しは依存関係がないか確認してから行います。
| 項目 | 説明 |
|---|---|
| 読み込み | モジュールをカーネルに追加して機能を有効化する |
| 削除 | 不要になったモジュールをメモリから解放する |
| 依存関係 | 他のモジュールが利用している場合は先にそれを解決する |
なお、ここでの説明は初心者向けの概略です。実際には環境ごとに手順が細かく異なるため、公式ドキュメントを参照して安全に行うことが重要です。モジュール開発にはデバッグの観点やセキュリティの配慮が必要です。
実例と注意点
新しいデバイスを試す場合、まず公式のモジュールを探します。信頼できるソースのモジュールだけを使い、署名検証やセキュリティ設定を確認してください。モジュールのバージョンがカーネルと合っていないと、システムが不安定になることがあります。特に初心者の方は、仮想環境で練習するのがおすすめです。
カーネルモジュールの同意語
- ロード可能カーネルモジュール
- 実行中のカーネルに動的にロード・アンロードして機能を追加できるモジュールのこと。典型的にはデバイスドライバやファイルシステムを含む拡張機能を指す。
- カーネル拡張
- カーネルの機能を外部コードで拡張する目的のモジュール。一般にはデバイスドライバやファイルシステムなどを含む総称として使われる。
- LKM(Loadable Kernel Module)
- 英語表記の略称。ロード可能なカーネルモジュールを指し、日本語文献でも同義語として使われる。
- カーネル拡張モジュール
- カーネル機能を追加するためのモジュールのこと。名称として“拡張”を強調した表現。
- カーネルプラグイン
- カーネルに機能を追加するプラグイン形式のモジュールのこと。用途は柔軟な機能拡張やカスタマイズなど。
カーネルモジュールの対義語・反対語
- ユーザースペースプログラム
- OSのカーネル権限を持たず、ユーザー空間で動作するプログラム。カーネルを直接拡張するわけではなく、システムコールを介してカーネルとやり取りします。
- ユーザー空間ライブラリ
- ユーザー空間で動く共通機能を提供するライブラリ。アプリケーションから利用され、カーネルモジュールのようにOSを直接拡張するものではありません。
- アプリケーションソフトウェア
- 日常的に利用するアプリ(ウェブブラウザ、オフィスソフトなど)。多くはユーザー空間で動作します。
- ユーザーモードプログラム
- カーネルモードではなく、ユーザーモードで実行されるプログラム。システムの安全性を保つため、直接カーネルの機能拡張には触れません。
- ユーザー空間モジュール
- ユーザー空間で動くモジュール。カーネルモジュールとは異なり、カーネルの機能拡張としてロードされません。
- カーネル空間
- OSの最上位権限が動作する特権空間のこと。対義語として“ユーザー空間”が対になる概念です。
- ファームウェア
- ハードウェアを制御する低レベルのソフトウェア。OSのカーネルモジュールとは別の領域で動作することが多いです。
カーネルモジュールの共起語
- カーネルモジュール
- Linuxのカーネル空間で動作する、ロード可能な拡張機能。デバイスドライバやファイルシステム機能などを追加する。
- insmod
- 最小限の機能でモジュールをロードする基本コマンド。依存関係の自動解決は行われない場合が多い。
- rmmod
- ロード済みのモジュールをアンロードするコマンド。依存関係があるモジュールが残っていると失敗することがある。
- modprobe
- 依存関係を自動解決してモジュールのロード/アンロードを行う推奨コマンド。
- modinfo
- モジュールのメタデータ(ライセンス、作者、パラメータ、依存関係など)を表示する。
- lsmod
- 現在ロードされているモジュールの一覧を表示するコマンド。
- DKMS
- Dynamic Kernel Module Support。カーネルのアップグレード時にもモジュールを再構築・適用する仕組み。
- Makefile
- カーネルモジュールをビルドする際のビルドルールを定義するファイル。
- Kbuild
- カーネルビルドシステムの一部で、Kconfig/Makefileと連携してモジュールをビルドする。
- obj-m
- Makefileでビルド対象のモジュールを指定する宣言。モジュール名と依存を設定。
- MODULE_LICENSE
- モジュールのライセンスを宣言するマクロ。GPL互換性などの判定に使われる。
- MODULE_AUTHOR
- モジュール作者の情報を記述するマクロ。
- MODULE_DESCRIPTION
- モジュールの概要説明を記述するマクロ。
- MODULE_VERSION
- モジュールのバージョン情報を宣言することができるマクロ。
- MODULE_ALIAS
- デバイスとモジュールを紐づける別名を登録するマクロ。
- module_init
- モジュールがロード時に最初に実行する初期化関数を指定する。
- module_exit
- モジュールがアンロード時に実行されるクリーンアップ関数を指定する。
- module_param
- モジュールロード時に外部からパラメータを受け取るための宣言。
- module_param_array
- 配列型パラメータを受け取るための宣言。
- EXPORT_SYMBOL
- 別のモジュールがそのシンボルを参照できるよう公開する。
- EXPORT_SYMBOL_GPL
- GPLライセンスの下でのみ公開されるシンボルを宣言する。
- printk
- カーネル内のログ出力関数。ログレベルとともに出力される。
- kallsyms
- カーネルシンボル名とアドレスの対応情報。デバッグに使われる。
- depmod
- モジュールの依存関係を解決し、依存情報を格納するツール。/lib/modules 配下を整備する。
- CONFIG_MODULES
- カーネルビルド時にモジュール機能を有効化する設定。モジュールの読み込みを可能にする。
- カーネルヘッダ
- モジュールをビルドするために必要なカーネルのヘッダファイル群。
- カーネルソース
- カーネル本体のソースコード一式。モジュール開発時に参照する。
- PCI
- PCIデバイス用のデバイスドライバは、PCIバス経由のデバイスと通信するモジュール設計を指す。
- USB
- USBデバイス用のモジュール。ホットプラグ対応やバス依存の処理を含むことがある。
- NET
- ネットワーク関連のモジュール。NICドライバや仮想ネットワーク機能などを含む。
- FS
- ファイルシステム関連モジュール。新しいファイルシステムのサポートや機能追加を行う。
- CHAR_DEVICE
- 文字デバイスドライバ。キーボードやシリアルなど、文字単位で入出力を扱うデバイスのモジュール。
- BLOCK_DEVICE
- ブロックデバイスドライバ。ディスクやSSD等の高I/Oデバイスを扱うモジュール。
- デバイスドライバ
- 特定のハードウェアを操作するためのモジュール。カーネルモジュールの代表的用途。
- カーネル空間
- モジュールが動作する特権レベルの領域。ユーザー空間と区別される。
- 依存関係
- モジュール同士の互いに必要とする関係。ロード順や必要な他モジュールが関係する。
カーネルモジュールの関連用語
- カーネルモジュール
- Linuxカーネルに機能を動的に追加する部品。挿入・削除が可能で、必要な時だけカーネル空間へロードします。
- ロード可能カーネルモジュール
- カーネルに読み込み・アンロードできる設計のモジュール。実行中のカーネルに追加機能を提供します。
- カーネル
- OSの中核部分で、プロセス管理やメモリ管理、ハードウェアとのやり取りを担います。モジュールはこの空間で動作します。
- デバイスドライバ
- ハードウェアとソフトウェアの橋渡し役。モジュールとして提供され、特定デバイスの動作をカーネルに伝えます。
- insmod
- モジュールをカーネルに挿入するコマンド。依存関係は考慮されません。
- modprobe
- 依存関係を解決してモジュールを挿入・削除するコマンド。ブラックリストや設定も考慮します。
- rmmod
- モジュールをカーネルから削除するコマンド。使用中のモジュールは削除できません。
- modinfo
- モジュールの名前、バージョン、作者、依存関係などのメタ情報を表示します。
- MODULE_LICENSE
- モジュールのライセンスを宣言するマクロ。GPL などを指定します。
- MODULE_AUTHOR
- モジュールの作者を記述するマクロ。公開情報として表示されます。
- MODULE_DESCRIPTION
- モジュールの概要を説明するマクロ。ドキュメンテーションとして有用です。
- MODULE_VERSION
- モジュールのバージョン情報を宣言するマクロ。
- MODULE_DEVICE_TABLE
- 特定デバイスとモジュールの対応を登録し、自動挿入を可能にします。
- MODULE_PARAM
- モジュールに渡すパラメータ宣言の補助として使われるマクロの集合。
- module_param
- モジュールの起動時に外部から値を渡すパラメータを定義します。
- MODULE_PARAM_DESC
- パラメータの説明を付与するマクロ。ドキュメンテーションに役立ちます。
- module_param_named
- パラメータ名と表示名を別にする際に使うマクロ。
- EXPORT_SYMBOL
- 他のモジュールから利用できる関数や変数を公開します。
- EXPORT_SYMBOL_GPL
- GPLライセンス下でのみ公開するシンボルを設定します。
- カーネルシンボル
- 他のモジュールが参照できる関数や変数の集合。
- シンボルテーブル
- カーネルがエクスポートするシンボルの一覧表。
- printk
- カーネル内からログを出力する標準的な関数。
- kernel API / ABI
- モジュールが依存するカーネルAPIと互換性を表すABI。
- KBUILD
- カーネルモジュールをビルドする際のビルドシステムの名前。
- Makefile
- モジュールのビルド設定を記述するファイル。
- linux/module.h
- モジュール開発に必須のヘッダファイルを提供します。
- module_init
- モジュールの初期化関数を登録するマクロ。
- module_exit
- モジュールのクリーンアップ関数を登録するマクロ。
- struct module
- カーネル内のロード済みモジュール情報を表すデータ構造。
- /sys/module
- ロード済みモジュールの情報を参照できる sysfs のディレクトリ。
- /proc/modules
- 現在ロード中のモジュール一覧を表示する仮想ファイル。
- 依存関係
- 他のモジュールが必要な場合の読み込み順序や連携のこと。
- ブラックリスト (modprobe.d)
- 特定のモジュールのロードを禁止する設定ファイル群。
- 署名とセキュアブート
- モジュールの署名検証により不正なモジュールのロードを防ぐ仕組み。
- アーキテクチャ固有モジュール
- 特定のCPUアーキテクチャ向けにビルドされたモジュール。
- ビルトインモジュール
- カーネル本体に組み込まれ、別ファイルとしてロードしないモジュール。
- カーネル空間
- モジュールが動作する領域。ユーザー空間とは分離されています。
- sysfs
- カーネルとユーザー空間の橋渡しを行う仮想ファイルシステム。
- PCI_DEVICE_TABLE
- PCIデバイスIDとモジュールの対応を表すテーブル。
- USB_DEVICE_TABLE
- USBデバイスIDとモジュールの対応を表すテーブル。
カーネルモジュールのおすすめ参考サイト
- カーネルモジュールってなに? #初心者 - Qiita
- カーネルモジュールとは - IT用語辞典 e-Words
- カーネルとは?意味・用語説明 - KDDI法人サイト
- カーネルモジュールとは - IT用語辞典 e-Words
- Linuxカーネルモジュールとは?初心者向けにわかりやすく解説
- 1.カーネルとカーネルモジュール(第1章カーネル:基本管理コースII)



















