使用module_param来向内核模块传递参数

内核模块参数 本文主要介绍linux kernel 中的内核模块参数,包括内核模块参数相关的宏定义,参数,以及使用方法等前面的文章已经介绍了内核模块,内核模块参数就是内核模块使用的参数,像用户程序一样, 内核模块也可以接受命令行参数,这样就可以根据给定的参数动态的改变内核模块的行为。如下图所示是,内核模块参数在内核源码中的宏定义由上图所知, module_param()主要有3个参数,分别是nametypepermname: 用作内核模块参数的变量名称。 阅读详情

如果希望给一个内核模块传递参数,则可以通过module_param()。

参数用moudle_param宏定义来声明,它定义在moduleparam.h。

下面是module_param宏的定义:

/* This is the fundamental function for registering boot/module   

parameters. perm sets the visibility in sysfs: 000 means it's   

not there, read bits mean it's readable, write bits mean it's   

writable. */

#define __module_param_call(prefix, name, set, get, arg, perm)        /

     /* Default value instead of permissions? */            /

     static int __param_perm_check_##name __attribute__((unused)) =    /

     BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2));    /

     static char __param_str_##name[] = prefix #name;        /

     static struct kernel_param const __param_##name            /

     __attribute_used__                        /

     __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) /

     = { __param_str_##name, perm, set, get, arg }

 

#define module_param_call(name, set, get, arg, perm)                  /

     __module_param_call(MODULE_PARAM_PREFIX, name, set, get, arg, perm)

/* Helper functions: type is byte, short, ushort, int, uint, long,    ulong, charp, bool or invbool, or XXX if you define param_get_XXX,    param_set_XXX and param_check_XXX. */

#define module_param_named(name, value, type, perm)               /

     param_check_##type(name, &(value));                   /

     module_param_call(name, param_set_##type, param_get_##type, &value, perm); /

     __MODULE_PARM_TYPE(name, #type)

#define module_param(name, type, perm)                /

     module_param_named(name, name, type, perm)

module_param使用了3个参数: 变量名,它的类型,以及一个权限掩码。这个宏定义应当放在任何函数之外,典型的是出现在源文件的前面,定义如:

static int swap_xy = 0;

static int rotate = 0;

module_param(swap_xy, int, S_IRUGO);

module_param(rotate, int, S_IRUGO);

模块参数支持许多类型:

bool

invbool 一个布尔型(true或者false)值。

charp 一个字符指针值。内存为用户提供的字串分配,指针因此设置。

int

long

short

uint

ulong

ushort 基本的变长整型值。以 u 开头的是无符号值。

最后的 module_param 字段是一个权限值,应当使用<linux/stat.h>中定义的值。这个值控制谁可以存取这些模块参数在sysfs中的表示。如果perm 被设为0,就没有sysfs项。否则,出现在/sys/module下面,并带有给定的权限。使用S_IRUGO作为参数可以被所有人读取,但是不能改变。S_IRUGO|S_IWUSR允许root来改变参数。注意,如果一个参数被sysfs修改,你的模块看到的参数值也改变了,但是你的模块没有任何 其他的通知。因此你应当不要使模块参数可写。

linux编写一个简单的内核模块 编写一个简单的内核模块 (一)实验目的 Linux 操作系统的内核是单一体系结构(monolithic kernel)的,也就是说,整个内核是一个单独的非常大的程序。这样,系统的速度和性能都很好,但是可扩展性和维护性就相对比较差。为了弥补单一体系结构的这种缺陷,Linux操作系统使用了一种全新的机制-模块机制,用户可以根据需要,在不需要对内核重新编译的情况下,模块能动态地载入内核或从内核移出。 本... 阅读详情

相关推荐

【DIY】使用STM32及PID算法实现一个磁悬浮玩具

今天教大家来做一个磁悬浮玩具。

小白白学电子 1万+

关于module_param()宏

在用户态下编程可以通过main()的来传递命令行参数,而编写一个内核模块则通过module_param() module_param宏是Linux 2.6内核中新增的,该宏被定义在include/linux/moduleparam.h文件中,具体定义如下: #define module_param(name, type, perm) \module_param_named(name...

dieyuan1831的博客 862

WRF-Chem新手避坑指南:从chem_opt到emiss_opt,那些手册里没明说的参数配置实战

本文为WRF-Chem新手提供从chem_opt到emiss_opt的参数配置实战指南,解析官方文档中未明确的常见陷阱与解决方案。通过华北重霾案例,详细讲解化学机制选择、排放源配置及特殊参数组合的注意事项,帮助用户避开常见错误,提升模拟效率。

weixin_30897079的博客 281

Linux启动时对命令行参数的解析

<br /><br />【参考】<1>Linux启动bootargs参数分析:http://blog.chinaunix.net/u3/99423/showart_2213279.html<br /><2>Linux 2.6内核启动传递命令行的过程分析:http://soft.zdnet.com.cn/software_zone/2007/1017/561631.shtml<br /><br />【环境】    Linux内核版本:V2.6.20<br />    <br />【简介】    在嵌入式系统中

^_^ 5582

【MMDetection3.0实战】从零构建自定义数据集训练流程

本文详细介绍了使用MMDetection3.0框架从零开始构建自定义目标检测数据集的完整训练流程。内容涵盖环境配置、COCO格式数据准备、核心代码改造、模型配置与训练策略调优,以及最终的模型测试与验证,帮助开发者快速上手并训练自己的检测模型。

l6m7n8的博客 314

Windows 11最新WDK安装避坑指南:从Visual Studio配置到KMDF驱动开发

本文提供了在Windows 11系统上进行KMDF驱动开发的完整环境搭建与实战指南。针对最新WDK与Visual Studio的配置变化,详细解析了从独立安装WDK/SDK、创建首个KMDF驱动项目,到编译排错、部署调试的全流程,帮助开发者高效避坑,顺利开启Windows内核开发。

weixin_29302047的博客 528

linux驱动开发中常用函数--module_param()的用法

记录一下用到的module_param()函数的一些特性

xi_xix_i的博客 1823

小红书图文笔记图像批量爬取:Python爬虫实战与反反爬策略全解析

在当今社交媒体盛行的时代,小红书作为中国领先的生活方式分享平台,积累了海量的优质图文内容。对于数据分析师、市场研究人员或内容创作者来说,能够高效获取这些数据具有重要意义。本文将详细介绍如何使用Python构建一个高效、稳定的小红书图文笔记图像批量爬取工具,涵盖最新技术栈和反反爬策略。本文详细介绍了如何使用Python构建一个高效、稳定的小红书图文笔记图像批量爬取系统。通过结合Playwright、aiohttp等现代工具,实现了从列表页采集到图片下载的完整流程。

2201_76125261的博客 2364

学习笔记四 :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函数,所以向模块内部传入

weixin_45619852的博客 5156

OceanBase迁移平台OMS企业版部署

OceanBase迁移平台OMS企业版部署摘要: 本文档详细介绍了OceanBase迁移平台OMS企业版的部署流程,包含环境准备、OAT部署管理、MetaDB部署等关键步骤。

Sebastien23的博客 521

使用podspec创建iOS插件

概述 在WWDC 2014全球开发者大会上,苹果开放了动态库、App Extension等全新的功能,这为iOS插件化开发带来了可能。在iOS开发中,动态库是iOS提供的一种资源打包方式,可以将代码文件、头文件、资源文件和说明文档等集中在一起,并且可以在运行时进行动态加载。 目前,很多应用越做越复杂,应用程序也显得越来越臃肿。试想一下,如果将一些不常用的功能做成一个插件,然后根据用户的需求从网络中...

xiangzhihong8的专栏 992

module_param用于传递内核启动参数的细节

module_param用于传递内核启动参数的细节,module_param,module_param_cb,kernel-parameters.txt

zhaoxin1989的博客 1785

全志 camera: 4路AHD摄像头转MIPI

TP2815 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 MIPI 数据,从而实现在 T527 端来对数据进行处理和送显。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 9096

module_param 模块参数

转自:http://blog.sina.com.cn/s/blog_af9acfc601019nwg.html   模块参数 引导模块时,可以向它传递参数。要使用模块参数加载模块,这样写: insmod module.ko [param1=value param2=value ...] 为了使用这些参数的值,要在模块中声明变量来保存它们,并在所有函数之外的某个地方使用宏MODULE_P...

gaojing303504的博客 3226

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

module_param和module_param_array

linux驱动: 如何向模块传递参数, module_param和module_param_array 如何向模块传递参数,Linux kernel 提供了一个简单的框架. module_param(name, type, perm) name 既是用户看到的参数名,又是模块内接受参数的变量; type 表示参数的数据类型,是下列之一:byte, short, ushort, int, ...

大猫的博客 1648

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

驱动基础——带参数的内核模块

linux内核中,可以借助module_param和module_param_array函数完成参数传递,前者支持单个参数传递,后者支持多个参数传递。

uxlike的博客 1684

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux驱动内核模块传参module_param

本文介绍了Linux内核模块参数传递机制。通过module_param()函数可以定义模块参数,支持多种数据类型(byte/int/bool/charp等),并设置sysfs文件权限。文章详细说明了参数传递的实现方法,包括静态参数注册和动态回调机制。通过module_param_cb()可以注册回调函数,在参数修改时执行特定操作。文中提供了完整代码示例,展示了如何定义参数、处理参数更新,并指出字符串参数传递时的注意事项。这种参数传递机制为Linux驱动开发提供了灵活的配置方式,通过sysfs接口实现用户空间

weixin_59138228的博客 656

Linux内核学习-内核模块参数module_param

Linux2.6允许用户insmod的时候往内核模块里面传递参数,它主要使用module_param宏定义来实现这一功能。module_param的定义可以在include/linux/moduleparam.h文件里面查看到,它的原型为:module_param(name, type, perm);module_param_array(name, type, nump, perm);

Yao.GUET 9003

内核模块参数传递的全链路剖析:从module_param宏展开到sysfs动态配置的并发安全保障

缺省的只做类型转换,不做业务逻辑验证。如果一个阈值参数必须满足"1-10000之间且不能是质数"这样的约束,就需要自定义参数回调。以下是一个带验证的生产级示例,同时展示了如何在一个模块中混合使用简单参数和自定义回调参数。/* net_filter_params.c — 带多级验证的内核模块参数管理 *//* 基础参数:使用缺省param_ops *//* 自定义验证:阈值变更需触发级联检查 */return ret;/* 业务规则:范围+非特殊值 */

jiang_style的博客 4777

module_param的介绍

一般用户态传递参数是通过main函数,第一个参数表示args个数,即argc,第二个参数表示具体的参数。 在kernel态,无法通过这样的方式传递参数,一般使用module_param的方式,步骤如下: 1.使用module_param指定模块的参数 2.加载driver时给模块传递参数 source code如下: #include #include #incl

zhudaozhuan的专栏 1万+

Linux内核module_param的实现原理

如果默认的kernel_param_ops无法满足需求,驱动开发者可以在模块中定义自己的kernel_param_ops回调函数,以RDMA RXE驱动为例:当用户执行sudo insmod rdma_rxe add="xxxx"的时候,对应的自定义set就会被调用:通过这个例子也可以看出,模块参数的解析早于模块init入口函数的调用。

tugouxp的专栏 3579
上一篇: Linux 2.6中的字符设备驱动程序结构
下一篇: 如何设计Assertion-based Monitor(1)
sttypxx520
博客等级 码龄19年 8粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值