转:linux设备驱动程序设计中的程序样例运行的一点说明(编译Linux内核)

来源:互联网 发布:找人帮忙开淘宝店 编辑:程序博客网 时间:2024/06/06 20:50
http://blog.chinaunix.net/u/15620/showart.php?id=93941

我买了Linux驱动设备程序设计的第3版(基于linux内核2.6.11),在我的Fedora Core 5上运行样例,发现编译不过。

首先,检查出没有安装内核源码,下载源码kernel-2.6.15-1.2054_FC5.src.rpm进行安装:rmp -ivh kernel-2.6.15-1.2054_FC5.src.rpm。

安装后,运行样例,发现编译make有误:/lib/modules/2.6.1-l.2054_FC5/build找不到文件。查询该文件,发现是一个 符号链接,链接的位置是:/usr/src/kernels/2.6.15-l.2054_FC5,而在/usr/src目录下没有这个文件存在。

我们安装好的FC5源码树实际在/usr/src/redhat/SOURCE/linux-2.6.15下(需要到“/usr/src/redhat/SOURCE/”下解开压缩文件:“linux-2.6.15.tar.bz2”),为了解决上述问题,应当手动建立一个符号链接:
mkdir /usr/src/kernels
ln -s /usr/src/redhat/SOURCE/linux-2.6.15  /usr/src/kernels/2.6.15-l.2054_FC5
( 在我的机器中是:ln -s /usr/src/redhat/SOURCES/linux-2.6.15  /usr/src/kernels/2.6.15-1.2054_FC5-i686)
这样build就有指向正确的源码树位置了。

然后再运行make,发现样例编译时,出现许多错误:很多文件找不到。原来我们自己安装的源码树还没有经过编译,所以进入到源码树的目录,做如下操作:
make menuconfig; //Exit保存退出
make;

ok,编译驱动程序的第一个样例程序Hello,就会生成hello.o和hello.ko,然后用insmod进行模块加载。。。

希望上述说明对开始学习linux驱动程序、看那本linux设备驱动程序设计的人有一点帮助:-)


FC5 release已经快一个月了,我才发现安装后没有内核源码,安装光盘里也找不到,
这是和以前版本不一样的地方。只好自己动手编译源码。一般也不需要用的Linux
内核源码,但是在安装一些软件的时候提示Invalid module format
这就是没有用Makefile编译内核的原因。

1.从官方网站下载源码的rpm包:
[download.fedora.redhat.com]
kernel-2.6.15-1.2054_FC5.src.rpm
2.编译源码:
#rpm –Uvh kernel-2.6.15-1.2054_FC5.src.rpm
#cd /usr/src/redhat/SPECS
#rpmbuild -bp --target$(uname -m) kernel-2.6.spec
#cd /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686
#cp configs/kernel-2.6.15-i686.config .config
#vi Makefile
将Makefile中的
EXTRAVERSION = -prep
换成
EXTRAVERSION = -1.2054_FC5
接下来
#make mrproper
#make oldconfig
#make (这一步大约需要一个半小时)
#make modules_install

想起来,编译好的应该是100来M。

忘了跟你说,要看rpm前面是不是src(就是.src.rpm),如果是的话,就不是编译好的。FC5为何不提供编译好的内核源码?红旗桌面版4.0/4.1/5.0都是提供的。