为什么要编译自己的内核

如题所述

一前言

为什么要编译自己的内核?这可能会有各种不同的答案,列举如下:

1为了研究,学习内核源码。

2为了支持新的硬件或者打开某项内核功能。

3升级内核到更新版本。

4按自己的要求定制和优化内核功能。

如此种种...

折腾不需要理由,这里我就不在多说,下面直接进入主题。

编译方式

编译内核有多种方式,从kernel.org下载选择下载需要的版本的内核源码,

如:linux-2.6.32-rc1.tar.bz2,下载内核源码到/home/user/目录,进入下载目录,解压压缩包。

#cd/home/user/

#tar-xjvflinux-2.6.32-rc1.tar.bz2

二准备编译环境

开始之前,首先确认下面软件包已经安装(编译中标普华4.0时,直接全部安装CD3可保证此条件)。

*rpmdevtools

*yum-utils

fedora系统可以使用如下命令安装:

#yuminstallyum-utilsrpmdevtools

1.生成一个rpmbuild命令工作所需的目录树,下面命令可以完成该操作,也可以手动建立目录树。

命令建立:

#rpmdev-setuptree

此命令将会在/usr/src/rpmbuild/目录下生成如下目录结构(如果此位置没有,则可能在当前用户目录下).

#tree/usr/src/rpmbuild/

rpmbuild/

|--BUILD

|--RPMS

|--SOURCES

|--SPECS

`--SRPMS

上面部分是rpmbuild的环境建立。rpm

3.安装内核源码包需要的依赖组件(在此可以跳过此步操作)

su-c'yum-builddepkernel-.src.rpm'

4.安装内核源码到系统,默认目录在/usr/src/neoshine:

rpm-Uvhkernel-.src.rpm

三配置内核(生成config配置文件)

下面将介绍如何解开源码包,并修改,配置和重新打包源码

1.解开源码包并打上所有的补丁到BUILD目录

cd~/rpmbuild/SPECS

rpmbuild-bp--target=`uname-m`kernel.spec

kernel源码将在这里找到:

/usr/src/neoshine/rpmbuild/BUILD/kernel-/linux-.directory

配置内核源码

1.进入内核源码:

cd~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch/

2.复制/boot/config*配置文件到源码目录下,此config文件也可以是已经配好或者其他地方备份的kernel配置文件:

cp/boot/config2.6-2.6.$ver.$arch.config

3.先检查kernel配置中新增的选项:

makeoldconfig

4.定制内核功能,关闭initrd支持选项,执行图形化内核配置工具:

makemenuconfig

注:在genericsetup选项下找到initialRAMsystemandRAMdisk(initramfsandinitrd)support项,取消编译。同时确保跟文件系统对应的驱动和系统所在存储器对应的驱动都已经编译到内核(否则会无法启动系统).

5.在.config文件第一行改为下面内容(注意:没有此行时,后面的编译会报错)

#i386

6.拷贝.config到SOURCES/:

cp.config../SOURCES/config-$arch

四编译新内核

1.下面开始准备编译新的内核包

打开SPEC/kernel.spec

vimSPEC/kernel.spec

改变下面行内容,可以定制自己的内核扩展名(如fc10之类):

%definebuildid.<自己内核的小版本名>

下一步将生成一个新内核的rpm包,此过程需要编译内核源码包

使用下面命令生成新的内核源码包

rpmbuild-bb--withbaseonly--withoutdebuginfo--target=`uname-m`kernel.spec

参数说明:bb表示只编译二进制包,即不生成源码包,withoutdebuginfo表示没有调试信息,

target=`uname-r`表示生成对应当前平台的内核包

如果上面的命令成功执行完成,那么会在BUILD/i686目录下生成新的内核安装包

五安装新内核

rpm-ivhkernel-$ver-$arch.rpm

此步操作会自动安装内核到boot目录下,安装对应内核模块到/lib/moles/目录下,并且生成新内核对应的grub引导菜单。

修改grub引导菜单为以下格式

titlenewkernel

kernel/boot/vmlinuz-$ver-$archroot=/dev/sdax(hdax)

注意,此处不要使用uuid指定跟文件系统(可能会无法挂载根分区而导致内核死机),也不要再加和显示相关的参数(内核不支持对应设置时,只会看到一个黑黑的屏幕)。

至此一个禁用initrd的新内核配置安装完毕!

温馨提示:答案为网友推荐,仅供参考
相似回答