升级系统版本: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 (将生成的压缩文件改名)
就这样
能启动进去了,就是在启动过程中有一个小错误:
求高手帮忙。
阅读(1613) | 评论(0) | 转发(0) |