Chinaunix首页 | 论坛 | 博客
  • 博客访问: 234778
  • 博文数量: 48
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 548
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-28 19:18
文章分类

全部博文(48)

文章存档

2010年(6)

2009年(6)

2008年(36)

我的朋友

分类: LINUX

2008-08-15 00:38:11

在VMware6.0下我经过无数次编译,苦战差不多两个星期,终于把内核编译成功,不过还是在换了一台主机的情况下编译成功的,而且换了linux虚拟 机,我原先那台机子老是在启动后不久突然断电,用不了,就换了一台,我也在怀疑我在原先的那台机子上为什么总是在编译成功后却启动不了,我估计是和硬件有 关,是不是哪个地方不兼容什么的,而我又对硬件了解得比较少,原先的机子用新内核启动时出现如下信息:

Unable to find volume group "VolGroup00"
ERROR: /bin/lvm exited abnormally (pid 326)
mount: error 6 mounting ext3
mount: error 2 mounting none
switchroot: mount failed: 22
umount: /initrd/dev failed: 2
Kernel panic - not syncing: Attempted to kill init!

之后就死掉了.我已经充分考虑了编译配置选项,什么scsi,lvm什么的,都选上了.百度,Google没有一个解决方案,晕.

换了一台主机后终于成功了,要是出现和我上面一样错误的同胞(你们也已经充分考虑了编译配置选项)可以试着换一台机子(有条件的情况下).下面为升级的步骤:

1、查看一下你的内核版本# uname -a
我的为2.6.9-22.EL,好了可以进行下一步骤:

2、下载2.6.18.8内核源码

下载地址:

3、下载内核升级工具
下载module-init-tools-3.2.tar.bz2

由于我之前系统depmod的版本为3.1,所以就下了这个。可以用depmod --version来查看你module-tools的版本。

参考网上文章说要下载mkinitrd-4.1.18-2.i386.rpm,lvm2-2.00.25-1.01.i386.rpm
device-mapper-1.00.19-2.i386.rpm

但是我Red Hat AS4中自带的版本都要比这些高,因此就不用下载了。

4、将下载好的内核源码包和一个升级工具都拷贝到/usr/src文件夹下


5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:
# cd /usr/src (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
# rm –rf linux (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)
# tar jvxf linux-2.6.18.8.tar.bz2 (解压新内核)
# ln -s linux-2.6.18.8 linux (重新生成linux文件夹)


6、安装module-init-tools工具
在/usr/src目录下,依次执行下列命令:
# tar jvxf module-init-tools-3.2.tar.bz2 (解压module-init-tools)
# cd module-init-tools-3.2 (由/usr/src目录进入module-init-tools目录下)
#./configure --prefix=/
# make moveold
# make all install
#./generate-modprobe.conf /etc/modprobe.conf
7、配置内核选项。

# cd linux-2.6.18.8(进入到/usr/src/linux-2.6.18.8目录下)
# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)
# make menuconfig (配置内核各选项)

此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):

(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;
(2)Device Drivers--->Block Devices中选上“Loopback device support“以及“Ram disk 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 Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)
Device Drivers --->;Network device support --->Ethernet (10 or 100Mbit) ---><*> AMD PCnet32 PCI support

Device Drivers --->Character devices -à Serial derivers -à 8250/16650 and Compatiable serial support

Device Drivers-->Fusion MPT device support à<*> Fusion MPT ScsiHost drivers for SPI                                                                  

Device Drivers-->Fusion MPT device supportà<*> Fusion MPT ScsiHost drivers for FC                                                                    

Device Drivers-->Fusion MPT device supportà<*> Fusion MPT ScsiHost drivers for SAS                                                                  

Device Drivers-->Fusion MPT device supportà (12 Maximum number of scatter gather entries (16 - 12                                                

Device Drivers-->Fusion MPT device support à<*> Fusion MPT misc device (ioctl) driver                                                                 

Device Drivers-->Fusion MPT device supportà<*> Fusion MPT LAN driver

Device Drivers--->
Networking support--->
Ethernet (10 or 100Mbit)   --->
<*>   RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL)
<*>   RealTek RTL-8139 PCI Fast Ethernet Adapter support
(3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
Second extended fs support
Ext2 extended attributes
Ext2 POSIX Access Control Lists
Ext2 Security Labels
Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels
JBB (ext3) debugging support
File system--->DOS/FAT/NT Filesystems --->选上“NTFS file system support”;

File Systems --> Miscellaneous filesystems ---><*> Compressed ROM file system support (cramfs)

注意:
ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持没有直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:
kernel panic : no init found ,try passing init = option to kernel.....
或者是:
VFS:Cannot open root device "hdxy" or unknow-block(0,0)
Please append a correct "root=" boot option
kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
或者是:
mount: error 19 mounting ext3
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
umount /initrd/proc fail: 2
Freeing unused kernel memory: 244k freed
Kernel panic – not syncing: No init found. Try passing init = option to kernel


如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
Device Drivers ---><*>SCSI device support (此项不选的话,下面两项就选择不上)
Device Drivers ---><*>SCSI device support ---><*>SCSI disk support
Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI support


8、开始编译
在/usr/src/linux-2.6.18.8目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!
# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
# make clean (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)
# make bzImage (注意大小写。这一步才是真正编译内核)
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。
# make modules (编译可加载模块)
# make modules_install (安装可加载模块)
安装成功后,系统会在/lib/modules目录下生成一个2.6.18.8子目录,里面存放着新内核的所有可加载模块。
# make install (安装新内核)
9、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:
# cp /usr/src/linux-2.6.18.8/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18.8
# cp /usr/src/linux-2.6.18.8/System.map /boot/System.map-2.6.18.8
# cd /boot (进入boot目录)
# rm –rf System.map (删除原来的连接)
# ln –s System.map-2.6.18.8 System.map (重新建立连接)

注:这一步(网上看到的)其实在make install的时候就已经建立了,我们没有必要再去输这些命令了。

10、你会发现在你的/boot目录下已经有一个initrd-2.6.18.8.img的文件了,你可以用以下命令来更新它:

# new-kernel-pkg --mkinitrd --depmod --install 2.6.18.8

这时/boot/grub/grub.conf已经配置好了,可以不要动它。

11、ok了,你可以用命令reboot重启了,重启之后选择那个2.6.18.8的内核版本就行了。

12、我在启动时又遇到了一个问题:

......(前面的信息省略)

Enforcing mode requested but no policy loaded, halting now.

Kernel panic - not syncing : Attempted to kill init!

我之前编译2.6.7成功后,启动也遇到了这个问题,我在启动时编辑了这个:kernel /vmlinuz-2.6.18.8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

修改为:kernel /vmlinuz-2.6.18.8 ro root=/dev/VolGroup00/LogVol00 enforcing=0 rhgb quiet

就是加了enforcing=0就可以启动了.


至此,启动后查看内核版本#uname -r

显示:2.6.18.8

成功了,但是在编译中有好多问题我现在都还没有搞懂,以后再慢慢研究吧。
参考资料:
阅读(1262) | 评论(0) | 转发(0) |
0

上一篇:VI对齐

下一篇:内核配置

给主人留下些什么吧!~~