内核移植,nfs--解决了开发板子不能动态加载驱动的问题
来源:互联网 发布:55寸电视 知乎 2017 编辑:程序博客网 时间:2024/06/18 14:20
遗留问题:
开发板子已经进行内核移植后,内核已经支持nfs,实现了开发板和pc虚拟机的共享,但是当把“虚拟机下编译好的内核”拷贝到“nfs共享的文件系统下时”,在开发板端进行insomd时,结果不能动态加载内核模块,提示的错误如下:
# cd tmp/
# ls
param.ko
# insmod param.ko
insmod: cannot insert 'param.ko': invalid module format
# ls // 在服务器上,把驱动模块hello.ko拷贝到文件系统目录下,开发板子就能够实现动态共享了(查询一下,可以看到hello.ko文件)
param.ko hello.ko
#
1、猜想:
1.1是不是当时移植的busybox没有支持insmod命令呢?
然后在开发板子端输入insmod命令试试,看看是否支持该命令,结果如下:
# uname-/bin/sh: uname: not found# insmodBusyBox v1.13.3 (2013-05-09 22:34:53 CST) multi-call binaryUsage: insmod [-knqrsv] MODULE [symbol=value...]Options:-n Dry run-q Quiet-r Remove module (stacks) or do autoclean-s Report via syslog instead of stderr-v Verbose结果:发现开发板子移植的busybox支持insmod命令,但是没有支持uname命令,所以就不是insmod命令没有的问题
1.2结果只能百度一下,看看人家是否遇到此类问题,得到的信息如下
“insmod: error inserting 'hello.ko': -1 Invalid module format”问题一些不那么神秘的信息被纪录在文件/var/log/messages中;Jun 4 22:07:54 localhost kernel: hello: version magic '2.6.5-1.358custom 686REGPARM 4KSTACKS gcc-3.3' should be '2.6.5-1.358 686 REGPARM 4KSTACKS gcc-3.3'
换句话说,内核拒绝加载你的模块因为记载版本号的字符串不符(更确切的说是版本印戳)。版本印戳作为一个静态的字符串存在于内核模块中,以 vermagic:。 版本信息是在连接阶段从文件init/vermagic.o中获得的。查看版本印戳和其它在模块中的一些字符信息,可以使用下面的命令 modinfo module.ko:[root@pcsenonsrv 02-HelloWorld]# modinfo hello-4.ko
license: GPL
author: Peter Jay Salzman <p@dirac.org>
descrīption: A sample driver
vermagic: 2.6.5-1.358 686 REGPARM 4KSTACKS gcc-3.3
depends:来源: <http://blog.chinaunix.net/uid-20561320-id-2853307.html>所以,当时自己的虚拟机安装的rehat红帽系统,内核版本是“linux-2.6.18”,编译开发板子的内核是linux-2.6.29,编译内核模块是在系统内核linux-2.6.18下编译的,所以内核版本不一样,按照这样子的思路去证实一下自己的内核模块。
2、证实
1、用modinfo查看一下hello.ko的内核编译信息,显示结果果然是“linux-2.6.18”内核版本下编译的,所以得换到“linux-2.6.29”内核版本下,恰好之前制作了linux-2.6.29系统,重新reboot一下,进入linux-2.6.29内核版本系统,重新make一下hello.c内核模块,但是问题由来啦:如下提示如下:在/lib/modules/2.6.29/build:没有这个目录,这就让人郁闷啦,明明有这个目录啊,为什么会有这样子的提示呢??赶紧查看一下/lib/modules/2.6.29/build下面有什么东西呢??
原来在/lib/modules/2.6.29 和 /lib/modules/2.6.18-53.el5 下面都有两个 “build 和 source”符号链接文件,难道是这些符号链接指向的路径不对,导致在2.6.29内核找不到编译所需要的文件啦??
原来还真的是如此,之前制作的内核模块,指向了/home/Denny/kernel/linux-2.6.29的路径了,后面在删除了Denny用户后,把内核linux-2.6.29移动到了新的/home/qinyuanyi/work/kernel/linux-2.6.29新的路径下面了,导致了build 和 source两个符号链接找不到内核,所以提示了上面的错误。但是问题又来了,能够修改 build 和 source 两个的符号链接吗???修改了符号链接以后,还能够用吗??那么怎样修改符号链接呢???百度一下,没有找到能够修改 符号链接的指向新的地址的方法,然后自己用:rm build source 两个符号链接直接删除掉,重新创建build 和 source两个的符号链接。创建符号链接的语法:ln -s 指向的链接路径或文件 符号链接名在创建号以后,重新编译一下hello.c模块
到这,说明已经成功了!!!!!!!!!!!!!!!!!!!!!!!!!
3、结果如下
开发板端,已经能够成功加载内核模块了~~~~~~~~
- 内核移植,nfs--解决了开发板子不能动态加载驱动的问题
- 关于内核移植和驱动加载的问题
- 解决了动态加载的问题
- Android新编译的内核驱动模块不能被init加载原因解决
- DVDROM驱动不能加载的问题
- 解决qt程序在板子上不能正常显示中文的问题
- 移植smdk2410的rtc驱动到jk2410开发板碰到的问题的解决:
- 编译驱动的问题--linux版本不同不能加载驱动
- nfs client不能同步nfs server的问题(已解决)
- 解决内核驱动开发中设备名称显示不正确的问题
- 解决无法动态加载styleable的问题
- 驱动移植时对应内核安装问题
- minicom不能连arm-linux开发板的问题终于解决了!
- 驱动开发基础知识 偶然发现的,很全面,一下子解决了我很多问题。
- linux驱动的动态加载和编译内核的方式加载
- 内核驱动的静态加载
- 解决windows7驱动调试KdPrint不能输出的问题
- 【内核编程】【Makefile】:嵌入式驱动开发时驱动模块于内核版本不匹配的解决
- 青春经不起等待,android新手报到
- 我的php学习笔记(三十八) PHP通过mail()或Socket发从邮件
- IT旅途——程序员面试经验分享
- 做游戏计划看的书:
- WCF use json communicate data
- 内核移植,nfs--解决了开发板子不能动态加载驱动的问题
- 一个tcpip的小例子
- 浅谈C语言的数据存储(一)
- iOS 图片切换效果
- 浅谈C语言的数据存储(二)
- Freemarker中对HashMap重新封装
- 毕业论文GSM手机控制系统
- Ubuntu下无法安装sun-java6-jdk的解决办法
- 人工智能与智能系统中的先驱人物