ホームページ  >  記事  >  運用・保守  >  Linuxパラメータとは何ですか

Linuxパラメータとは何ですか

藏色散人
藏色散人オリジナル
2023-03-10 08:58:552476ブラウズ

linux param は、コマンド ライン パラメータを渡すために使用される「module_param」関数を指します。ユーザー モードでのプログラミングでは、カーネル モジュールのパス パラメータを作成するときに、「main()」パラメータを介してコマンド ライン パラメータを渡すことができます。 「module_param()」を通じて。

Linuxパラメータとは何ですか

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

Linux param とは何ですか?

Linux ドライバーでの module_param の使用法

main 関数から始める

ユーザー モードでプログラムを作成するとき、誰もが main 関数の if パラメーターを使用してプログラムにデータを渡します

#include <stlib.h>
#include <stdio.h>
int main(int argc,char **argv)
{
 exit(0);
}</stdio.h></stlib.h>

ここで、argc はプログラムに渡されるパラメータの数、argv は渡されるパラメータ、最初のパラメータ argv[0] はパスを含む現在のファイルの名前であるため、パラメータの実際の数はプログラムに渡されるのは argc-1 です。

カーネル モジュールにパラメータを渡す

カーネル モジュールには main 関数がないため、モジュールにパラメータを渡すには module_param マクロ定義を使用します。

// 原型
#define module_param(name, type, perm)     \
		module_param_named(name, name, type, perm)

name: 受信パラメータ名
type: 受信パラメータのタイプ (byte、short、ushort、int、uint、long、ulong、charp、bool、invbool を含む)
perm: これはアクセス許可です。 sysfs 内のリソースへのアクセスについては、以下で詳しく説明します。次の権限タイプは主に uapi/linux/stat.h で定義されています

#define S_IRWXU 00700    // 用户读写可执行权限
#define S_IRUSR 00400    // 用户读权限
#define S_IWUSR 00200    // 用户写权限
#define S_IXUSR 00100    // 用户可执行权限

#define S_IRWXG 00070    // 用户组读写可执行权限
#define S_IRGRP 00040    // 用户组读权限
#define S_IWGRP 00020    // 用户组写权限
#define S_IXGRP 00010    // 用户组可执行权限

#define S_IRWXO 00007    // 其他人可读写执行权限
#define S_IROTH 00004    // 其他人可读权限
#define S_IWOTH 00002    // 其他人可写权限
#define S_IXOTH 00001    // 其他人可执行权限

モジュール コードの記述:

#include <linux>

int num = 100;
module_param(num,int,S_IRUSR);

static int __init param_init(void)
{
	printk("[%s] num = %d\r\n",__FUNCTION__,num);
	return 0;
}

static void __exit param_exit(void)
{
	printk("[%s]  num = %d\r\n",__FUNCTION__,num)
}

module_init(param_init);
module_exit(param_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Chen");</linux>

Makefile ファイル:

ifneq ($(KERNELRELEASE),)
	obj-m:=param.o
else
	KERNEL_DIR:=/lib/modules/$(shell uname -r)/build
	CURRENT_DIR:=$(shell pwd)
	ccflags-y:=-std=gnu99 -Wno-declaration-after-statement
all:
	$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) modules
clean:
	$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) clean
endif

プログラムをコンパイルし、モジュールをインストールし、dmesg
Linuxパラメータとは何ですか

モジュールをインストールすると、/sys/module フォルダーにモジュール名に対応するフォルダーが生成されますをクリックして、フォルダーに入ります
Linuxパラメータとは何ですか

フォルダーを入力すると、フォルダー内のパラメーターフォルダーに前のプログラムの num があります。

Linuxパラメータとは何ですか

Linuxパラメータとは何ですか

この図から、カーネルがユーザーがアクセスできるようにファイル システム内に対応するファイルを生成し、モジュール内の module_param マクロ定義の perm がユーザーの読み取り専用を設定していることがわかります。許可なので、num ファイルの許可がそれに対応します。
もちろん、入力パラメータの値を変更するための書き込み権限を設定することもできます。変更後、カーネル モジュール内のパラメータは変更されますが、情報プロンプトは表示されません。

関連する推奨事項: 「Linux ビデオ チュートリアル

以上がLinuxパラメータとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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