Chinaunix

标题: 老是出错误,如何使用LDD3源代码提问! [打印本页]

作者: rubylc_unix    时间: 2010-11-06 10:13
标题: 老是出错误,如何使用LDD3源代码提问!
最近想学驱动,然后买了本LDD3,想试着编译LDD3提供的源代码,不过我的内核太新了2.6.30,编译老是出错误,我也下了个2.6.10的内核,不过编译不成功,请问该怎么办阿?你们以前学习的时候是怎么编译的呢,请指导下,谢谢!
作者: Godbach    时间: 2010-11-07 17:55
编译不成功,那应该就有报错信息。你可以贴一下你的错误信息,helloworld 也编不过去吗?
作者: comeon_lsl    时间: 2010-11-07 21:49
我最近,也开始看这本书! hello,world!加载时,
提示:insmod: error inserting 'hello.ko': -1 Invalid module format
这个,有没有比较简单的解决方法!
作者: dreamice    时间: 2010-11-07 23:00
最近想学驱动,然后买了本LDD3,想试着编译LDD3提供的源代码,不过我的内核太新了2.6.30,编译老是出错误, ...
rubylc_unix 发表于 2010-11-06 10:13



    请不要抱着一口吃下一个大包子的心理,一个程序一个程序的编译执行来学习,如果你把exampe的代码下载下来,试图make就完全通过,然后运行模块的话,其实对你学习意义不大了。
最好是一个一个分析,哪里编译出错了,找到出错点并解决之。毕竟内核版本差异,导致很多程序函数接口都发生了变化了。
作者: dreamice    时间: 2010-11-07 23:01
回复 3# comeon_lsl


    如果是helloworld的话,我可以明确的告诉你,我在2.6.35上与2.6.10上一样的程序,都没有问题的。
所以具体问题具体分析,你可以把操作过程和错误的详细信息贴出来一下
作者: Godbach    时间: 2010-11-08 00:12
请不要抱着一口吃下一个大包子的心理,一个程序一个程序的编译执行来学习,如果你把exampe的代码下载下来,试图make就完全通过,然后运行模块的话,其实对你学习意义不大了。
最好是一个一个分析,哪里编译出错了,找到出错点并解决之。毕竟内核版本差异,导致很多程序函数接口都发生了变化了

非常赞同 dreamice 兄的话。最好一个一个程序的来,不要一下子全编译,多多少少会存在一些示例源码在你的系统上编译有问题的。

最好还是由浅入深进行。由 helloworld 入手,熟练之后,就算源码编译有报错,可能你都已经可以自己找出原因了。
作者: lelee007    时间: 2010-11-08 09:26
本想说让LZ多翻翻书的,又怕打击LZ积极性,呵呵,dreamice字字珠玑啊

如果连Linux环境的基本操作都不明白什么意思的话,你编那些代码基本没什么意义,所谓工欲善其事,必先利其器
作者: comeon_lsl    时间: 2010-11-08 12:14
回复 5# dreamice

大侠,您好:
           我已经构建了内核树,并且hello world程序也编译出了.ko等一系列文件。但是在insmod ./hello.ko时出现上面的提示。下面是错误的具体信息。
[root@localhost ff]# cat /var/log/messages |tails
Nov  8 10:23:53 localhost kernel: hello: version magic '2.6.18.8 SMP 686 REGPARM gcc-4.1' should be '2.6.18-53.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1'
[root@localhost ff]# modinfo hello.ko
filename:       hello.ko
license:        Dual BSD/GPL
depends:        
vermagic:       2.6.18.8 SMP 686 REGPARM gcc-4.1
作者: coollu925    时间: 2010-11-11 08:32
comeon_lsl 同志注意看提示信息:
[root@localhost ff]# cat /var/log/messages |tails
Nov  8 10:23:53 localhost kernel: hello: version magic '2.6.18.8 SMP 686 REGPARM gcc-4.1' should be '2.6.18-53.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1'

你的开发板上的linux版本号和你构建的内核树的版本号不一致。
'2.6.18.8 SMP

'2.6.18-53.el5 SMP
重新编译内核树,在编译时注意配置makemenuconfig项中的linux版本号,注意可能要修改根目录下的Makefile中定义的Version号
多试试  我之前也碰到过这个问题
作者: coollu925    时间: 2010-11-11 08:33
修改这两个一致即可
'2.6.18.8 SMP 686 REGPARM gcc-4.1'

'2.6.18-53.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1'
作者: jn200002    时间: 2010-11-11 15:00
我刚贴过一个gpio的模块,就是抄的led的。

这东西在内核里找相似的,使劲的抄,抄啊抄啊的就明白了。。。

遗憾的是,内核怎么没有测试的文件给抄抄……
作者: 威廉爵爺    时间: 2010-11-11 19:30
装个fedora4在虚拟机上就可以
作者: comeon_lsl    时间: 2010-11-11 22:13
我最后,在看了一个视频后,make modules_install后,又制作了init ramdisk,然后又安装了这个内核,改了/etc/grub.conf ,以后启动新的内核,就可以编译hello world程序,并insmod!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2