| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 内核研究

介绍RedHat AS4内核配置更改再编译

时间:2007-05-08 10:11:44  来源:Linux联盟收集整理  作者:

一、内核内存配置检查: mMnLinux联盟

----------------------- mMnLinux联盟

可以通过以下办法来查看启动时内核是否支持64G内存 mMnLinux联盟

首先要弄清启动时用的是哪个内核 mMnLinux联盟

[root@study ~]# cat /boot/grub/grub.conf mMnLinux联盟

... mMnLinux联盟

default=0 (说明第一个条目是默认的启动) mMnLinux联盟

timeout=5 mMnLinux联盟

splashimage=(hd0,0)/grub/splash.xpm.gz mMnLinux联盟

hiddenmenu mMnLinux联盟

title Red Hat Enterprise Linux AS (2.6.9-34.ELsmp) mMnLinux联盟

root (hd0,0) mMnLinux联盟

kernel /vmlinuz-2.6.9-34.ELsmp ro root=/dev/VolGroup00/LogVol00 rhgb quiet mMnLinux联盟

initrd /initrd-2.6.9-34.ELsmp.img mMnLinux联盟

title Red Hat Enterprise Linux AS-up (2.6.9-34.EL) mMnLinux联盟

root (hd0,0) mMnLinux联盟

kernel /vmlinuz-2.6.9-34.EL ro root=/dev/VolGroup00/LogVol00 rhgb quiet mMnLinux联盟

initrd /initrd-2.6.9-34.EL.img mMnLinux联盟

我的内核是vmlinuz-2.6.9-34.ELsmp mMnLinux联盟

对应安装时的内核编译文件就是 mMnLinux联盟

/boot/config-2.6.9-34.ELsmp mMnLinux联盟

检查高内存支持 mMnLinux联盟

[root@study ~]# more /boot/config-2.6.9-34.ELsmp |grep 4G mMnLinux联盟

# CONFIG_X86_4G is not set mMnLinux联盟

# CONFIG_X86_4G_VM_LAYOUT is not set mMnLinux联盟

# CONFIG_HIGHMEM4G is not set mMnLinux联盟

CONFIG_HIGHMEM64G=y 说明我的内核编译时选择了64G内存支持, mMnLinux联盟

只有4G支持的情况会类似: mMnLinux联盟

[root@study ~]# more /boot/config-2.6.9-34.EL |grep 4G mMnLinux联盟

# CONFIG_X86_4G is not set mMnLinux联盟

# CONFIG_X86_4G_VM_LAYOUT is not set mMnLinux联盟

CONFIG_HIGHMEM4G=y mMnLinux联盟

# CONFIG_HIGHMEM64G is not set mMnLinux联盟

----------------------- mMnLinux联盟

二、定制内核: mMnLinux联盟

----------------------- mMnLinux联盟

如果要改变内核对高内存的支持需要重新编译内核。定制内核有两种方法 mMnLinux联盟

1)、redhat专有,中间可以得到一个rpm内核包,用来安装或者与别人共享。 mMnLinux联盟

2)、用于所有linux发行版,不会得到rpm包,从原代码生成您定制的内核。 mMnLinux联盟

这里只介绍第一种 mMnLinux联盟

警告: mMnLinux联盟

定制内核超出了红帽的服务范围和支持流程。可能会使您的系统失去红帽的支持服务。风险自负。 mMnLinux联盟

如果已投入运行的redhat系统,只是想改变内核的一项配置的话,按我说的步骤会把影响降到最低。 mMnLinux联盟

1,检查相关工具包 mMnLinux联盟

[root@study ~]# system-config-packages mMnLinux联盟

在弹出的"添加或删除软件包"界面选中"开发工具",并检查它的细节中, mMnLinux联盟

kernel-devel,kernel-smp-devel,kernel-hugemem-devel,他们会产生以下文件夹: mMnLinux联盟

[root@study ~]# ls /usr/src/kernels/ mMnLinux联盟

2.6.9-34.EL-hugemem-i686 2.6.9-34.EL-i686 2.6.9-34.EL-smp-i686 mMnLinux联盟

每个文件夹对应一个内核代码树(他们都不是完整的代码,只是可以用来编译相应的内核模块而已, mMnLinux联盟

而不能用来编译真正的内核)。 mMnLinux联盟

2,准备完整的源代码环境 mMnLinux联盟

请使用与您系统版本一致的软件包(cat /etc/redhat-release)。 mMnLinux联盟

如果注册了红帽网络可以通过下面方法来下载安装源代码 mMnLinux联盟

# up2date redhat-rpm-config rpm-build mMnLinux联盟

# up2date --get-source kernel mMnLinux联盟

# rpm -ivh /var/spool/up2date/kernel*.src.rpm mMnLinux联盟

参考http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/release-notes/as-x86/ mMnLinux联盟

如果没有注册红帽网络,只能手工下载安装了(我猜配发的光盘中应该可以找到这个包,但我的光盘不全无法试验) mMnLinux联盟

ftp://ftp.redhat.com/pub/redhat/linux/updates/enterprise/4AS/en/os/SRPMS/kernel-2.6.9-34.src.rpm mMnLinux联盟

请下载用与您系统版本一致的软件包。 mMnLinux联盟

# rpm -ivh /mnt/kernel-2.6.9-34.src.rpm mMnLinux联盟

# cd /usr/src/redhat/SPECS/ mMnLinux联盟

#cd /usr/src/redhat/SPECS mMnLinux联盟

#vi kernel-2.6.spec mMnLinux联盟

主要修改如下地方: mMnLinux联盟

define buildsource 0------------我的这个在第8行,改为1, mMnLinux联盟

这就是为什么没有源代码包的原因,因为默认不生成源代码包。 mMnLinux联盟

%define buildhugemem 1 支持高内存 mMnLinux联盟

%define buildsmp 1 支持多处理器 mMnLinux联盟

%define buildlargesmp 1 支持更多处理器 mMnLinux联盟

Requires: qt-devel, gtk2-devel readline-devel ncurses-devel mMnLinux联盟

我的在1187行,如果没用用X的话,把这句注释掉,这样编译出来的包就不依赖于X-window的某些包, mMnLinux联盟

因为内核配置是可以用make xconfig,所以默认依赖X-window,如果没装X-window,可以注释掉。 mMnLinux联盟

保存退出。 mMnLinux联盟

#touch /etc/beehive-root mMnLinux联盟

这句命令非必须,如果不做的话,最后编译出来的包都会变成kernel-*.*-root.rpm,多了个root, mMnLinux联盟

据说是为了标示包的编译人的,如果touch了这个文件,就没有这个问题了,命名和官方rpm一样。 mMnLinux联盟

#rpmbuild -ba --target=`uname -m` ./kernel-2.6.spec mMnLinux联盟

编译i686平台(这里uname -m命令会得到i686的结果)的所有包,这样上面介绍的所有包都会生成, mMnLinux联盟

或者换成rpmbuild -bb --target=`uname -m` ./kernel-2.6.spec只编译非src.rpm。 mMnLinux联盟

所有包就会生成到/usr/src/redhat/RPMS/i686下面 mMnLinux联盟

如果只需要sourcecode而并非所有rpm包,那在修改spec文件时还要修改如下行: mMnLinux联盟

%ifarch noarch mMnLinux联盟

%define builddoc 1 mMnLinux联盟

%define buildsource 0---------------这里0修改为1 mMnLinux联盟

在编译的时候使用rpmbuild -ba --target=noarch ./kernel-2.6.spec,这样仅仅编译sourcecode和doc包, mMnLinux联盟

会节省很多时间。 mMnLinux联盟

3,配置内核 mMnLinux联盟

为了标识我们将来自己订制的内核,以和现有的内核区分: mMnLinux联盟

[root@study kernel-2.6.9]# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/ mMnLinux联盟

[root@study linux-2.6.9]# vi Makefile mMnLinux联盟

找到EXTRAVERSION改成下面的形式: mMnLinux联盟

EXTRAVERSION = -custom-2.6.9-34 mMnLinux联盟

因为我的/boot/config-2.6.9-34.EL内核不支持64G内存,我要“克隆”一个新的,并支持64G内存。 mMnLinux联盟

[root@study linux-2.6.9]# diff .config /boot/config-2.6.9-34.EL 比较这两个配置文件, mMnLinux联盟

一般无输出,也就是没有差异,如果有差异就: mMnLinux联盟

[root@study linux-2.6.9]# cp /boot/config-2.6.9-34.EL .config mMnLinux联盟

cp:是否覆盖 '.config' ? y mMnLinux联盟

我们的目的是在原来的基础上只修改内存配置,这个.config文件决定了编译内核的选项。 mMnLinux联盟

不建议直接修改.config,而通过下面的方法: mMnLinux联盟

[root@study linux-2.6.9]#make menuconfig mMnLinux联盟

在界面中选择 Processor type and features ---> mMnLinux联盟

再选择 High Memory Support (4GB) ---> mMnLinux联盟

( ) off mMnLinux联盟

( ) 4GB mMnLinux联盟

(X) 64GB mMnLinux联盟

退出,退出,再退出,当下面信息出现,一定要选yes mMnLinux联盟

Do you wish to save your new kernel configuration? mMnLinux联盟

4,编译并安装内核 mMnLinux联盟

这里有两种选择,结果一致,任选其一。 mMnLinux联盟

1)这时候您可以做一个rpm mMnLinux联盟

[root@study linux-2.6.9]# make rpm mMnLinux联盟

安装完成的这个内核rpm包 mMnLinux联盟

[root@study linux-2.6.9]# rpm -ivh /usr/src/redhat/RPMS/i386/kernel-2.6.9custom2.6.934-2.i386.rpm mMnLinux联盟

可以看到/boot下面多了我们的新内核文件vmlinuz-2.6.9-custom-2.6.9-34 mMnLinux联盟

/lib/modules下面多了文件夹2.6.9-custom-2.6.9-34,其中包含了新内核的所有模块。 mMnLinux联盟

为我们的新内核制作一个内存盘,确保新内核能够启动 mMnLinux联盟

[root@study linux-2.6.9]# mkinitrd /boot/initrd-2.6.9-custom-2.6.9-34.img 2.6.9-custom-2.6.9-34 mMnLinux联盟

在启动引导器grub的配置文件中添加属于新内核的一段配置 mMnLinux联盟

[root@study linux-2.6.9]# vi /boot/grub/grub/conf mMnLinux联盟

default=2 因为我的新内核配置段排在第3位,这样把新内核作为默认启动项 mMnLinux联盟

... mMnLinux联盟

title Red Hat Enterprise Linux AS(2.6.9-34custom) mMnLinux联盟

root (hd0,0) mMnLinux联盟

kernel /vmlinuz-2.6.9-custom-2.6.9-34 ro root=/dev/VolGroup00/LogVol00 rhgb quiet mMnLinux联盟

initrd /initrd-2.6.9-custom-2.6.9-34.img mMnLinux联盟

2)[root@study linux-2.6.9]# make mMnLinux联盟

[root@study linux-2.6.9]# make modules_install mMnLinux联盟

[root@study linux-2.6.9]# make install mMnLinux联盟

新的kernel, initrd 和 system.map 会自动拷贝到/boot目录,新的内核也会自动加入到grub.conf的启动列表里面。 mMnLinux联盟

在上面两个步骤之一完成后 mMnLinux联盟

重新启动时系统就使用我们订制的内核了。 mMnLinux联盟

[root@study linux-2.6.9]# reboot mMnLinux联盟

请检查系统及各个服务的运行状况,如果有错误,可以更改/boot/grub/grub.conf的default值,选原来的配置段, mMnLinux联盟

重新启动后,就恢复使用原来的内核了。mMnLinux联盟

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目更新
栏目热门