刚看linux 设备驱动的时候,下载了书中附带的驱动程序,一直想用gcc命令,而不用makefile编译驱动,结果第一次用gcc编译的时候就出席了问题,下面是问题:
开始我用这个命令:
$ gcc -O2 -DMODULE -D__KERNEL__ -c test.c
不行,好多什么错误,应该没有连接到内核的库文件,之后我就用附带的makefile,反正只要make一下,也出现了问题,下面是问题的所在:
make的是scull这个文件夹下面的程序,出错的消息是:
[root@azuo scull]# make
make -C /lib/modules/2.6.15-1.2054_FC5/build M=/myfile/examples/scull LDDINC=/myfile/examples/scull/../include modules
make: *** /lib/modules/2.6.15-1.2054_FC5/build: 没有那个文件或目录。 停止。
make: *** [modules] 错误 2
我就到/lib/modules/2.6.15-1.2054_FC5这个路径下去查看了有build这个文件但是显示是链接出错,我查看了build的属性,它的链接目标是/usr/src/kernels/2.6.15-1.2054_FC5-i686,我再去/usr/src下查看,确实没有/kernels/2.6.15-1.2054_FC5-i686,有的 是redhat这个文件夹,里面有几个文件夹,BUILD,RPMS,SPECS,SOURCES,SRPMS。而且里面都是空的。
我是这么处理的,直接下了一个2.6.20的内核版本,之后解压到/usr/src下面就有一个文件夹叫linux2.6.20,直接进入,开始编译内核,具体怎么编译参考我的一篇文章叫编译内核的。
完成以后,再去 /lib/modules/2.6.15-1.2054_FC5/build 下面看就可以发现build文件不是一个错误的连接了,而是一个文件夹的连接,我估计应该是差不多了。
有了心理保障就直接再去scull文件夹下面去make一下,果然可以通过了,没有什么问题,可以看到make的经过里面告诉说长生了scull.ko还有其他的东西,其实这个就是驱动的可执行文件了。
按照LDD3作者说的,insmod scull.ko
可以通过,但是没有反应哦。并没有出现那些要打印的语句,真的想不通,不行我又去看了一下LDD3,我的英文版本的,也就是电子文档,在第一个驱动的介绍里面就有,怎么编译,和怎么查看结果,他里面说了如果用的是文字控制端,就可以看见,如果用的是在xwindow下的控制断就看不到,就要去/var/log/messages里面看,我在两个里面都编译和加载了模块都可以看到了。呵呵成功了特地分享一下。
还有一个问题就是好像作者的makefile是可以通用的,呵呵,只要改一个叫obj之后的那个什么点o的名字吧,我是这么做的。
其实也不一定要升级和编译内核,可以去下载相应的内核的rpm包,因为安装系统的时候,没有安装内核开发的包。下载一个kernel-devel-2.6.15-1.2054_FC5.i686.rpm就可以了。
从网上下载:
http://download.fedora.redhat.com/pub/fedora/linux/core/5/i386/os/Fedora/RPMS/kernel-devel-2.6.15-1.2054_FC5.i686.rpm
在安装光盘里面也应该有。
不过这个我已经编译了内核才晓得的,具体可以解决问题不我也不晓得。