适用于内核从 2.4.x 升级到 2.6.x 。对虚拟机很适用的!
(1)在虚拟机上运行 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
(2) 如果选择linux 2.6.18版本,可能会在内核启动的时候,运行到
ImPS/2 Generic Wheel Mouse as /class/input/input1就不动了。
我是通过选择2.6.20.1版本后才成功的。
首先,要做好准备工作,你的手中至少要有以下四套软件包:
1 、 Linux 的 2.6.20 .1 版本内核包( linux-2.6.20.1.tar.gz ):作用就不多说了,自然是内核的源码包;
2 、 Modutils 3.2 工具包( module-init-tools-3.2.tar.gz ):原 2.4.x 下的工具包不适用于 2.6.x ,必须升级;
3 、 Mkinitrd 4.1.18-2 工具包( mkinitrd-4.1.18-2.i386.rpm ):在 make install 时需要使用该工具;
4 、 Device Mapper 开发包( device-mapper-1.00.19-2.i386.rpm ): Mkinitrd 工具包依赖该包;
5 、 LVM 开发包( lvm2-2.00.25-1.01.i386.rpm ): Device Mapper 依赖该包;
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 4.1.18-2 工具包,将当前目录切换到 mkinitrd-4.1.18-2.i386.rpm 、 device-mapper-
1.00.19 -2.i386.rpm 和 lvm2-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 support ( RAID and LVM )”中,选“ device mapper support ”;
“ Device Drivers ”→“ Graphics support ”中,选“ Support for frame buffer devices ”;
“ Device Drivers ”→“ USB support ”中,若不在虚拟机环境中,应尽量全选以支持 USB ,其实在vmvare 6.0以后都应该尽量全选以支持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 bzImage
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
内核编译到此就完全结束了.
若想要成功启动内核,还要做一些后续的工作。
依次执行如下命令(其实这些命令,已经不需要执行了,因为make install 已经做了这件事了,可以到/boot下面执行命令 ll 验证)
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 vmlinux
ln -s System.map-2.6.20.1 System.map (设置新的内核启动连接)
ln -s vmlinuz-2.6.20.1 vmlinuz
若你的 Linux 为 GRUB 启动,则还要修改相应的启动文件:
cd /boot
new-kernel-pkg --mkinitrd --depmod --install 2.6.20
vi /boot/grub/grub.conf
(1)将“ default=1 ”改为“ default=0 ”,
----------------以下这一步不一定需要执行,只有当起不来的时候再进就内核执行这一部。
(2)将“ kernel ”行的“ LABEL=/ ”改为
df (该命令查看根分区,即标识为“ / ”的分区,看好后要记住它的名字,假设为 /dev/sda2 )
所查看的分区,按我们上一步的假设,改完以后的“ kernel ”行应该是下面的样子:
kernel /vmlinuz-2.6.20 ro root=/dev/sda2
好了,整个内核升级大功告成!重新启动之后,在操作系统选择栏中会看到如下两项:
Red Hat Linux ( 2.6.20 .1 )
Red Hat Linux ( 2.4.20 -8 )
选择第一项,就可以真正使用 2.6.20 .1 的 Linux 系统了。
这是一篇关于2.6.18内核升级的文章:http://blog.yam.com/carl44/article/13042579。可以摘取文件系统配置部分进行参考。