(原创)
这几天,一直困惑于在Fedora中写好的驱动程序别编译成模块,由于现在的Fedora以及很多linux的发行版本都取消了在/usr/src目录的内核源码树,导致在做开发的时候遇到了很多问题。下面就这类问题介绍一下解决的办法。
首先,查看/usr/src/kernel目录中有没有内核源码树,如果没有,在root账户执行以下命令:
yum install kernel-devel
前提是必须连上网络,如果没有连接到网络,可以拷贝源码树到/usr/src/kernel。完成以后,查看/usr/src/kernel会发现有了内核源码树。如图
下面介绍利用此内核源码树编译内核的方法,比如,我的root目录有module.c的模块测试源文件,那么我们还需要编写一个Makefile,这个Makefile几乎是通用的,代码如下:obj-m :=module.o
KDIR :=/usr/src/kernels/2.6.34.8-68.fc13.i686 #指定内核源码树,以我的情况为例
PWD :=$(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd
rm -rf *.o
#注意类似$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules这样的命令前面必须有tab键,不能有空格键
(作者:pstary)
下面,只要在当前还有module.c和Makefile的目录执行make,即可看到.ko文件的产生
如图:
这里只说明了单个源文件的编译方法,如果有多个源文件只需要按章Makefile的规则在obj-m :=module.o这一句上添加一些代码即可
转载请注明来源