linux内核模块常见问题
From: http://debug-sai.blogbus.com/logs/45569599.html
一
在编译内核模块时,出现
make[1]: 正在进入目录 `/usr/src/linux-2.6.28'
ERROR: Kernel configuration is invalid.
include/linux/autoconf.h or include/config/auto.conf are missing.
Run 'make oldconfig && make prepare' on kernel src to fix it.
WARNING: Symbol version dump /usr/src/linux-2.6.28/Module.symvers
is missing; modules will have no dependencies and modversions.
Building modules, stage 2.
。。。。
的错误,回到/usr/src/linux-2.6.28目录下,如下操作
sudo make oldconfig
sudo make prepare
再此编译内核模块,再出错
/bin/sh: scripts/mod/modpost: not found
回到/usr/src/linux-2.6.28目录下,如下操作
sudo make scripts
OK,可以编译内核模块了
二
如果加载模块时出现下面错误
insmod: error inserting 'hellomod.ko': -1 Invalid module format
此时,用dmesg在最后一行应该看到类似下面的提示:
Dec 19 13:42:29 localhost kernel: hellomod: version magic '2.6.24.2 SMP mod_unload 686 4KSTACKS ' should be '2.6.27.7-134.fc10.i686SMP mod_unload 686 4KSTACKS '
那99%是内核版本号对不上,也就是version magic不上,办法是:修改源目录下的Makefile,把Makefile第1-4行的值改为当前内核一样的值
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 24
EXTRAVERSION = .2
NAME = Err Metey! A Heury Beelge-a Ret!
也有可能是配置不当,用modinfo hello.ko查看,见
http://hi.baidu.com/52hack/blog/item/1f53b1387df83fcad462254a.html
三
当编译完内核,安装后,/usr/src/下的源文件包通常我会清除掉一些编译内核中途产生的文件,比如
sudo make-kpkg clean来清除,之后是本文“一”中描述的错误,搞定后。如果编译时出现
WARNING: Symbol version dump /usr/src/linux-2.6.26/Module.symvers
is missing; modules will have no dependencies and modversions.
但是依然能编译模块,然后加载时出现
insmod: error inserting 'hello.ko': -1 Invalid module format
再用dmesg查看显示
no symbol version for struct_module
具体原因见
http://blog.chinaunix.net/u/12592/showart_1671442.html
解决方案我找遍google也没见到实际点的操作,唯一的提示来源于
http://forum.byr.edu.cn/wForum/disparticle.php?boardName=Embedded_System&ID=4183&page=1&pos=-1&listType=0
看错误提示也知道我们要获得Module.symvers,/lib/modules/你的linux版本号/下倒是有个Module.symvers,我把那个拷贝过来仍然不对,后来想即然我们不需要内核源代码也可以编译加载模块(具体见http://forum.ubuntu.org.cn/viewtopic.php?f=97&t=208453),那么这个东西系统应该早就有了,只可能在头文件下,也就是在未编译内核前/usr/src/下本来就有个linux-XXX的文件夹里的,本来事情到这就结束了,然而不幸的是那个文件夹被我手贱,在装完内核删了。。。。还好,我们编译完内核后有两个deb,一个image的,一个headers的,我们dpkg -i 那个header的deb,就会在/usr/src/下产生一个头文件文件夹,现在把里面的Module.symvers拷贝到/usr/src/linux-XXX/下吧,问题就搞定了~
另外,如果在编译过程中出现进不了XX目录这类的问题,看看/lib/modules/你的linux版本号/这个目录下的build和source的软链接是不是链接到/usr/src/linux-XXX/下了。
四
最后一个问题,不是问题的问题----编译好后,成功加载,终端中无显示
《linux设备驱动edition3》有如下解释:
依据你的系统用来递交消息行的机制, 你的输出可能不同. 特别地, 前面的屏幕输出是来自一个字符控制台; 如果你从一个终端模拟器或者在窗口系统中运行 insmod 和 rmmod, 你不会在你的屏幕上看到任何东西. 消息进入了其中一个系统日志文件中, 例如 /var/log/messages (实际文件名子随 Linux 发布而变化)具体见
http://blog.chinaunix.net/u3/99423/showart_1983683.html
可以用cat /var/log/syslog 或 dmesg 查看
linux内核模块常见问题相关推荐
- c需要实现安装卸载Linux模块,Linux内核模块编译与加载
Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用所需要的组件? 方法一: 把所有的组件都编译进内核文件,即Zlmage或bzlmage,但会导致两个问题:一是生成的内核文件过大:二是如 ...
- Linux内核模块编程系列1-极简内核模块编写
1.准备工作 使用如下命令查看自己Linux的内核版本 uname -a 结果如下: Linux VM-73-203-debian 4.9.0-6-amd64 #1 SMP Debian 4.9.88 ...
- linux filesystem_如何使用cgdb + qemu调试linux内核模块
如何使用cgdb + qemu调试linux内核模块 前言 Linux 代码庞大而繁杂,光看代码会使人头晕目眩,如果能通过调试工具对其代码执行流程进行调试,则对学习Linux kernel以及解决平时 ...
- 编写Linux内核模块——第三部分:按键和发光二极管
[编者的话]了解了基本的内核模块开发.内核空间和用户空间交互之后,终于要开始和硬件设备直接交互了.Linux内核提供了对通用输入输出接口.中断请求等的封装,让驱动开发者可以利用中断来控制硬件线路上的设 ...
- Linux内核模块简介
一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统 ...
- Linux内核模块学习笔记(转载)
Linux内核模块 Linux设备驱动会以内核模块的形式出现,因此学会编写Linux内核模块编程是学习linux设备驱动的先决条件. 1.1linux内核模块简介 Linux内核的整体结构非常庞 ...
- 编写Linux内核模块——第一部分:前言
[编者的话]Linux内核模块作为Linux内核的扩展手段,可以在运行时动态加载和卸载.它是设备和用户应用程序之间的桥梁,可以通过标准系统调用,为应用程序屏蔽设备细节.本文来自Derek Molloy ...
- linux内核微妙时,Linux内核模块时间同步函数汇总
在linux内核模块中能用到的函数比用户空间多,但是它的函数往往被用得很少.当然在内核中叶可以调用用户空间的函数只要直接调用系统调用的封装函数就行,如下: 如调用long gettimeofday(s ...
- 编写函数实现员工信息录入和输出_编写我的第一个Linux 内核模块“hello_module”...
前言: Linux 内 核 模 块 全 称 为 " 动 态 可 加 载 内 核 模 块 (Loadable Kernel Module,LKM)",是系统内核向外部提供的功能插口. ...
最新文章
- 二进制安装部署 4 kubernetes集群---超详细教程
- 【大二在读】说说我对“软件工程”的理解
- python 绘制平滑曲线_用python绘制概率图形曲线
- java中堆与栈的区别_java中堆和栈的区别分析
- 使用Azure轻松实现Teams App的全球合规性
- 第七季1:MP4文件格式解析
- C++学习——拷贝构造函数和移动构造函数
- Python二级笔记(6)
- mysql 使用的三个小技巧
- 比尔盖茨夫妇宣布离婚 结束27年婚姻
- java 封装的概念_java封装的概念
- Html学习总结(2)——Html页面head标签元素的意义和应用场景
- double类型字符串转换成一个纯数字字符串和一个小数点位数的c++代码
- html中在线取色器,在线取色器(ColorPicker)的制造方式
- win10创建局域网服务器
- python实现GPS经纬度转换
- 网站备案后一定要做的一件事【否则罚款5千元~1万元】
- antdesign 柱状图_010-ant design pro advanced 图表
- springSecurity 登陆失败前台显示账号密码登录错误
- 放大镜 讲课_放大镜教案
热门文章
- http://www.iteye.com/topic/114392
- 在 Linux 中使用动态磁盘
- 计算机视觉对扫描文件分类 OCR
- 运行keras出现 FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated解决办法
- leetcode 304. 二维区域和检索 - 矩阵不可变(前缀和)
- leetcode 973. 最接近原点的 K 个点(排序)
- Docker - Docker中搭建MySQL主从
- libhiredis.so.0.13: cannot open shared object file: No such file or directory in Unknown on line
- 百度分享插件wbuid属性无法@指定微博
- poj 2976 基础01分数规划