本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
linux param是什么?
linux驅(qū)動(dòng)之module_param的用法
(資料圖片僅供參考)
我們?cè)谟脩魬B(tài)寫程序時(shí)都喜歡用main函數(shù)的如果參數(shù)來向程序內(nèi)傳遞數(shù)據(jù)
#include <stlib.h>#include <stdio.h>int main(int argc,char **argv){ exit(0);}其中argc為傳入程序內(nèi)參數(shù)的個(gè)數(shù),argv為傳入的參數(shù) ,其中的第一個(gè)參數(shù)argv[0]為當(dāng)前文件的含路徑的名字,所以實(shí)際傳入程序內(nèi)的參數(shù)個(gè)數(shù)為argc-1個(gè)。
內(nèi)核模塊中沒有main函數(shù),所以向模塊內(nèi)部傳入?yún)?shù)可以通過module_param這個(gè)宏定義來實(shí)現(xiàn):
// 原型#define module_param(name, type, perm) \module_param_named(name, name, type, perm)
name:傳入?yún)?shù)名稱 type:傳入?yún)?shù)類型,有byte, short, ushort, int, uint, long, ulong, charp, bool,invbool這幾種類型 perm:這個(gè)為sysfs中資源的訪問權(quán)限,下面再細(xì)說,主要有以下權(quán)限類型在uapi/linux/stat.h中定義
#define S_IRWXU 00700 // 用戶讀寫可執(zhí)行權(quán)限#define S_IRUSR 00400 // 用戶讀權(quán)限#define S_IWUSR 00200 // 用戶寫權(quán)限#define S_IXUSR 00100 // 用戶可執(zhí)行權(quán)限#define S_IRWXG 00070 // 用戶組讀寫可執(zhí)行權(quán)限#define S_IRGRP 00040 // 用戶組讀權(quán)限#define S_IWGRP 00020 // 用戶組寫權(quán)限#define S_IXGRP 00010 // 用戶組可執(zhí)行權(quán)限#define S_IRWXO 00007 // 其他人可讀寫執(zhí)行權(quán)限#define S_IROTH 00004 // 其他人可讀權(quán)限#define S_IWOTH 00002 // 其他人可寫權(quán)限#define S_IXOTH 00001 // 其他人可執(zhí)行權(quán)限
模塊 代碼編寫:
#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.oelseKERNEL_DIR:=/lib/modules/$(shell uname -r)/buildCURRENT_DIR:=$(shell pwd)ccflags-y:=-std=gnu99 -Wno-declaration-after-statementall:$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) modulesclean:$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) cleanendif
編譯 程序,安裝模塊,然后dmesg
模塊安裝后在/sys/module文件夾下會(huì)生成 對(duì)應(yīng)模塊名字的文件夾,進(jìn)入文件夾內(nèi)
進(jìn)入文件夾,文件夾內(nèi)parameters文件夾內(nèi)會(huì)會(huì)有之前程序中的num
從圖片中可以看出內(nèi)核在文件系統(tǒng)中會(huì)生成對(duì)應(yīng)的文件讓用戶訪問,并且模塊中module_param宏定義中的perm設(shè)置了用戶只讀權(quán)限,所以num文件權(quán)限與其對(duì)應(yīng)。 當(dāng)然你也可以設(shè)置可寫權(quán)限來改變輸入?yún)?shù) 的值,改變后內(nèi)核模塊中的 該 參數(shù)會(huì)改變但是不會(huì)有任何信息提示。
相關(guān)推薦:《Linux視頻教程》
以上就是linux param是什么的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
關(guān)鍵詞: