Morxio 发表于 2005-3-8 22:29:52

答怎样升级内核至Linux Kernel-2.6.10

答怎样升级内核至Linux Kernel-2.6.10

这是我从Linux Kernel-2.4.20-8升级内核到Linux Kernel-2.6.10经过一次失败后成功的经验.

1.从网上下载自由软件:
linux-2.6.10.tar.gz-----新版本内核原代码包.
http://kernel.org/pub/linux/kernel/v2.6/

module-init-tools-3.0.tar.gz-----内核工具源代码包.
http://www.kernel.org/pub/linux/kernel/people/rusty/modules/module-init-tools-3.0.tar.gz

modutils-2.4.25-8.9.i386.rpm-----内核工具
http://www.kernel.org/pub/linux/kernel/people/rusty/modules/modutils-2.4.21-23.src.rpm

2.升级前的工作:
   (1)安装 module-init-tools-3.0.tar.gz:
   # tar -zxvf module-init-tools-3.0.tar.gz
   # cd module-init-tools-3.0
   # ./configure --prefix=/sbin
   # make
   # make install
   # ./generate-modprobe.conf /etc/modprobe.conf
   (2)安装modutils-2.4.25-8.9.i386.rpm:
   # rpm -Uvih modutils-2.4.25-8.9.i386.rpm
   (3)安装新内核:
      I.将新内核copy到/usr/src下,
         #tar xzvf linux-2.6.10.tar.gz   -----解压缩.
      II. 将名为linux的符号链接删掉,这时旧版本内核的符号链接.
         #ln -s linux-2.6.10 linux   ------建立linux-2.6.10的符号链接linux.

3.设置内核.
# cd /usr/src/linux   
# make mrproper-----删除不必要的文件和目录.
# make xconfig   -----使用图形界面的内核设置管理器.   
   这时出现图形界面的内核设置管理器,在File项中点击Load,在/usr/src/linux/arch中选择您的电脑对 应的文件夹,进入.调用deconfig文件.
   比如我的电脑是使用的P4,所以我就选择了i386的deconfig,这时默认的内核设置.你只需把你的network,网卡,PPP,usb等选上即可,当然也可以多选几项,不过,选的太多你的内核就会大得撑不住了.当然你也可以把有些项设置成模块(modules).打对号的是要编译进内核的,打圆点的是要编译成modules的.
   保存.推出管理器.

4.编译内核:
# cd /usr/src/linux
# make dep    -----链接程序代码与函数库.
# make clean-----删除不必要的模块和文件.
# make bzImage-----开始编译系统内核.
# make modules-----开始编译外挂模块.
# make modules_install   -----安装编译完成的模块.
# su -
# /sbin/depmod -a   -----创建模块的链接.

5.更换内核:
# cd /boot   -----切换到引导分区/boot.
# rm System.map vmlinuz   -----删除旧的符号链接.
# mv /usr/src/linux/System.map System.map   
# mv /usr/src/linux/arch/i386/boot/bzImage vmlinuz   

6.如果用的是GRUB来管理开机,就要修改/boot/grub下的menu.1st文件:
# vi /boot/grub/menu.1st
    键入i进入编辑模式:
   

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You do not have a /boot partition.This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel /boot/vmlinuz-version ro root=/dev/hda1
#          initrd /boot/initrd-version.img
#boot=/dev/hda
default=0   
timeout=10   
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.6.10)
      root (hd0,0)            -----如果你有2个的硬盘,就要用(hd0,1)
      kernel /boot/vmlinuz ro root=/dev/hda1
                                                                              
                                                                              
title Red Hat Linux (2.4.20-8)
      root (hd0,0)
      kernel /boot/vmlinuz-2.4.20-8 ro root=hda1
      initrd /boot/initrd-2.4.20-8.img

这样还可以保留旧版本的内核以防编译新内核失败进不了系统.

7.如果无法开机,则用引导盘来启动计算机.待进入系统,执行下列命令,即可使系统恢复正常:
   # cd /boot
   # rm System.map
   # rm vmlinuz
   # ln -s System.map-2.4.20-8 System.map
   # ln -s vmlinuz-2.4.20-8 vmlinuz   

8.从Redhat 9 升级内核后由于有些模块名称的变化使得有些得手动改变,网上有详悉的说明可自己看看.
   如果有的模块没有自动加载,可以用/sbin/modprobe -v 模块名 来手动加载.


我所遇到的困难和解决办法:
1.rpm没法用了,怎么办?
答:在/usr/lib/rpm/macros里面寻找代码:
   %__dbi_cdb       create cdb mpool mp_mmapsize=16Mb mp_size=1Mb
      修改成代码:
   %__dbi_cdb       create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private

2.闪盘和mp3挂不上,怎么办?
答:由于我的kernel不支持cp936,所以一开始我用
      # mount -t vfat -o iocharset=cp936 /dev/sda /mnt/usb
      没办法挂上显示:
      mount: wrong fs type, bad option, bad superblock on /dev/sda,
       or too many mounted file systems
      于是我直接用
      # mount -t vfat /dev/sda /mnt/usb
      奇迹般的,我把usb挂上了!!!
      现在我了解了,没有以前放进usb的带中文文件名的文档在新内核下无法正确显示中文名称,但是只要是在升级内核后放进usb的带中文文件名的文档都能正确显示中文名称,我想这是kernel-2.6.10的开发组将显示中文解决了吧,不管它。

      但是每次都得在/mnt重新
      # mkdir usb
      # mount -t vfat /dev/sda /mnt/usb
      这还有待解决!!!

3.usb鼠标和键盘的挂载问题。
   答:我还没有解决。我只想告诉要升级内核的朋友,不要随便按照论坛里的帖子修改/etc里的配置文件,/etc是放系统管理和配置文件的地方,是不能象修改/home里的东西那样修改的,我这并不是说论坛里的帖子些的不对,大家知道Linux不象Windows它是一种个性化相当高的操作系统,不是一样的硬件便会产生或多或少的不同,不能COPY ONE BY ONE。我一周以前由于修改了几个/etc文件,导致新旧内核一起完蛋!!!进不了文件系统了。于是就重装了一遍系统啊!!!
       我虽然没有解决usb鼠标和键盘,但是并没有影响使用他们,和修改前完全一样,还顺手了些,呵呵!!


4.换了内核后,正确选择了网卡,但为什么还是拨不上宽带?
   答:我换了内核后eth0可以激活,可以上局域网,但是拨不了宽带。于是我又配置了一遍内核,发现没有选PPP,于是敢紧选上-----OK!可以激活了。原来PPP是个点对点的Internet协议,要上宽带就必须给它选上啦!!!      
      
好啦,我的内核就欢快的工作了起来啦!!!
“为人民服务--真好!”
          ---my kernel




   
:D:D

cnhnln 发表于 2005-3-9 23:00:43

这么多,不容易啊 :mrgreen:
up一下

xyxiaoyou 发表于 2005-3-18 19:33:35

那确实 得UP 一下哦 我受益非浅 :-)

luxcc 发表于 2005-4-1 19:02:09

我是lilo引导的,请问怎么编译

fliny 发表于 2005-5-25 18:21:38

请问modutils-2.4.25-8.9.i386.rpm是干什么用的?

lonelyghost317 发表于 2005-6-21 09:54:12

楼主,你的内核怎么配置的?我从Redhat9升级内核到2.6.11.6后,不能加载FAT32的磁盘了.它提示:wrong fs type,bad option,bad superblock on /dev/hda6,
ro too many mounted file systems.
你知道怎么解决吗?
页: [1]
查看完整版本: 答怎样升级内核至Linux Kernel-2.6.10