Linux内核升级 (2.4 to 2.6 OR 2.6.x to 2.6.y)

 一、软件下载

启动Linux系统,并用根用户登录,进入终端模式下。

①、查看Linux内核版本

# uname -a

如果显示的是低于你要升级的版本,则可以继续下面的工作。 

②、下载Linux2.6内核源代码

download website:http://www.kernel.org/pub/linux/kernel/v2.6/

③、下载软件

下载源码中Document/Changes中要求的版本或更高级的版本,可以通过Document/Changes中个版本要求之后的命令进行查看现有系统的软件版本是否符合。(注:这一点是必须的,否则在编译内核过程中会出现很多的问题!这些软件包很难找的,但是多花点时间是没有问题的)

二、软件升级

①、安装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

②、安装xxx.rpm包,使用如下命令:

#rpm -ivh xxx.rpm

③、安装xxx.tar.bz2包,使用如下命令:(一般情况)

# tar -zxvf xxx.tar.bz2
# cd xxx
# ./configure --prefix=/ (如果目录中有configue文件的话,就先运行这个,否则跳过)
# make (编译软件包)
# make install(安装软件包)

④、安装e2fsprogs-xxx.tar.bz2包,使用如下命令:(特别注意其和③不一样)

# tar -zxvf e2fsprogs-xxx.tar.bz2
# cd e2fsprogs-xxx
# ./congfigure --prefix=/
# make(编译软件包)
# make check(本软件包自带测试套件,以确定它是否编译正确。如果你想运行测试套件,执行该命令)
# make install(安装本软件包的大部份内容)
# make install-libs(安装共享库)

⑤、将内核源码进行解压

将内核源码拷贝到/usr/src下:

# cd /usr/src
# rm -fr linux(删除原有的链接文件)
# tar -zxvf linux-2.6.xxx.tar.bz2(解压内核源码)
# ln -s linux-2.6.x linux(将linux设置为linux-2.6.xxx的链接)

三、配置过程

①、配置内核。

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

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

1)配置Loadable Module support[2.6内核: Enable loadable module support]

     --> Module unloading

     --> Automatic kernel module loading[2.6内核:可能无此选项]

2)配置Device Drivers

     --> Block Devices --> Loopback device support

     --> Multi-device support(RAID and LVM) --> device mapper  support

     --> Graphics support --> Support for frame. buffer devices

     --> USB support  --> USB Mass Storage support[如果是在实环境中,想要更多USB支持,就全选;在虚拟机中,用不着了]

     --> Network device support  --> Ethernet(10 or 100Mbit)  --> AMD PCnet32 PCI support

3)配置File system[以下9个选项是关于ext2和ext3文件系统配置,全部选上]

     --> Second extended fs support

           --> Ext2 extended attributes

           --> Ext2 POSIX Access Control Lists

     --> Ext3 journalling file system support

           --> Ext3 extended attributes

                 --> Ext2 Security Labels

                 --> Ext3 POSIX Access Control Lists

     --> JBB (ext3) debugging support[2.6内核:可能不存在]

     --> DOS/FAT/NT Filesystems  --> NTFS file system support

注意:

       ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会DOWN掉,出现如下错误信息:

情况一:

          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

[我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了。如果依照本文做完所有步骤,当重启Linux系统后,若不幸进不去2.6.xxx内核,将会出现以上三种错误信息]

4)如果在vmware下编译内核,硬盘模式是SCSI,以下选项必选:

     Device Drivers

        --> SCSI device support --> SCSI disk support

        --> SCSI low-level drivers --> BusLogic SCSI support

四、编译过程

①、编译内核

在/usr/src/linux-2.6.xxx目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!

# 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.xxx子目录,里面存放着新内核的所有可加载模块。
# make install  (安装新内核)
注意:
        make install的时候可能会出现如下错误信息:
        No module BusLogic found for kernel 2.4.12
       mkinitrd failed
此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去:
# cp /usr/src/linux-2.6.xxx/drivers/scsi/BusLogic.o  /lib/modules/2.6.xxx/kernel/drivers/scsi

不过别忘记,复制过后再执行一下make install。这一步若卡住了,下面的都无法进行。

五、启动新内核

①、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:    

# cp  /usr/src/linux-2.6.xxx/arch/i386/boot/bzImage   /boot/vmlinuz-2.6.xxx    
# cp  /usr/src/linux-2.6.xxx/System.map   /boot/System.map-2.6.xxx
# cd  /boot  (进入boot目录)
# rm –rf  System.map  (删除原来的连接)    
# ln –s System.map-2.6.xxx  System.map   (重新建立连接)    

②、修改Grub启动管理器

如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)

在/boot目录下,执行以下命令:

# new-kernel-pkg --mkinitrd --depmod --install 2.6.xxx (这时候你的/boot下会生成一个initrd-2.4.xxx.img,并且你的grub.conf文件也作了相应更改)
注意:
# df  (查看根目录在那个分区,下一步要用到。注意,这里根分区不是boot的那个50M的分区,而一般是你最大的那个分区,也就是“/”,千万不要搞错。我的为 /dev/hda2)
# vi /boot/grub/grub.conf 
 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)


 

你可能感兴趣的:(vmware,linux,Module,Security,linux内核)