linux param是什麼

2023-03-10 10:01:15

linux param指的是「module_param」函數,其作用是傳遞命令列引數;在使用者態下程式設計可以通過「main()」的引數來傳遞命令列引數,而編寫一個核心模組則通過「module_param()」來傳遞引數。

本教學操作環境:linux5.9.8系統、Dell G3電腦。

linux param是什麼?

linux驅動之module_param的用法

從 main函數說起

我們在使用者態寫程式時都喜歡用main函數的如果引數來向程式內傳遞資料

#include <stlib.h>
#include <stdio.h>
int main(int argc,char **argv)
{
 exit(0);
}
登入後複製

其中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/module.h>

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");
登入後複製

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
0f349fedcb8afdf5c095367c9545283.jpg

模組安裝後在/sys/module資料夾下會生成 對應模組名字的資料夾,進入資料夾內
6bb68f4d88ae08033c7deded88b80dd.jpg

進入資料夾,資料夾內parameters資料夾內會會有之前程式中的num

1a08ab4dba0304e7d08248500af8141.jpg

2ef37815d8a8a2ab50b3aa344d152af.jpg

從圖片中可以看出核心在檔案系統中會生成對應的檔案讓使用者存取,並且模組中module_param宏定義中的perm設定了使用者唯讀許可權,所以num檔案許可權與其對應。
當然你也可以設定可寫許可權來改變輸入引數 的值,改變後核心模組中的 該 引數會改變但是不會有任何資訊提示。

相關推薦:《》

以上就是linux param是什麼的詳細內容,更多請關注TW511.COM其它相關文章!