历史上的今天
返回首页

历史上的今天

今天是:2024年12月31日(星期二)

正在发生

2021年12月31日 | 4412 内核模块传参数

2021-12-31 来源:eefocus

单个参数 

  • 应用程序中可以在main的参数传值

  • 头文件在"include/linux/moduleparam.h"

  • 内核模块可以通过module_param来传单个参数

    • module_param(name, type, perm)

    • name:模块参数的名称

    • type:模块参数的数据类型(支持int long short uint ulong ushort 类型)

    • perm:模块参数的访问权限(S_IRUSR参数表示所有文件所有者可读)

 

多个参数

  • 传递多个参数module_param_array(name, type, nump, perm)

    • name:模块参数名称

    • type:模块参数的数据类型(支持int long short uint ulong ushort类型)

    • nump:保存参数个数的地址

    • perm:模块参数的访问权限(S_IRUSR参数表示所有文件所有者可读)

 

内核模块传参数

  • 参数perm表示此参数在sysfs文件系统中所对应的文件结点的属性,其权限在include/linux/stat.h中有定义

  • 变量perm

    • #define S_IRUSR 00400 文件所有者可读

    • #define S_IWUSR 00200 文件所有者可写

    • #define S_IXUSR 00100 文件所有者可执行

    • #define S_IRGRP 00040 与文件所有者同组的用户可读

    • #define S_IWGRP 00020

    • #define S_IXGRP 00010

    • #define S_IROTH 00004 与文件所有者不同组的用户可读

    • #define S_IWOTH 00002

    • #define S_IXOTH 00001

将数字最后三位转化为二进制:xxx xxx xxx,高位往低位依次看,第一位为1表示文件所有者可读,

第二位为1表示文件所有者可写,第三位为1表示文件所有者可执行

接下来三位表示文件所有者同组成员的权限,再下来三位为不同组用户权限

 

  • 将Makefile命令clean完善,执行clean命令可以将所有无关的文件删除

  • 在02_DriverModule_01例程的基础上编写简单模块module_param,测试模块传参数,并将传递的参数打印出来。

    • insmod /mnt/udisk/module_param.ko module_arg1=10 module_arg2=20 int_array=11,12,13,14,15,16,17,18

    • cat /sys/module/module_param/parameters/xxx 可以查询参数

#include

#include


/* define module_param module_param_array header file */

#include

/* define perm's head file*/

#include


MODULE_LICENSE("Dual BSD/GPL");

MODULE_AUTHOR("TOPEET");


static int module_arg1, module_arg2;

static int int_array[50];

static int int_num;


module_param(module_arg1, int, S_IRUSR);

module_param(module_arg2, int, S_IRUSR);

module_param_array(int_array, int, &int_num, S_IRUSR);


static int hello_init(void)

{

        int i;

        printk(KERN_EMERG "module_arg1 is %d!n", module_arg1);

        printk(KERN_EMERG "module_arg2 is %d!n", module_arg2);

        if(int_num > 0) {

                for(i=0;i                        printk(KERN_EMERG "int_array[%d] is %d!n", i, int_array[i]);

                }

        }

        printk(KERN_EMERG "Hello World enter!n");

        return 0;

}


static void hello_exit(void)

{

        printk(KERN_EMERG "HELLO World exit!n");

}


module_init(hello_init);

module_exit(hello_exit);


测试效果:


[root@iTOP-4412]# insmod module_param.ko module_arg1=10 module_arg2=20 int_array                           

=11,12,13,14,15,16,17,18

[15894.520387] module_arg1 is 10!

[15894.522007] module_arg2 is 20!

[15894.525113] int_array[0] is 11!

[15894.528173] int_array[1] is 12!

[15894.531350] int_array[2] is 13!

[15894.534412] int_array[3] is 14!

[15894.537579] int_array[4] is 15!

[15894.540702] int_array[5] is 16!

[15894.543786] int_array[6] is 17!

[15894.546949] int_array[7] is 18!

[15894.550068] Hello World enter!

[root@iTOP-4412]# cat /sys/module/mo                                                                       

module_param/  mousedev/

[root@iTOP-4412]# cat /sys/module/module_param/parameters/                                                 

int_array    module_arg1  module_arg2

[root@iTOP-4412]# cat /sys/module/module_param/parameters/module_arg1                                      

10

[root@iTOP-4412]# cat /sys/module/module_param/parameters/*                                                

11,12,13,14,15,16,17,18

10

20


推荐阅读

史海拾趣

Displaytech公司的发展小趣事

2012年,Displaytech进行了公司重组,SEACOMP成为公司各部门的主要实体。这次重组不仅优化了公司的组织架构,也进一步整合了公司的资源,提高了运营效率。同时,公司还在中国东莞购买了一家制造工厂,命名为MH MFG,加强了电子合同制造部门的力量。

这些故事只是Displaytech公司发展历程中的一部分,但它们充分展示了公司在电子行业中的实力、创新精神和国际化视野。通过不断的技术创新、产品升级和市场拓展,Displaytech已经成为电子行业中一家具有影响力的企业。

B&K Precision公司的发展小趣事

随着业务的不断发展,科恩和班意识到电子测试和测量领域的巨大潜力。1951年,他们将公司更名为B&K Precision,并开始扩展业务,涉足其他电子测试和测量领域。工程师们凭借在电视测试设备领域的丰富经验,不断研发新产品,获得了多项专利,并推动公司迅速成为全球电子测量领域的领导者。

AMI [American Megatrends Inc]公司的发展小趣事

随着电子行业的不断发展,B&K Precision始终保持着创新的步伐。公司不断推出具有创新性和竞争力的新产品,如数字电流表、三路输出直流清洁电源等,满足了市场对于高精度、高可靠性测试仪器的需求。这些产品的推出不仅提升了公司的市场份额,也进一步巩固了公司在电子行业中的地位。

Evans Capacitor Company公司的发展小趣事

面对数字化浪潮的冲击,ECC决定进行数字化转型以提升竞争力。公司引入了先进的生产设备和管理系统,实现了生产过程的自动化和智能化。同时,ECC还建立了大数据分析平台,对市场需求、客户需求等数据进行深入分析,为公司的决策提供有力支持。数字化转型使得ECC在市场竞争中更加灵活和高效。

Alpha (Taiwan)公司的发展小趣事

面对全球环保意识的日益增强,Alpha (Taiwan)公司积极响应号召,致力于绿色电子产品的研发和生产。公司投入大量资金研发环保材料和技术,成功推出了一系列绿色环保电子产品。这些产品不仅具有优异的性能,而且在使用过程中对环境的影响较小,符合现代社会的环保理念。此外,公司还积极参与环保公益活动,宣传环保知识,推动电子行业的绿色发展。

Bestar Electric公司的发展小趣事

为了进一步提升竞争力,Bestar Electric开始整合产业链资源。公司通过与供应商建立长期合作关系,确保原材料的稳定供应;同时,公司还涉足电子产品的组装和制造领域,实现了产业链的垂直整合。此外,公司还积极探索多元化发展路径,涉足相关领域,如智能家居、物联网等,以拓展新的增长点。

问答坊 | AI 解惑

了解逻辑分析仪

 逻辑分析仪是利用时钟从测试设备上采集和显示数字信号的仪器,最主要作用在于时序判定。由于逻辑分析仪不像示波器那样有许多电压等级,通常只显示两个电压(逻辑1和0),因此设定了参考电压后,逻辑分析仪将被测信号通过比较器进行判定,高于参考 ...…

查看全部问答>

串行通信接口典型应用举例

串行通信接口典型应用举例…

查看全部问答>

移植goahead webserver的问题

..\\main.c:28: ..\\uemf.h: No such file or directory ..\\main.c:29: ..\\wsIntrn.h: No such file or directory 以上两个头文件均已经加入,但还是出现错误! dependency generation failed: ccppc: No input files 提示这个 怎么弄tffs ...…

查看全部问答>

CDMA模块哪种比较好呢?价格低一些

老板准备买个CDMA Modem,用来发短信…

查看全部问答>

高分求助在CE上,程序变慢很特殊的问题

通过RS232,TCP/IP实现PC与PDA的文件传输 现在一个特别奇怪的问题是,在Mobile上正常 在CE上,程序运行来,没有点传输也正常,等开始发送文件时,系统还是正常,等文件传输完时,PDA机器就会变得很卡了 如果在传时去点,就不会卡,反而是传完,就变得很卡, ...…

查看全部问答>

关于用超级终端AT命令读取诺基亚手机短信的问题

   请问诺基亚5200通过蓝牙驱动IVT BlueSoleil与电脑连接,并打开蓝牙串行端口服务。然后在PC机上的超级终端里面连接到此手机蓝牙串口,并可以发送AT命令,但是奇怪的是,发AT可以返回OK,也可以发一些查询型号的AT命令,都有返回。但是 ...…

查看全部问答>

STM32一定要集成NetPHY吗?

为什么一定要集成PHY呢?难道嵌入式系统就一定要集成PHY?集成PHY有其好处亦有其坏处,好处无非就是total cost,集成度等方面有优势,坏处其实也不少:1.无法满足某些安规标准,有些场合是需要光耦隔离的,这个时候就不能用了;2.增加芯 ...…

查看全部问答>

求助

初来乍到 请问各位大虾有什么MSP430的资料供小生参考…

查看全部问答>

学生求教一个问题

 本人大学生,期末结业考试需要讲述这个文献,但是专业课程没有涉及很深的传感器,比较迷茫,求教各位专家们!…

查看全部问答>

LED 散热设计原理及结温等相关技术参数的计算公式

LED 散热设计原理及结温等相关技术参数的计算公式 [ 本帖最后由 qwqwqw2088 于 2012-7-23 09:27 编辑 ]…

查看全部问答>