• 技术文章 >运维 >linux运维

    linux param是什么

    藏色散人藏色散人2023-03-10 08:58:55原创103

    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视频教程

    以上就是linux param是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:param linux
    上一篇:linux可以tts吗 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • linux下字符设备有哪些• ios是linux吗• linux比windows更稳定吗• linux可以tts吗
    1/1

    PHP中文网