カーネルモジュールとは?初心者がすぐにわかる基本と使い方ガイド共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
カーネルモジュールとは?初心者がすぐにわかる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢: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とモジュールの対応を表すテーブル。

カーネルモジュールのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14202viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2121viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1036viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
735viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
677viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
654viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
567viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
514viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
494viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
491viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
461viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
444viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
422viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
379viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
374viws
select句・とは?初心者でも分かるSQLの基本と使い方共起語・同意語・対義語も併せて解説!
367viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
347viws
ダイレクトチャットとは?初心者向けガイドで使い方と注意点を徹底解説共起語・同意語・対義語も併せて解説!
328viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
279viws
解像度スケールとは?初心者でも分かる解像度スケールの基礎と使い方共起語・同意語・対義語も併せて解説!
279viws

新着記事

インターネット・コンピュータの関連記事