ホームページ  >  記事  >  運用・保守  >  Linuxモジュールとはどういう意味ですか?

Linuxモジュールとはどういう意味ですか?

WBOY
WBOYオリジナル
2022-03-04 11:20:552876ブラウズ

Linux では、モジュールとは、デバイス ドライバー、ファイル システム、その他のコンポーネントを Linux カーネルに追加する方法であり、スタンドアロン プログラムとしてコンパイルできる関数とデータ型のコレクションです。カーネル空間に静的にロードすることも、動的にロードすることもできます。

Linuxモジュールとはどういう意味ですか?

#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。

Linux モジュールとは何ですか?

モジュールは、デバイス ドライバー、ファイル システム、その他のコンポーネントを 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。