Linux内核设备驱动之Linux内核模块加载机制的示例分析
发表于:2024-10-07 作者:千家信息网编辑
千家信息网最后更新 2024年10月07日,小编给大家分享一下Linux内核设备驱动之Linux内核模块加载机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧
千家信息网最后更新 2024年10月07日Linux内核设备驱动之Linux内核模块加载机制的示例分析
小编给大家分享一下Linux内核设备驱动之Linux内核模块加载机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
#include
1. 模块参数
在驱动定义变量
static int num = 0; //当加载模块不指定num的值时则为0
module_param(变量名, 类型, 权限);类型: byte, int, uint, short, ushort, long, ulong, bool, charp,权限不能有写的权限
传参数: insmod test.ko 变量名1=值1 变量名2=值2
module_param的调用关系如下:
#define module_param(name, type, perm) \module_param_named(name, name, type, perm)#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_call(name, set, get, arg, perm) \__module_param_call(MODULE_PARAM_PREFIX, \ name, set, get, arg, \ __same_type(*(arg), bool), perm)#define __module_param_call(prefix, name, set, get, arg, isbool, perm) \static int __param_perm_check_##name __attribute__((unused)) = \BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \+ BUILD_BUG_ON_ZERO(sizeof(""prefix) > MAX_PARAM_PREFIX_LEN); \static const char __param_str_##name[] = prefix #name; \static struct kernel_param __moduleparam_const __param_##name \__used \ __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \= { __param_str_##name, perm, isbool ? KPARAM_ISBOOL : 0, \ set, get, { arg } }
多个c文件编成一个模块,可以使用xxx-objs这个Makefile中的指令来实现,如下:
test-objs := a.o b.o //由a.c, b.c 编成test.ko, 注意不能有.o文件与目标ko文件同名obj-m += test.o
可在/sys/module/模块名/下查看模块在系统的信息
1. 查看elf文件的信息
readelf test.ko -a
ko文件组成
1. elf文件头
2. text data ...
3. sections table
4. symbol table
2. EXPORT_SYMBOL(函数名/变量的地址) //把函数/或者变量的地址导出到内核的符号表中
EXPORT_SYMBOL_GPL(函数名)///////////
/proc/kallsyms 查看当前系统的符号表
以上是"Linux内核设备驱动之Linux内核模块加载机制的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
模块
变量
文件
内核
驱动
函数
权限
篇文章
机制
示例
设备
设备驱动
分析
信息
内容
参数
地址
符号
类型
系统
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发营销
计算机软件开发的现状
数据库登录两种方式
山西网络卫星授时服务器云主机
开课吧数据库的由来和发展
网络安全的核心与基石
计算机运维和软件开发
服务器制造企业管理
数据库中怎么写函数
access如何关闭数据库
机器学习中的图算法以及图数据库
网络安全相关内容 文字
银行数据中心和软件开发中心
武大网络安全2022年复试名单
裸机可以安装数据库吗
phpstudy的数据库
冒险岛322数据库
永恒之塔装备数据库代码
2020网络安全龙头股
软件开发者模式怎么关闭
手游最新服务器
plsql还原数据库
mysql数据库b 树索引
plc和软件开发
卷积神经网络技术的专利
学习网络安全法
软件开发行业项目容易烂尾
香港阿里云服务器能安装模拟器吗
繁星网络安全公司
软件开发上游下游