热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>内核研究>

Linux内核编译实践

来源: 作者: 时间:2008-08-18 Tag: 点击:
最近在网上看了几个Linux内核编译方面的文章,由于很多这样的帖子,随便看了几个都差不多吧。在我真正自己动手去实践的时候,出现了很多的问题。感觉是不能完全按照别人的方法来,因为你们的当时的机器工作环境可能是不一样的。整个过程曲折坎坷。但是最后还是成功啦!下面我将给出自己的实践过程和注意点。
一,为什么要编译内核?
Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。
  通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。
  为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:
  (1)自己定制编译的内核运行更快(具有更少的代码)
  (2)系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
  (3)不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
  (4) 将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些
二,内核编译模式
要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module),动态调用。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。
三、新版LINUX内核的获取与更新
linux内核的获取,可以通过购买光盘,从朋友那里拷贝,当然最直接方便的方式是到linux内核官方的网址:http://www.kernel.org上获取最新的版本,另一种就是补丁文件了,即patch文件。他们都是以tar.gz或者tar.bz2形式打包。注意编译内核的时候要求是root权限。以下的编译更新工作就是以root用户实现的。

四、内核配置
我从linux官方网上下载的内核包是:linux-2.6.26.2.tar.bz2,并将其拷贝到我的fc6(内核为2.6.18)下的/usr/src/kernels/目录下。本身我运行的系统的内核源码就在这个目录下名字为(2.6.18.1.2798.fc6-i686)。并把新内核包解压,用如下命令
#cp linux-2.6.26.2.tar.bz2 /usr/src/kernels/
#cd /usr/src/kernels/
#tar jvxf linux-2.6.26.2.tar.bz2
# tar cvzf 2.6.18.1.2798.fc6-i686 /*可以把旧的版本备份,可选,以防不测*/
说到这里还要将几个重要的文件,以防万一还是备份一下比较好。(可选)
1.备份内核启动文件/boot
#cd /boot
#tar cvzf boot.tar.gz boot
2.备份系统的头文件
#cd /usr/include
#tar cvzf linux.tar.gz linux
3.备份模块中的库文件
#cd /lib/modules
#tar cvzf 2.6.18.1.2798.fc6.tar.gz 2.6.18.1.2798.fc6
4.备份重要的配置目录
#cd /
#tar cvzf etc.tar.gz etc
接下来便是实际的工作啦。
#cd /usr/src/kernels/linux-2.6.26.2
#make mrproper
该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。由于我们使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册