现在的位置: 首页 > 综合 > 正文

linux内核编译学习笔记

2013年10月14日 ⁄ 综合 ⁄ 共 2048字 ⁄ 字号 评论关闭

                            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、重起机器,观看启动菜单,多了一项,说明成功!

 

七、致谢

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

,在此谢过。
 

抱歉!评论已关闭.