Linux では、モジュールとは、デバイス ドライバー、ファイル システム、その他のコンポーネントを Linux カーネルに追加する方法であり、スタンドアロン プログラムとしてコンパイルできる関数とデータ型のコレクションです。カーネル空間に静的にロードすることも、動的にロードすることもできます。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
モジュールは、デバイス ドライバー、ファイル システム、その他のコンポーネントを Linux カーネルに追加できるメソッドであり、カーネルの再コンパイルやシステムの再起動は必要ありません。カーネルの場合、対処する必要があるのは、モジュールのロードとアンロード、およびモジュール間の依存関係です。モジュールはカーネル空間で実行されるため、カーネルが提供する関数を使用する必要がありますが、モジュールを使用して、カーネル モード プログラミングの方法である対応するカーネル関数を呼び出すこともできます。モジュール ファイルの本質は、通常 *.ko の形式の再配置可能なバイナリ ファイルです。
Linux モジュールは、静的または動的メソッドを通じてカーネル空間にロードできます。静的ロードとは、カーネルの起動プロセス中のロードを指します。動的ロードとは、カーネルの実行中の任意の時点でのロードを指します。モジュールがカーネルにロードされると、そのモジュールはカーネル コードの一部になります。モジュールがシステムにロードされると、システムはカーネル内のシンボル テーブルを変更し、新しくロードされたモジュールによって提供されるリソースとシンボルをカーネル シンボル テーブルに追加して、モジュール間の通信を容易にします。
モジュールの構成
Linuxカーネルモジュールは主に以下の部分から構成されます。
モジュールローディング関数(必須): カーネル モジュールが insmod コマンドを通じてロードされると、モジュールのロード関数がカーネルによって自動的に実行され、このモジュールに関連する初期化作業が完了します;
モジュール アンロード関数 (必須):モジュールが rmmod コマンドによってアンロードされると、モジュールのアンロード関数がカーネルによって自動的に実行され、モジュールのロード関数とは逆の関数が完了します。
モジュール ライセンス ステートメント (必須): モジュール ライセンス (LICENSE) ステートメントカーネル モジュールの権限について説明します。LICENSE を宣言していない場合は、モジュールのロード時にカーネル汚染の警告が表示されます。
モジュール パラメーター (オプション): モジュール パラメーターは、モジュールのロード時にモジュールに渡すことができる値です。モジュール内のグローバル変数に対応します。
モジュール エクスポート シンボル (オプション) ): カーネル モジュールはシンボル (関数または変数に対応するシンボル) をエクスポートできるため、他のモジュールがこのモジュール内の変数または関数を使用できるようになります;
モジュール作成者およびその他の情報の宣言 (オプション)。
モジュールの例:
//内核头文件 #include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> //加载函数 static int __init init_hello_module(void){ //内核打印函数,linux系统使用dmesg命令可以查看打印信息 printk(KERN_INFO "Hello World\n"); return 0; } //卸载函数 static void __exit exit_hello_module(void){ printk(KERN_INFO "Exit the Hello world Module!\n"); } module_init(init_hello_module); module_exit(exit_hello_module); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Eric"); MODULE_VERSION("v0.1"); MODULE_DESCRIPTION("TEST FOR MODULE");
モジュールに対応する Makefile:
#Makefile obj-m:=hello.o KERNELBUILD:=/lib/modules/$(shell uname -r)/build all: make -C $(KERNELBUILD) M=$(shell pwd) modules clean: make -C $(KERNELBUILD) M=$(shell pwd) clean
関連する推奨事項: 「Linux ビデオ チュートリアル 」
# #
以上がLinuxモジュールとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。