分类: 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
首先,要做好准备工作,你的手中至少要有以下四套软件包:
1、Linux的
2、Modutils 3.2 工具包(module-init-tools-3.2.tar.gz):原2.4.x下的工具包不适用于2.6.x,必须升级;
3、Mkinitrd
4、Device Mapper 开发包(device-mapper-
5、LVM 开发包(lvm2-
6、Binutils 开发包(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
行如下命令:
rpm -ivh --nodeps --force lvm2-
rpm -ivh --nodeps --force device-mapper-
rpm -ivh --nodeps --force mkinitrd-
将当前目录切换到binutils-2.17.tar.gz下载目录,依次执行如下命令:
tar zxf binutils-2.17.tar.gz
cd binutils-2.17
./configure
make
make install
好了,所有安装包均已齐备,现在开始编译新内核吧!
将当前目录切换到linux-
cp ./linux-
tar zxf linux-
cd linux-
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 support(RAID 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-
内核编译到此就完全结束了,若想要成功启动内核,还要做一些后续的工作。依次执行如下命令:
cp
/usr/src/linux-
cp
/usr/src/linux-
cd /boot
rm -rf System.map(删除原有的内核启动连接)
rm -rf vmlinuz
ln -s
System.map-
ln -s vmlinuz-
若你的Linux为GRUB启动,则还要修改相应的启动文件:
cd /boot
new-kernel-pkg --mkinitrd
--depmod --install
df(该命令查看根分区,即标识为“/”的分区,看好后要记住它的名字,假设为/dev/sda2)
gedit /boot/grub/grub.conf
在弹出的编辑窗口中,将“default=1”改为“default=0”,并将“kernel”行的“LABEL=/”改为上一步
所查看的分区,按我们上一步的假设,改完以后的“kernel”行应该是下面的样子:
kernel
/vmlinuz-
好了,整个内核升级大功告成!重新启动之后,在操作系统选择栏中会看到如下两项:
Red Hat
Linux(
Red Hat
Linux(
选择第一项,就可以真正使用