模块参数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中的显式声明类型参数使用方式

《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模块没有目录

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数