Linux内核设备驱动之Linux内核模块加载机制的示例分析
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,小编给大家分享一下Linux内核设备驱动之Linux内核模块加载机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
软件开发需要哪些科学领域
java软件开发工程师景
河南数据网络技术分类资费
网络技术展会
山东海洋大学网络安全专业咋样
网络安全微信语音可以检测么
犯人数据库
t3数据库安装
中国网络安全替代市场
手机卡牌游戏用什么软件开发
宝塔如何导入数据库404
枣庄 软件开发
vps服务器管理系统
打印机共享服务器哪个牌子好
网络安全日4月15
网络安全加固指南
软件开发学什么编程软件
网络安全要注意的
.net软件开发兼职网
网络安全员和工程师的区别
网络安全是绝对的对吗
大学生网络安全的演讲
网络安全法第20解读
企业软件开发开发
数据库的cdmp
数据库名字才是合法的
成都金牛教培网络安全培训
我的世界正版电脑服务器挂
服务器和u盘一样的东西是什么
云服务器的好处