Linux内核编译过程详解

来源:互联网 发布:直销管理平台系统源码 编辑:程序博客网 时间:2024/05/02 04:15

使用Linux系统已有2年多的时间了,多多少少对Linux系统有了深入的了解,但是却没有亲自编译过内核。像升级BIOS一样,我担心内核一旦编译出错,自己好不容易配置的Linux系统就会前功尽弃。最近,终于下定决心研究了一下Linux的内核编译,些许心得感受拿来和大家一同分享。

先介绍一下Linux内核:

Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统。内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制。Linux内核的一大特点就是采用了整体式结构,有很多过程组成,每个过程都可以独立编译,其模块机制又湿得内核保持独立而又易于扩充。Linux发行版实在Linux内核的基础之上,与外带的应用软件和工具打包配置之后发行的版本。最初的Linux内核在1991年由当时还在芬兰赫尔辛基大学计算机系读书的Linus Torvalds开发,之后Linus很快聚集了大量来自其他自由软件项目的开发者和用户为Linux内核贡献代码。当前估计有上千开发者在为Linux内核贡献代码。目前,官方最新的内核由Linus本人维护,过往的稳定版由Greg Kroah-Hartman和Chris Wright进行维护。

Linux发行版介绍:http://www.fengwenxuan.com/linux/1350.html

The Linux Kernel Archives:http://www.kernel.org

下面我来介绍一下Kernel.org这个页面的相关内容:

自2.6.0版本发布后,Linux内核以A.B.C.D的方式命名。A和B的变化可以说无关紧要,C是内核的真实版本,每一个版本的变化都会带来新的特性。例如内部API的变化等等,改动的数量常常上万。D是安全补丁和bug修复。

如果你是Linux的初学者或用户,只需了解stable即可,它代表稳定版的内核更新。mainline指当前的官方内核,由Linus Torvalds进行更新维护,由开发者们贡献的代码主要是合并到mainline当中。linux-next和snapshot都是代码提交周期结束之前生成的快照,用于给Linux代码贡献者们做测试使用。目前stable版本的更新周期为六到十周,下一个稳定版本的rc基本上每周都会更新。

新版本的内核分两种,一种是Full  Source版本,完整的内核版本。比较大,一般是tar.gz或者.bz2文件。另一种是patch文件,即补丁文件。patch文件一般只有及时K到几百K,但是对于特定的版本来说,你要找到自己对应的版本才能使用。

内核升级前的准备工作:

Linux系统进行内核升级或定制内核时需要安装GCC编译工具、make编译器,同时变异内核需要root权限。

安装GCC编译环境参考:http://www.fengwenxuan.com/rhelinux/248.html

下面是我的系统信息:

————————————-

Red Hat Enterprise Linux 5.5

kernel:2.6.18-194.el5

————————————-

注意:内核升级有风险,可能会影响现有的应用程序。但是只要做好准备,就能将危险性降到最低。进行内核升级对应用程序运行的兼容性、稳定性等等都有好处。

下面进行内核升级:

1.使用命令uname  –r 查看自己linux系统的内核版本

2.从中心ftp上下载最新的内核tar包到/usr/src/kernels目录,并解压。解压命令如图:

3.进入解压后的内核源码包目录,接着使用命令 make mrproper ,命令的作用是在每次配置并重新编译内核前需要先执行“make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译。

4.使用make menuconfig 命令,进行内核定制,选择自己想要的功能,这里以编译内核,让linux内核支持ntfs文件系统为例来讲解,具体过程见图:


调出文字界面的配置菜单,接下来选择文件系统选项:


敲回车后,继续选择能支持Windows 文件系统类型的选项:

最后选择我们需要的NTFS文件系统类型,编译到内核模块里,并且选择exit退出:

最后选择退出:


选择yes,保存新的内核配置文件:

看一下生成的.config文件的位置和属性


5.在编译内核之前,需要使用“make dep”命令生成内核功能间的依赖关系,为编译内核做好准备。


6.使用“make bzImage”命令进行内核编译,编译过程将持续相当长的时间(20分钟以上),请耐心等候。(转者按:可开启多个线程进行编译make -j10 bzImage 其中 -j10表示开启10个线程进行搞,后面编译亦可使用~)


7

.使用“make modules”命令编译内核模块,编译过程将持续相当长的时间(30分钟以上),请耐心等候。


8.内核模块编译好后需要安装到Linux系统的相应目录中才可以使用,使用“make modules_install”命令安装内核模块。“/lib/modules/”目录用于存放Linux系统中的内核模块,内核的各个版本都在该目录下建有子目录用于存放内核模块。


9.使用“make install”命令安装新内核到系统中,并且自动为是用新内核作必要的配置。


10.查看编译成功后,在/boot/目录下会生成vmlinuz-2.6.23.9 的文件和能看到/boot/grub/grub.conf里的启动项。


11.到/lib/modules/2.6.23.9/kernel/fs 目录下查看新生成的支持NTFS文件系统的内核模块。


12.重启计算机,看到开机画面后,敲回车键选择新的内核引导系统。


13.进入系统后可以使用“uname -r”查看新内核版本,至此内核编译已经成功完成。

转自http://www.fengwenxuan.com/rhelinux/1366.html



原创粉丝点击