Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117623
  • 博文数量: 24
  • 博客积分: 1226
  • 博客等级: 中尉
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-11 20:47
文章分类

全部博文(24)

文章存档

2011年(2)

2010年(4)

2009年(5)

2008年(13)

我的朋友

分类: LINUX

2010-03-04 10:04:26

适用于内核从2.4.x升级到2.6.x。对虚拟机很适用的!

在虚拟机上运行Red Hat Linux 9.0或安装内核到最后出现bzImage编译错误的情况,则必须安装Binutils

开发包,虚拟机上该类型的错误消息一般为:

OBJCOPY arch/i386/boot/compressed/vmlinux.bin

BFD: Warning: Writing section `.bss' to huge (ie negative) file offset 0xc025d000.

objcopy: arch/i386/boot/compressed/vmlinux.bin: File truncated

make[2]: *** [arch/i386/boot/compressed/vmlinux.bin] Error 1

make[1]: *** [arch/i386/boot/compressed/vmlinux] Error 2

make: *** [bzImage] Error 2

首先,要做好准备工作,你的手中至少要有以下四套软件包:

1Linux2.6.20.1版本内核包(linux-2.6.20.1.tar.gz):作用就不多说了,自然是内核的源码包;

2Modutils 3.2 工具包(module-init-tools-3.2.tar.gz):原2.4.x下的工具包不适用于2.6.x,必须升级;

3Mkinitrd 4.1.18-2 工具包(mkinitrd-4.1.18-2.i386.rpm):在make install时需要使用该工具;

4Device Mapper 开发包(device-mapper-1.00.19-2.i386.rpm):Mkinitrd工具包依赖该包;

5LVM 开发包(lvm2-2.00.25-1.01.i386.rpm):Device Mapper依赖该包;

6Binutils 开发包(binutils-2.17.tar.gz):如升级安装于虚拟机上的Red Hat Linux,则必需该包。

大家最好到Google上搜索,搜索的时候要用文件名全名

下载完后.现在开始安装工具包吧!首先安装Modutils 3.2 工具包,将当前目录切换到module-init-

tools-3.2.tar.gz的下载目录下,依次执行如下命令:

tar zxf module-init-tools-3.2.tar.gz

cd module-init-tools-3.2

./configure --prefix=/

make moveold(将原来的工具程序改名,这样还可继续使用原来的2.4.x内核)

make all install

./generate-modprobe.conf /etc/modprobe.conf(生成2.6.x内核的新配置文件)

下面安装Mkinitrd 4.1.18-2 工具包,将当前目录切换到mkinitrd-4.1.18-2.i386.rpmdevice-mapper-

1.00.19-2.i386.rpmlvm2-2.00.25-1.01.i386.rpm的下载目录(三个文件最好在同一目录)下,依次执

行如下命令:

rpm -ivh --nodeps --force lvm2-2.00.25-1.01.i386.rpm

rpm -ivh --nodeps --force device-mapper-1.00.19-2.i386.rpm

rpm -ivh --nodeps --force mkinitrd-4.1.18-2.i386.rpm

将当前目录切换到binutils-2.17.tar.gz下载目录,依次执行如下命令:

tar zxf binutils-2.17.tar.gz

cd binutils-2.17

./configure

make

make install

好了,所有安装包均已齐备,现在开始编译新内核吧!

将当前目录切换到linux-2.6.20.tar.gz下载目录,依次执行如下命令:

cp ./linux-2.6.20.1.tar.gz /usr/src

tar zxf linux-2.6.20..1tar.gz

cd linux-2.6.20.1

make mrproper

make menuconfig

make clean(如果以前make失败过)

此时会出现一个图形界面,列出了所有的内核配置选项,其中有几项是必需的,用“Y”键选中:

Loadable Module support”中,选“Module unloading”和“Automatic kernel module loading”;

Device Drivers”→“Block Devices”中,选“Loopback device support”;

Device Drivers”→“Multi-device supportRAID and LVM)”中,选“device mapper support”;

Device Drivers”→“Graphics support”中,选“Support for frame buffer devices”;

Device Drivers”→“USB support”中,若不在虚拟机环境中,应尽量全选以支持USB

注意,在Vmware下以下选项必须选上,否则编译要出问题:

Device Drivers --->SCSI device support ---><*> SCSI disk support

Device Drivers --->SCSI device support --->SCSI low-level drivers ---> <*> BusLogic SCSI

support

Device Drivers ---> Fusion MPT device support ---> Fusion MPT (base + ScsiHost) drivers

Fusion MPT misc device (ioctl) driver(这个不确定)#注意:只能选模块方式,直接编译进内核,就出错,不知道为什么,这个浪费了我好多时间才找到,编译了几十次的成果。

Device Drivers ---> USB support ---><*> USB Mass Storage support (*suppor for host-side Usb选上)

Device Drivers ---> Networking support --->Ethernet (10 or 100Mbit) ---> <*> AMD PCnet32 PCI

support

最好把ext3文件系统支持也编译进内核(我这个版本默认是模块形式)

<*> Ext3 journalling file system support

<*>Ext3 extended attributes

<*>Ext3 POSIX Access Control Lists

<*>Ext3 Security Labels

<*>JBB (ext3) debugging support

对于要求系统提供比较多样的网络协议的开发人员,还应在“Network Support”中进行相应设置。

设置完成!开始进行真正的内核编译工作。依次执行如下命令:

make

make modules

make modules_install

make install

如果是VMware虚拟机+SCSI硬盘的用户,在make install之前,还要执行以下命令:

直接编译进去

cp /usr/src/linux-2.6.20.1/drivers/scsi/BusLogic.o /lib/modules/2.6.20/kernel/drivers/scsi

内核编译到此就完全结束了,若想要成功启动内核,还要做一些后续的工作。依次执行如下命令:

cp /usr/src/linux-2.6.20/arch/i386/boot/bzImage /boot/vmlinuz-2.6.20

cp /usr/src/linux-2.6.20/System.map /boot/System.map-2.6.20

cd /boot

rm -rf System.map(删除原有的内核启动连接)

rm -rf vmlinuz

ln -s System.map-2.6.20.1 System.map(设置新的内核启动连接)

ln -s vmlinuz-2.6.20.1 vmlinuz

若你的LinuxGRUB启动,则还要修改相应的启动文件:

cd /boot

new-kernel-pkg --mkinitrd --depmod --install 2.6.20.1

df(该命令查看根分区,即标识为“/”的分区,看好后要记住它的名字,假设为/dev/sda2

gedit /boot/grub/grub.conf

在弹出的编辑窗口中,将“default=1”改为“default=0”,并将“kernel”行的“LABEL=/”改为上一步

所查看的分区,按我们上一步的假设,改完以后的“kernel”行应该是下面的样子:

kernel /vmlinuz-2.6.20 ro root=/dev/sda2

好了,整个内核升级大功告成!重新启动之后,在操作系统选择栏中会看到如下两项:

Red Hat Linux2.6.20.1

Red Hat Linux2.4.20-8

选择第一项,就可以真正使用2.6.20.1Linux系统了。


阅读(1009) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~