模块参数与符号

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

模块参数

module_param(name,type, perm);
module_param_array(name, type, num, perm);
perm表示该参数在sysfs文件系统中所对应的文件节点的属性;你应该使用<linux/stat.h>中定义的权限值;这个值决定谁可以存取这些模块参数在sysfs文件系统中的表示;当perm为0时,表示此参数不存在sysfs文件系统下对应的文件节点;否则,模块被加载后,在/sys/module/目录下将会出现以此模块名命名的目录,带有给定的权限;在该目录下,有一个parameters子目录,在里面每个文件对应一个参数,参数值就在以该参数名命名的文件中。
注意:如果一个参数被sysfs修改了,那么你的模块看到的参数值也被修改了,但是你的模块不会收到任何通知;你应当不要使模块参数可写,除非你准备好检测这个改变并因而作出反应。

模块符号

EXPORT_SYMBOL标签内定义的函数对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用。

加入B中调用A中导出函数
[1] 在模块A中c文件或者头文件中使用EXPORT_SYMBOL(xxxx)导出函数.有些需要添加编译选项-DEXPORT_SYMTAB.
[2] 在模块B中用"extern" 申明函数(如, extern int xxxx);申明以后就能够直接使用导出的函数了。
另外:在导出函数以后,可以使用 cat  proc/kallsyms来查看所有的导出符号,其中属性为t的标识是不能被调用的,所以如果导出符号是t类型,那么无法直接被其他模块使用。
无法导出问题解决
方法一:在A模块编译好后会生成符号表文件Module_symvers,里面有函数地址和函数名对应关系,把这个文件拷贝到需要调用的B的源代码下,替换B的该文件。
然后重新编译B模块.这样就能够让B调用A的函数,以后加载模块顺序也必须先A后B,卸载相反。
方法二:将两个模块放在一个目录下,进行编译。其实和方法一类似。
这样就能够成功的实现两个模块之间的函数调用,比如KVM如果需要和驱动模块相互调用,就能使用这个方法。如果是两个模块之间需要相互调用,可以让驱动模块函数导出,KVM模块将函数指针当做回调函数传给驱动,是想双方的函数调用通讯。
/*
* 内核符号导出 给其他模块使用 使用前要申明一下
* 另外从 /proc/kallsyms 可以查看内核符号表的相关信息(eg.所在内存地址)
* eg. cat /proc/kallsyms | grep integar
*/
 
#include<linux/init.h>
 #include<linux/module.h>

 MODULE_LICENSE("Dual BSD/GPL");

 static int __init symbol_init(void)
 {
 printk("<0> symbol_init\n");
 return 0;
 }
 int add_integar(int a, int b)
 {
 return (a + b);
 }

 int sub_integar(int a, int b)
 {
 return (a - b);
 }

 static void __exit symbol_exit(void)
 {
 printk("<0> symbol_exit\n");
 }
 EXPORT_SYMBOL(add_integar);
 EXPORT_SYMBOL(sub_integar);
 module_init(symbol_init);
 module_exit(symbol_exit);

/*
*使用其他内核模块导出的符号
*/
 
#include<linux/module.h>
 #include<linux/init.h>
 extern int add_integar(int, int);
 extern int sub_integar(int, int);

 MODULE_LICENSE("GPL");

 static int __init use_symbol_init(void)
 {
 printk("<0> use_symbol_init");
 printk("<0> 1+2 = %d\n",add_integar(1,2));
 printk("<0> 3-2 = %d\n",sub_integar(3,2));
 return 0;
 }

 static void __exit use_symbol_exit(void)
 {
 printk("<0> Module exit!\n");
 }
 module_init(use_symbol_init);
 module_exit(use_symbol_exit);

内核模块参数传入与符号导出 一:模块参数 #include<linux/module.h> //#include<linux/moduleparam.h> //#include<linux/stat.h> #define CNT 1 static int cnt = CNT; static char *hi = "Hi,Linux\n"; static int arr[] = {1,2,3,4,5,6}; static int nums = sizeof(arr)/sizeof(int); /*类 阅读详情

相关推荐

Windows游戏多开检测实战:5种技术原理与破解方法详解(附C++代码)

本文深入解析了Windows游戏多开检测的5种核心技术原理,包括进程枚举、互斥体、信号量、窗口及文件映射检测,并详细探讨了对应的破解方法。通过分析这些基于进程和内核对象的攻防机制,为开发者与逆向爱好者提供了从底层理解Windows系统进程管理的实战视角,并附有核心C++代码示例。

weixin_29315091的博客 243

模块参数

当编写一个内核模块时,可以指定一个变量为模块的参数,在模块被加载的时候指定模块参数的值,这样可以动态的改变模块的行为。在内核中,模块参数是通过以下宏来定义的            module_param(name, type, perm);              module_param_array(name, type, &num, perm);  //这里第三个参数为可选的整形变量的

692

工控安全政策系列导读:国际标准IEC 62443标准系列

IEC 62443由ANSI/ISA提出,被ISO/IEC采纳,所以该标准会以不同的名字出现,包括:ANSI/ISA-99,ISA-99,ISA 62443,ISO/IEC 62443,ISO 62443,IEC 62443。其中IEC 62443-2-1已等同采纳为国标,于2016年10月发布,标准编号为GB/T 33007。 IEC 62443是在国...

weixin_34132768的博客 2621

模块符号表导出

EXPORT_SYMBOL_GPL(sym) //导出符号表 usr内核模块依赖,exp内核模块,所以在加载usr.ko之前,必须先加载exp.ko 加载后的执行顺序:

yw946711214的博客 676

什么是无人机电源管理模块?电源管理模块有什么用处?

我来描述一下我的问题情景,电源管理模块的定义是,这里给出这个PX4官方对于电源管理模块的一些介绍,补充一下锂电池的放电原理大家就可以更好理解为什么需要电源管理模块

HRWVY0725的博客 2272

1.1.4 运用防火墙实现入侵防御

摘要:本文详细介绍了某公司网络拓扑中防火墙FW1的配置过程。主要内容包括:1)通过web界面登录防火墙;2)配置三个接口的IP地址及所属安全区域;3)创建两个入侵防御配置文件(anti_untrust和anti_trust);4)配置安全策略untrust2dmz和trust2dmz,分别允许公网/内网访问WWW服务器;5)保存配置。操作步骤配有详细截图说明,涉及接口配置、安全区域划分、入侵防御策略设定等关键环节,最终实现内外网对服务器Server1的安全访问控制。(149字)

Ljs040411的博客 2130

模块标识

模块标识 模块标识是一个字符串,用来标识模块。在 require、 require.async 等加载函数中,第一个参数都是模块标识。 Sea.js 中的模块标识是 CommonJS 模块标识 的超集: 一个模块标识由斜线(/)分隔的多项组成。 每一项必须是小驼峰字符串、 . 或 .. 。 模块标识可以不包含文件后缀名,比如 .js 。 模块标识可以是 相对 或 顶级 标识。如果第...

伊昭荣(C/C++) 689

别再手动配网了!用安信可PB-02模组+PHY Mesh App,5分钟搞定蓝牙Mesh智能灯群控

本文详细介绍了如何使用安信可PB-02模组和PHY Mesh App快速搭建蓝牙Mesh智能灯群控系统。通过5分钟的硬件连接和固件烧录,用户可实现多灯分组控制、场景切换及地理围栏等高级功能,显著提升智能家居部署效率。方案特别适合需要快速实现灯光群控的场景。

weixin_28675839的博客 416

Linux驱动内核模块参数和模块符号导出

Linux驱动之内核模块参数和模块符号导出以及模块依赖关系 当我们写应用程序可以使用scanf等函数来获取我们想要给某一变量设置的值,而驱动程序又不能使用应用层的库函数,我们怎么把值传递给驱动程序呢?我们就需要使用模块参数来完成。有两种方式修改变量的值。1、加载模块时修改变量的值2、模块加载后修改变量的值。

qq_53221728的博客 915

K8s-K8s部署Zookeeper+Kafka+ELFK+持久化数据

K8s环境下容器化部署`Zookeeper+Kafka+ELFK`日志收集系统

✅ 专注企业级 Linux/DevOps 运维的实战派 ✅ 已输出上百篇可落地方案 ✅ Shell 脚本开箱即用 ✅ K8s/YAML 环境验证 ✅ 故障排查链路完整复现 1914

文献综述三大痛点用AI轻松解决!借助Gemini 3 Pro搞定检索难、阅读慢、框架乱问题(附 AI 提示词)

4)“漏斗式”结构:先介绍宏观领域的研究现状,再缩小范围,聚焦于与你课题直接先关的子领域,深入探讨与你研究变量直接相关的文献, 指出前人没做过、没做全或结论有矛盾的地方,再顺势提出你的研究课题,这种结构逻辑最清晰,能直接引导读者发现你研究的必要性。想要有针对性的搜到相关文献,必须先把模糊的研究题目拆解成精准的检索语言,这个时候就需要建立一个关键词矩阵,如核心词、同义词、学术术语、上下位词,以及对应的英文表达。请围绕【我的研究主题/关键词】,检索近5年发表的高被引的中英文文献,优先选择顶刊综述/论文。

智能AI让学术科研更容易 277

Linux驱动学习之模块化,参数传递,符号导出

加载驱动可以传递参数如:(insmod 01_module_test.ko string="seven" var=10),这里初始化的时候不设置参数,通过修改 /sys/module/01_module_test/parameters/变量名 这个文件去修改对应的值,然后卸载程序的时候打印出来看看。:当通过rmmod命令卸载模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能;模块参数(可选):模块参数是模块被加载的时候可以被传递给他的值,它本身对应模块内部的全局变量;

m0_46392035的博客 1548

机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 4205

Linux 驱动之模块参数和符号导出

Linux 驱动之模块参数和符号导出 2016-12-01 10:18:41 分类: LINUX 原文地址:Linux 驱动之模块参数和符号导出 作者:草根老师

xulingxin的博客 489

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

手把手教Linux驱动2-之模块参数和符号导出

通过《手把手教Linux驱动1-模块化编程》的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数。 一、给模块传递参数 当我们加载一个模块到Linux内核的时候,Linux内核允许向这个模块传递一些参数。这样设计的好处就是,让我们的模块操作起来更灵活,我们可以通过给它传递不同的参数来完成不同的功能。例如:我们写一个模块程序,来完成硬件中断的操作。在Linux操作系统中,每个中断都有一个中断号。如果我们在模块里面将中断号写死,那我们的模块只能响应特定的中断了。如果我们把中断号作为参数

一口Linux的专栏 1332

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

驱动模块的介绍 参数 导出符号

#include #include static int num = 2; static char *name = "hello_world"; static int hello_init(void) { printk("this is the first driver programmer\n"); printk("num = %d, name =%s\n ",

u013702980的专栏 591

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

接收多个文件和参数_手把手教Linux驱动2-之模块参数和符号导出

通过《手把手教Linux驱动1-模块化编程,玩转module》的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数。一、给模块传递参数当我们加载一个模块到Linux内核的时候,Linux内核允许向这个模块传递一些参数。这样设计的好处就是,让我们的模块操作起来更灵活,我们可以通过给它传递不同的参数来完成不同的功能。例如:我们写一个模块程序,来完成硬件中断的操作。在Linux...

weixin_39539733的博客 82

2 export 参数_手把手教Linux驱动2模块参数param和符号导出export用法

通过《手把手教Linux驱动1-模块化编程》的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数和如何导出模块的符号。给模块传递参数当我们加载一个模块到Linux内核的时候,Linux内核允许向这个模块传递一些参数。这样设计的好处就是,让我们的模块操作起来更灵活,我们可以通过给它传递不同的参数来完成不同的功能。例如:我们写一个模块程序,来完成硬件中断的操作。在L...

weixin_42511098的博客 306

linux驱动开发LDD(二)——符号导出和模块参数

(一)导出符号 它是用于解决模块之间的相互函数调用问题   export.c #include <linux/init.h> #include <linux/module.h> int my_add(int x, int y) { printk("<1>" "enter %s\n", __func__); return x+y; ...

u013511885的博客 535

linux查看导出符号,linux驱动入门——模块参数和导出符号

驱动程序中lsmod命令实际读取的是/proc/modules文件即与lsmod命令对应的结果是cat /proc/modules内核中已经加载的模块的信息存在于/sys/module目录下modprobe命令比insmod命令要强大,它在加载某模块时会同时加载该模块所依赖的其他模块使用modprobe -r filename的方式卸载将同时其依赖的模块modinfo模块名命令可以获得模块的信息m...

weixin_31100517的博客 413

linux驱动入门——模块参数和导出符号

驱动程序中lsmod命令实际读取的是/proc/modules文件  即与lsmod命令对应的结果是cat /proc/modules  内核中已经加载的模块的信息存在于/sys/module目录下  modprobe命令比insmod命令要强大,它在加载某模块时会同时加载该模块所依赖的其他模块  使用modprobe -r filename的方式卸载将同时其依赖的模块  mod

eydwyz的专栏 1128

Linux内核模块:初始化、加载/卸载、模块参数、导出符号、错误处理、模块装载竞争

一、代码 模块1:

kanguolaikanguolaik的专栏 2464

struts int参数没法传string_手把手教Linux驱动2模块参数param和符号导出export用法

通过《手把手教Linux驱动1-模块化编程》的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数和如何导出模块的符号。给模块传递参数当我们加载一个模块到Linux内核的时候,Linux内核允许向这个模块传递一些参数。这样设计的好处就是,让我们的模块操作起来更灵活,我们可以通过给它传递不同的参数来完成不同的功能。例如:我们写一个模块程序,来完成硬件中断的操作。在L...

weixin_39600616的博客 88

存在正文时不允许未命名的原型参数_手把手教Linux驱动2-之模块参数和符号导出...

通过《手把手教Linux驱动1-模块化编程,玩转module》的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数。一、给模块传递参数当我们加载一个模块到Linux内核的时候,Linux内核允许向这个模块传递一些参数。这样设计的好处就是,让我们的模块操作起来更灵活,我们可以通过给它传递不同的参数来完成不同的功能。例如:我们写一个模块程序,来完成硬件中断的操作。在Linux...

weixin_39809168的博客 109
上一篇: likely && unlikely
下一篇: 一张图说明Linux内核
IT_Linux
博客等级 码龄14年 31粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值