Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78445
  • 博文数量: 14
  • 博客积分: 206
  • 博客等级: 入伍新兵
  • 技术积分: 112
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-21 21:26
文章存档

2014年(1)

2013年(6)

2012年(7)

我的朋友

分类: LINUX

2012-08-23 19:41:04

升级系统版本:ubuntu-8.10-server
当前内核:2.6.27-7-server
升级内核:2.6.35.13
linux系统类型:虚拟机
vmware版本:8.04
                              -------------------------听风SQL-----------
升级过程:

1.下载内核:linux-2.6.35.13.tar.gz,

2.把这个内核包复制到/usr/src目录下,解压,生成目录linux-2.6.35.13,在当前目录建立一个链接文件,名为linux,指向目录linux-2.6.35.13。
  命令:cp linux-2.6.35.13.tar.gz /usr/src
tar -vxf linux-2.6.35.13.tar.gz
ln -s linux-2.6.35.13 linux

  PS:需不需要建立这个链接文件我没验证过,从网上看的资料,大多数人说要,我就也建立了,也不知道 建立个链接文件干什么用的。还有人说,在/usr/src目录下原来就有个名为linux的链接文件,我的这个目录下在我做第二步之前什么东西都没有的。

3.若需要对内核打补丁则打上补丁。有的是几个小补丁,有的是patch-x.y.z.p(内核版本号)这样的整个内核的补丁。
我打了几个小补丁。
  命令:patch -pn < 补丁文件绝对路径/补丁文件名
  n为0,1,2,3,4数字,这个看补丁文件内容和补丁文件路径具体位置来定

4.内核编译。
  这一步是很纠结的事情,配置错了,后面的工作都不会太顺利。
  
  失败经验:
  a.因为安装系统以后第一次编译内核,所以什么编译前清理工作省掉
  b.配置内核编译选项文件。
    直接make menuconfig,在图形选框里选择了我需要的内核功能和模块。
  make bzImage,make modules,make modules-install,make install完全顺利,之后的安装新内核完全没有错误提示,高高兴兴的就reboot了。结果就是悲剧了,系统启动不了,出现了错误:
   Kernel panic -not syncing: VFS: Unable to Mount root fs on unknow-block(0,0)
进不了系统了,我怎么办啊?上网查了下,从系统启动开始就按着ESC,如果之前能正常运行的内核没有删除,内核启动配置文件也没有改的面目全非的话,会出现一个选择系统的界面的,选择一个能够启动的系统进入找问题,重新搞吧。

    上网找了很多的资料,还到处发帖,结果还是没有解决。
    后来受身边的高人指点:内核和目前的文件系统不匹配,文件系统不能加载这个内核。好吧,让我想起了以前编译开发板的内核的时候都是编译后内核,还要自己制作适合的文件系统,还要有正确的启动引导文件。
    怎么解决呢?
    1.重新make menuconfig配置内核编译选项,让内核能够被当前的文件系统引导。对于我这种菜鸟,越配置越糟糕。
    2.重新编译个文件系统。这个还不如重装系统。
    3.删除内核源码目录中的./config文件,把原来内核的配置文件复制到内核源码目录中,直接make,那么内核配置选项中文件系统的选项不就是支持当前文件系统的吗,但是这样也引出了一个问题,那么我升级内核不就没有意义了吗?我很困扰,后来经过试验,知道了新版本内核里的makefile的神奇之处,make时新内核添加的功能和模块都会提示你,问你要不要编译新得模块和功能,根据提示键入:y-将新功能编译进内核,n-不要编译这个新功能,m-将这个新功能编译成模块,?-新功能的说明。这个方法最方便。

   成功编译:

a.make clean,make mrproper 清除之前的编译文件
b.cp /boot/config-2.6.27-7-server /usr/src/linux/.config。将当前运行内核的配置文件复制到内核源码目录,命名为./config。
c.make
这个过程会让我们选择是否要编译新内核中的新加的功能。选择完了就会自己开始编译了,但是我就是要选择完之后ctrl+c退出一下。选择自己需要的新功能(这个事我最这种菜鸟最头疼的,我要升级内核干嘛都不知道,可想而知了,而且选了有的功能就编译通不过) 
d.现在再真正开始编译
make bzImage -j2,make modules -j2,make modules_install,make install。

PS:如果c步骤不ctrl+c也是可以通过编译的,我这样做的目的是,如果编译错误了,我更容易看出在编译哪个功能或模块时出错(这里的功能是编译进内核文件里的功能)。我的机器加了-j2 编译速度明显快了,编译时间少了半个小时左右。

编译好以后在/boot目录下生成新内核的map文件,vmlinuz文件,config文件

5.安装新内核并配置内核启动引导文件/boot/grud/menu.lst

以下步骤不知道在做什么,但是我这样做以后成功了
mkinitramfs -o /boot/initrd.img-2.6.35.13

cp initrd.img-2.6.35.13 initrd-2.6.35.13.bak (先做一个备份以防万一)

depmod -a (depmod可检测模块的相依性,供modprobe在安装模块时使用。 -a,分析所有可用的模块。)

update-initramfs -k 2.6.35.13 -c (生成一个新的initramfs文件)

cd /tmp

gzip -dc /boot/initrd.img-2.6.35.13 | cpio -id  (initrd.img-2.6.35.13是一个压缩文件,先通过gzip –dc来解压到当前文件夹,即tmp,cpio是一个功能跟tar类同的命令,此处用于将解压出来的东东拆包)

touch /lib/modules/2.6.35.13/modules.dep (更新modules.dep文件的时间属性)

find ./ | cpio -H newc -o > /boot/initrd.img-2.6.35.13.new (找出当前目录下的所有文件和子目录然后用newc这种格式来打包然后输出到/boot目录下去)

gzip /boot/initrd.img-2.6.35.13.new (生成initrd.img-2.6.35.13.new.gz压缩文件)

cd /boot

mv initrd.img-2.6.35.13.new.gz initrd.img-2.6.35.13 (将生成的压缩文件改名)


就这样
能启动进去了,就是在启动过程中有一个小错误:
求高手帮忙。    
阅读(1604) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~