您的位置:首页 > 运维架构 > Linux

打造自己的专属linux(四):Linux内核编译过程简介

2013-09-09 18:01 731 查看
linux在前不久刚发布了最新的3.0内核,在linux的学习中,了解内核的编译是一个必不可少的功课。前几天,学习了linux内核的编译流程,在此总结下,大家来一起学习。

以最新的3.0内核为例,我下载的是linux3.0.1 下载地址:http://www.kernel.org

前提条件:1.确定你的linux有装Development Tools ,Development Libraris,他们是实现编译的前提工具,如果没有请使用yum groupinstall安装

2.下载内核源码文件并拷贝进虚拟机里

内核编译的原则:1.编译时需要一个新版本,漏洞少一点

2.尽可能选择和自己硬件对应的驱动模块,兼容性好

3.服务器一般不用过新的内核,因为它没有发现一些bug,有可能不稳定

--------------------------------------------------------------------------------------------------------------------------

第一步:将您的内核文件复制到/usr/src/目录下,解压缩内核源码文件,以为的电脑为例

[cpp] view
plaincopy

[root@server56 src]# ls

busybox-1.18.5 linux linux-3.0.1.tar.bz2

[root@server56 src]# tar -xf linux-3.0.1.tar.bz2 # 解压缩过程比较长,耐心等待

[root@server56 src]# ls

busybox-1.18.5 linux linux-3.0.1 # 这就是源待码文件目录

第二步:进入源代码目录,拷贝/boot/config-2.6.18-164.el5 到源代码目录并改名为.config

[cpp] view
plaincopy

[root@server56 src]# cd linux-3.0.1

[root@server56 linux-3.0.1]# cp /boot/config-2.6.18-164.el5 ./.config

## 这里需要做一个说明:由于我们是初次编译内核,而内核的选项多达上千条,所有我们以redhat官方提供的内核版本配置文件为蓝本,在它的基础上配置,保证内核的稳定性,而redhat内核的配置文件就是/boot/config-`uname-r` uname-r指的是当前系统的版本号,我的是2.6.18-164.el5,编译时,系统会将你的配置保存在.config文件中

第三步:输入make menuconfig 进去编译配置界面 (其实有很多中方式,这里只介绍一种常用的)

[cpp] view
plaincopy

[root@server56 linux-3.0.1]# make menuconfig



可以看到,这里面有很多内核选项。里面的选项对应的翻译可以查看这个链接:http://lamp.linux.gov.cn/Linux/kernel_options.html

*号表示编译进内核, M表示编译成模块,按空格键选择 ,回车键进入选择分支,我们已经使用了.config文件,所以可以直接编译,当然你可以选择自己想要的功能。

作者:金步国,国内有名的linuxer,翻译过很多linux书籍

选择接受后按按下面的ESC,弹出的界面选yes保存



第四步:使用make命令编译内核 #!需要注意的是,这个过程相当漫长,大概需要几十分钟到一个多小时的时间,而且最好不要在终端内进行,任何断开连接都会造成编译失败,建议这一步在虚拟机控制台内进行

[cpp] view
plaincopy

[root@server56 linux-3.0.1]# make

第五步:编译结束后,安装模块

[cpp] view
plaincopy

[root@server56 linux-3.0.1]# makemake modules_install

第六步:安装内核,这一步会将内核信息写入到你的grub里,(可以手动编辑grub.conf文件去掉)你可以用现有的虚拟机体验新版本内核(前提不出错,内核出错会在启动时显示kernel panic!内核恐慌,可能是选择的模块没有对应的依赖关系,只能重新编译)

[cpp] view
plaincopy

[root@server56 linux-3.0.1]# make install

在完成编译后,内核文件会存放在/boot目录下

[cpp] view
plaincopy

[root@server56 boot]# ls

System.map initrd-2.6.18-164.el5.img vmlinuz-2.6.18-164.el5

System.map-2.6.18-164.el5 initrd-2.6.28.10.img vmlinuz-2.6.28.10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: