构造内核树

来源:互联网 发布:java过滤器的作用 编辑:程序博客网 时间:2024/04/29 09:32

首先,请根据自己的内核版本下载相应的源代码包。

  确定自己的内核版本的方法:

  [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

如果,看不到,用dmesg命令就可以看到了 。
原创粉丝点击