Linux内核编译 CONFIG_MODVERSIONS 作用
发布日期:2021-06-29 02:35:25
浏览次数:2
分类:技术文章
本文共 890 字,大约阅读时间需要 2 分钟。
关于Linux内核编译 CONFIG_MODVERSIONS 作用的两篇文章整理。
一般情况下,如果没有选择CONFIG_MODVERSIONS,这些符号是正常的字串;如果选择了CONFIG_MODVERSIONS,这些符号就会在后面加一段校验字串。这样做的目的是避免模块不正确加载情况下,使得Linux内核崩溃。
一、
如果内核选择了CONFIG_MODVERSIONS选项,你的模块的Makefile要增加以下几行
CFLAGS += -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h 或者在你的C源文件里增加 #ifdef CONFIG_MODVERSIONS #define MODVERSIONS #include <linux/modversions.h> #endif这样就可以在编译内核模块时,如果模块里引用了内核符号表,就可以自动计算校验字串,而不会在加载模块时出现unresloved symbol的错误了。
二、
但是当你的内核在编译时使能了CONFIG_MODVERSIONS选项,那么你插入的模块可以是一下两种情况:
1,编译时没有带CONFIG_MODVERSIONS选项,但版本必须与内核的版本一致;
2,编译时如果带有CONFIG_MODVERSIONS选项,那么模块的版本将没有限制; 而通常内核在编译是带有CONFIG_MODVERSIONS选项的,所以就出现了文章开头出现的情况:内核和模块的版本不一致。同时我们也就找到了相应的解决办法--在模块编译时选择CONFIG_MODVERSIONS选项,这样我们就可以解决版本不匹配的问题了。我们需要这源文件(c文件)中加上下面的宏定义:
#ifdef CONFIG_MODULES #ifdef CONFIG_MODVERSIONS #MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h #endif #endif 然后编译就可以了。转载地址:https://blog.csdn.net/yyyyyyyyyywwwwwwwwww/article/details/52148612 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月03日 18时37分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
go中gorm和pg的common数据库配置
2019-04-29
go中gin框架支持的简单上传下载读取csv等文件
2019-04-29
go 闭包
2019-04-29
go 捕获处理error
2019-04-29
Input dispatching timed out 导致anr问题分析
2019-04-29
主线程中Thread.Sleep()是否会导致ANR
2019-04-29
Android 为什么主线程的looper 一直循环不会ANR
2019-04-29
Android View 的绘制流程
2019-04-29
ContentProvider和数据库的区别
2019-04-29
Android四大组件——ContentProvider的增删改查和优化
2019-04-29
华为入局 VR 眼镜能让 VR 早普及几年?|CSDN博文精选
2019-04-29
做好以下四点,拒做 “ 空心 ” 程序员 | CSDN 博文精选
2019-04-29
程序员为什么非得参加一场编程竞赛?
2019-04-29
V 语言强势登顶 GitHub TOP1,欲取 Go 而代之?
2021-07-02
关于RocketMQ消息拉取与重平衡的一些问题探讨
2021-07-02
不同业务场景下如何进行数据库水平切分?
2019-04-29
如何准备算法工程师面试,斩获一线互联网公司机器学习岗offer?
2019-04-29
循环、递归与魔术(一)——递归与循环的数理逻辑
2019-04-29
1030MD
2019-04-29