模块参数module_param

2024-04-16 08:18
文章标签 参数 模块 module param

本文主要是介绍模块参数module_param,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*Linux驱动源码hellop.c*/

#include<linux/init.h>

#include<linux/module.h>

#include<linux/moduleparam.h>

 

static char *whom="bufan";

static int howmany=1;

static int paramA[] = {1,2,3,4,5,6,7,8};

static int paramA_no = 1;

module_param(howmany,int,S_IRUGO);

module_param(whom,charp,S_IRUGO);

module_param_array(paramA, int , &paramA_no , S_IRUGO);

 

static int __init hellop_init(void)

{   /*模块初始化函数*/

       int i;

       for (i = 0; i < howmany; i++)

        printk(KERN_ALERT "(%d) Hello, %s !\n", i, whom);

       for (i = 0; i < paramA_no; i++)

        printk(KERN_ALERT "paramA[%d] : %d\n", i, paramA[i]);

       return 0;

}

static void __exit hellop_exit(void)

{     /*模块卸载函数*/

       printk(KERN_ALERT "Goodbye,cruelworld\n");

}

 

module_init(hellop_init);

module_exit(hellop_exit);

 

MODULE_LICENSE("DualBSD/GPL");

要使用模块参数,需要包含头文件linux/moduleparam.h,该文件中有对

module_param宏的声明。

module_param()宏来声明模块参数,module_param()宏有三个参数,变量名,类型,以及用于sysfs入口项的许可掩码

模块参数类型有:

布尔值:bool,invbool

字符串:charp

不同长度整形值:int,long,short,uint,ulong,ushort

访问许可掩码

任何人可读取该参数,但不能修改:S_IRUGO

允许root用户可以修改:S_IRUGO|S_IWUSR

1.单一的模块参数

在驱动中就可以使用howmany,whom这两个变量了,这两个变量定义了初值,如果insmod时没有指定参数时,程序采用的是初值。

insmod hellop.ko howmany=10 whom="hello"

如果insmod时指定了参数值,则程序将使用传进来的值,即howmany的值为10,whom的值为hello。

2.数组参数

使用宏module_param_array来声明

module_param_array(name,type, nump, perm)

name为数组名

type为数组元素类型

nump是一个整形变量

perm为访问掩码

static int paramA[] = {1,2,3,4,5,6,7,8};

static int paramA_no = 1;

module_param_array(paramA, int , &paramA_no , S_IRUGO);

如果不指定数组参数,paramA_no为初始值1,如果指定了数组参数,则paramA_no会被设置为提供数组参数的元素个数

如insmod hellop.ko paramA=5,6,4,1,3

paramA_no为5

如果insmod指定参数时超过paramA容量,比如8,则hellop.ko是不能被加载的

注意paramA_no这个不是模块参数,不能在加载时指定其大小,它是自动计算数组元素数目的值

要编译该驱动,直接修改hello的Makefile,将hello.o改成hellop.o即可

这篇关于模块参数module_param的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908262

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录