linux param是什么

linux param指的是“module_param”函數,其作用是傳遞命令行參數;在用戶態下編程可以通過“main()”的參數來傳遞命令行參數,而編寫一個內核模塊則通過“module_param()”來傳遞參數。

linux 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 = %drn",__FUNCTION__,num); 	return 0; }  static void __exit param_exit(void) { 	printk("[%s]  num = %drn",__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
linux param是什么

模塊安裝后在/sys/module文件夾下會生成 對應模塊名字的文件夾,進入文件夾內
linux param是什么

進入文件夾,文件夾內parameters文件夾內會會有之前程序中的num

linux param是什么

linux param是什么

從圖片中可以看出內核在文件系統中會生成對應的文件讓用戶訪問,并且模塊中module_param宏定義中的perm設置了用戶只讀權限,所以num文件權限與其對應。
當然你也可以設置可寫權限來改變輸入參數 的值,改變后內核模塊中的 該 參數會改變但是不會有任何信息提示。

相關推薦:《從 main函數說起

我們在用戶態寫程序時都喜歡用main函數的如果參數來向程序內傳遞數據

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享