溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux param指的是什么

發(fā)布時(shí)間:2023-03-10 09:38:39 來(lái)源:億速云 閱讀:159 作者:iii 欄目:建站服務(wù)器

這篇文章主要介紹“l(fā)inux param指的是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“l(fā)inux param指的是什么”文章能幫助大家解決問(wèn)題。

linux param指的是“module_param”函數(shù),其作用是傳遞命令行參數(shù);在用戶態(tài)下編程可以通過(guò)“main()”的參數(shù)來(lái)傳遞命令行參數(shù),而編寫(xiě)一個(gè)內(nèi)核模塊則通過(guò)“module_param()”來(lái)傳遞參數(shù)。

從 main函數(shù)說(shuō)起

我們?cè)谟脩魬B(tài)寫(xiě)程序時(shí)都喜歡用main函數(shù)的如果參數(shù)來(lái)向程序內(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)核模塊傳入?yún)?shù)

內(nèi)核模塊中沒(méi)有main函數(shù),所以向模塊內(nèi)部傳入?yún)?shù)可以通過(guò)module_param這個(gè)宏定義來(lái)實(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中資源的訪問(wèn)權(quán)限,下面再細(xì)說(shuō),主要有以下權(quán)限類型在uapi/linux/stat.h中定義

#define S_IRWXU 00700    // 用戶讀寫(xiě)可執(zhí)行權(quán)限
#define S_IRUSR 00400    // 用戶讀權(quán)限
#define S_IWUSR 00200    // 用戶寫(xiě)權(quán)限
#define S_IXUSR 00100    // 用戶可執(zhí)行權(quán)限

#define S_IRWXG 00070    // 用戶組讀寫(xiě)可執(zhí)行權(quán)限
#define S_IRGRP 00040    // 用戶組讀權(quán)限
#define S_IWGRP 00020    // 用戶組寫(xiě)權(quán)限
#define S_IXGRP 00010    // 用戶組可執(zhí)行權(quán)限

#define S_IRWXO 00007    // 其他人可讀寫(xiě)執(zhí)行權(quán)限
#define S_IROTH 00004    // 其他人可讀權(quán)限
#define S_IWOTH 00002    // 其他人可寫(xiě)權(quán)限
#define S_IXOTH 00001    // 其他人可執(zhí)行權(quán)限

模塊 代碼編寫(xiě):

#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
linux param指的是什么

模塊安裝后在/sys/module文件夾下會(huì)生成 對(duì)應(yīng)模塊名字的文件夾,進(jìn)入文件夾內(nèi)
linux param指的是什么

進(jìn)入文件夾,文件夾內(nèi)parameters文件夾內(nèi)會(huì)會(huì)有之前程序中的num

linux param指的是什么

linux param指的是什么

從圖片中可以看出內(nèi)核在文件系統(tǒng)中會(huì)生成對(duì)應(yīng)的文件讓用戶訪問(wèn),并且模塊中module_param宏定義中的perm設(shè)置了用戶只讀權(quán)限,所以num文件權(quán)限與其對(duì)應(yīng)。
當(dāng)然你也可以設(shè)置可寫(xiě)權(quán)限來(lái)改變輸入?yún)?shù) 的值,改變后內(nèi)核模塊中的 該 參數(shù)會(huì)改變但是不會(huì)有任何信息提示。

關(guān)于“l(fā)inux param指的是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI