共计 1944 个字符,预计需要花费 5 分钟才能阅读完成。
这篇文章主要介绍“linux param 指的是什么”的相关知识,丸趣 TV 小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux param 指的是什么”文章能帮助大家解决问题。
linux param 指的是“module_param”函数,其作用是传递命令行参数;在用户态下编程可以通过“main()”的参数来传递命令行参数,而编写一个内核模块则通过“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
模块安装后在 /sys/module 文件夹下会生成 对应模块名字的文件夹,进入文件夹内
进入文件夹,文件夹内 parameters 文件夹内会会有之前程序中的 num
从图片中可以看出内核在文件系统中会生成对应的文件让用户访问,并且模块中 module_param 宏定义中的 perm 设置了用户只读权限,所以 num 文件权限与其对应。
当然你也可以设置可写权限来改变输入参数 的值,改变后内核模块中的 该 参数会改变但是不会有任何信息提示。
关于“linux param 指的是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注丸趣 TV 行业资讯频道,丸趣 TV 小编每天都会为大家更新不同的知识点。