天天看点

linux内核编译学习笔记

                            linux内核编译学习笔记

作者:laomai

主页:http://blog.csdn.net/laomai

一、实验环境

    一台工控机,带有光驱。装有redhat linux es3操作系统。最小安装,

即在选择软件的时候什么都不选.

本文参考资料:

 http://www.uplinux.com/www/sys/01/77.shtml

 http://tristones.viaspeip.com/archives/000209.html

二、查看当前的系统配置

1、查看内核版本号

#uname -a

2、查看目前已装入的模块

#lsmod

3、安装编译时所需工具(gcc、make和ncurse)

 cpp-3.2.3-20.i386.rpm 

 glibc-devel-2.3.2-95.3.i386.rpm

 glibc-headers-2.3.2-95.3.i386.rpm

 glibc-kernheaders-2.4-8.34.i386.rpm

 gcc-3.2.3-20.i386.rpm

 make-3.79.1-17.i386.rpm

 ncurses-devel-5.3-9.3.i386.rpm

三、编译前准备

1、获得内核源代码。有几种方式

 ⑴我实验用的是as3第三张安装光盘的 kernel-source-2.4.21-4.EL.i386.rpm

 ⑵最新的内核版本到http://www.kernel.org/下载

2、安装内核代码

 rpm -ivh kernel-source-2.4.21-4.EL.i386.rpm

3、清除以前编译内核时留下的东西 

 cd /usr/src/linux-2.4   #进入内核源码所在目录

 make mrproper           #进行清理

四、设置内核选项

 执行 #make menuconfig  

1、选项的配置办法

 执行make menuconfig以后,会出现一个主菜单,用方向键选择菜单项,如果选择了某一个还有子菜单的项(以-->结尾),按回车键回进入下级子菜单.

 选项的配置形式:

  按Y,表示以build-in的方式包含,也就是把选项集成到内核里.

   对应的图标为[*]或<*>,

  按N,表示不包含。对应的图标为[ ]或< >

  按M,表示以模块的形式包含,对应的图标为<M>. 注意不是所有的选项都可以用模块形式加载的

2、选项的状态图标  

 每个选项设完之后会显示一个状态图标,只能是下面5种之一 

 [*] - built-in表示这个选项被集成在内核里了

 [ ] - excluded 表示这个选项被内核排除了

 <M> - module 表示这个选项以模块的形式放在内核里,

  用户用到这个选项的时候要执行insmod命令.

  要注意不是所有的选项都可以以模块的形式加载的。

  所以当你按了m键,图标仍然是[*]而不是<M>时,就要

  明白这个选项只能要么集成在内核里,要么被内核排除。

 < > - module capable,表示这个选项虽然被排除了,但

  可以以模块的形式被重新加载,比如,一个图标为<M>的

  选项,按N键以后状态就会变成< >.

 <*> - 这个图标帮助没写,当实际上会出现,比如,按某个选项状态为<M>

    或者< >时,按Y键,图标就会变成这个,意思和[*] 一样,把可以用模块

    加载的选项变成build-in方式加载。

  归纳一下就是: 括号里如果为空白,则该选项未被加载;

  如果括号里是*,是以build-in的方式加载;

  如果中间是m(此时只能是尖括号),就是以模块的形式动态加载.

3、选项的具体含义

 每个具体选项的含义可以按H键得到帮助,本文的主要是讲清楚实验步骤,

 所有选项均取默认值。

 4、保存设置

 设置完需要的选项后按ESC键退出menuconfig,此时会提示是否保存,选yes.

五、开始编译

1、设置关联文件

  #make dep   

2、编译内核(也就是编译build-in的东西),我的机器用了大概10分钟(奔4+512内存)

  #make bzImage

3、编译模块  这个时间比较长,我用了大概1个小时

  #make clean

  #make modules

4、安装模块

  #make modules_install

5、检查结果

   #depmod –a

检查内核中有没有未解析的symbol,它是生成模块间的依赖关系,

这样启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。

假如输入这个命令后看不到没有任何返回信息的话,那说明编译过程已经成功了。

6、安装完整新内核

  #make install

六、用新内核启动

1、检查/etc/lilo.conf文件

   可以看到新编译的内核已经增加到启动菜单了。

2、执行 /sbin/lilo   使新的启动设置生效

3、重起机器,观看启动菜单,多了一项,说明成功!

七、致谢

    在学习编译内核的过程中得到了水晶剑锋、刀子、苯熊、小二等饼子堂朋友的指点和帮助

,在此谢过。

继续阅读