首先,请根据自己的内核版本下载相应的源代码包。
确定自己的内核版本的方法:
[root@localhost /]# uname -rm
接着,请按照以下步骤一步步进行,其中MyDir代表内核源代码包的存储位置,请依据自己的情况而定。黑底的文字代表当前命令执行结果。 注意我的 mydir目录是 /usr/src
[root@localhost MyDir]# rpm –Uvh kernel-2.6.15-1.2054_FC5.src.rpm
注:其中,kernel-2.6.15-1.2054_FC5.src.rpm是我的内核版本对应的源代码包。
运行这个步骤后,我把/SOURCES/ inux-2.6.15.tar.bz2 包给解压开了 就放在SOURCES目录下
[root@localhost MyDir]# cd /usr/src/redhat/SPECS
[root@localhost SPECS]# rpmbuild -bp --target $(uname -m) kernel-2.6.spec
[root@localhost SPECS]# ls /usr/src/redhat/BUILD/kernel-2.6.15/
Config.mk linux-2.6.15.i686 vanilla xen xen-vanilla
[root@localhost SPECS]# cd /usr/src
[root@localhost src]# mkdir kernels
[root@localhost src]# cd kernels/
[root@localhost kernels]# ln -s ../redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686/ 2.6.15-1.2054_FC5-i686
注:ln是小写的LN(非in),而不是大写的In。
另注: 处有个空格,无空格无法编译以下步骤。
[root@localhost kernels]# ls
2.6.15-1.2054_FC5-i686
[root@localhost kernels]# cd 2.6.15-1.2054_FC5-i686/
[root@localhost 2.6.15-1.2054_FC5-i686]# cp configs/kernel-2.6.15-i686.config .config
cp:是否覆盖".config" ? y
注:输入y以确认覆盖。
[root@localhost 2.6.15-1.2054_FC5-i686]# uname –r
接下来,请修改Makefile中的内容:
把
EXTRAVERSION = -prep
换成
EXTRAVERSION = -1.2054_FC5
然后继续编译:
[root@localhost 2.6.15-1.2054_FC5-i686]# make mrproper
[root@localhost 2.6.15-1.2054_FC5-i686]# make oldconfig
注意:我是执行了 make menuconfig 命令 , 把 一个版本检查的 选项给去掉了,然后保存退出。
[root@localhost 2.6.15-1.2054_FC5-i686]# make
注:这一步需要花挺长的时间,我将近花了90分钟。
[root@localhost 2.6.15-1.2054_FC5-i686]# make modules_install
至此,内核源代码树编译完成。
最后,我的 hello.c 和Makefile 文件 都是放在 /usr/src 下面的,然后执行下面的
[root@localhost MyDir]# make
make -C /lib/modules/2.6.15-1.2054_FC5/build M=/MyDir modules
make[1]: Entering directory `/usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686'
CC [M] /MyDir/hello.o
Building modules, stage 2.
MODPOST
CC /MyDir/hello.mod.o
LD [M] /MyDir/hello.ko
make[1]: Leaving directory `/usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686'
查看make之后的结果:
[root@localhost MyDir]# ls
hello.c hello.ko hello.mod.c hello.mod.o hello.o
嗯,make成功,赶紧利用insmod命令装载模块驱动:
[root@localhost MyDir]# insmod ./hello.ko
最后卸载: [root@localhost MyDir]# rmmod hello.ko
