linux内核升级(2.6.18到3.9.3)

   本文主要是记录,这几天升级linux内核,这个痛苦的过程。废话少说吧,进入正题吧!!

升级必备

1.本人使用的linux系统是:Red Hat Enterprise 5 (linux kernel -2.6.18) ,vmware7.0 虚拟机。

2.linux kernel 3.9.3 (下载地址是点击打开链接)

具备上面所以需要的就可以进行升级了

由于本人第一次升级linux内核,因此在google中搜索相关文档,找到下面的文章,就按照此步骤

(UR1) http://xugang.blog.51cto.com/400032/95621

如果有人不想打开网址,我总结了一下,大体步骤,(6 make)

make mrproper
make menuconfig
make dep
make clean
make bzImage
make modules
make modules_install
make install

reboot

因此我一直按照UR1中介绍,一步的进行操作,但是在make bzImage的时候,问题就来了。

编译阶段 samples/hidraw/hid-example.c编译失败,报的错诸如/usr/include/sys/select.h和linux/types.h中的fd_set类型冲突,重复定义等。

没有其他办法,google (这个时候尽量不要用百度),搜到了相关网址(UR2)   http://blog.csdn.net/yihuazhu/article/details/7702026

原来直接make menuconfig 就出现这问题啊,因此参考UR2中的说明,我改成make defconfig 果然此种方法,屡试不爽。知道最后一部分都没有,再出现过问题。

然后reboot,重启系统。头疼的问题又出现了,

mount: could not find filesystem '/dev/root'                                                \

setuproot: moving /dev failed: No such file or directory                             \

setuproot: error mounting /proc: No such file or directory                         \

setuproot: error mounting /sys: No such file or directory                          /  错误信息大概是找不分区

setuproot: mount failed: No such file or directory”                                /

继续参考网址UR2,里面果然有介绍啊!!  原来是config文件中没有开启这个CONFIG_SYSFS_DEPRECATED_V2开关,那就在config文件里面找一下吧,在本人的config中居然没有这个选项,那好自己手动添加一下。然后在进行6个make步骤,注意:make menuconfig 要使用make defconfig否则会出错啊!!

一直到最后,也是非常的顺利,然后reboot重启,最后仍报上面的那个错误(找不到分区)。为什么啊?我明明在config文件里加入那个开关了,难道自己加入的开关,内核不识别吗? 带这个疑问,我又进行了google ,但是最终无果 ,稀里糊涂的,我在config中查找这个开关,居然没有找到,但是我很确定我加入了。为什么明明加入的开关怎么没有了呢?干脆,我不用本地config文件了,我在 http://www.ha97.com/code/config下载一个配置文件,

网上有很多去http://vbets.googlecode.com/files/config 但是这个页面无法打开。下载后搜一下是否有这个开关,确认后开关存在于这个配置文件中,

然后在进行6 make 最终还是报错,还是无法找到分区。没办法,我又看了一下config 搜索这个开关,居然又不存在了!!痛苦啊。。。。。

后来我思考了一下,修改config文件只有在make defconfig这一步,难道说。。。  好吧,我又重新测试了一下,果然是make defconfig 将原有的配置,给修改了。

到这里,我根据UR2中的说明(UR2里面说的很详细),我进行了总结:

1.如果使用make  menuconfig会编译出错  这因为3.X内核很多宏和头文件都发生了变化,不兼容2.6部分头文件

2.使用make defconfig 虽然能够编译成功,但是找不到分区。

后来我在UR2 找到编译无法通过,是因为samples 文件夹中部分文件在2.6.18中不存在,直到2.6.32版本才加。

好吧,那我就尝试一下,升级为2.6.32之后的版本。本人下载的是2.6.38

然后进行6 make (第二步是make menuconfig  )其中config文件是我从网站下载的。

顺利编译成功,reboot 重启,顺利进入系统。至此,升级2.6.38非常顺利。

如果有人只想,升级成2.6.38,就没有必要继续往下看了。

---------------------------------------------------------------------升级3.9.3-------------------------------------------------------------------------

上面只是升级成2.6.38,与本文章的标题,不一致。下面就需要进行升级3.9.9了。

在升级3.9.9需要解决的问题是, samples/hidraw/hid-example.c编译问题 这个问题

参考UR2,更换本地linux头文件。(现在我终于发现UR2就是一个神奇的博客)那就开始动手更新linux头文件。如何更新linux头文件呢??

google吧。思路:

1.先将本地内核头文件(2.6.18更换成2.6.38)

 2.进入2.6.38目录,执行make headers_install 

3.替换/usr/include/中的头文件

以上如果不清楚,参考地址UR3(http://ju.outofmemory.cn/entry/6447)

ok,头文件升级完毕后,然后进行6 make应该就不会有samples这个问题了,第二步使用这个make menuconfig。

但是棘手的问题出现了,附上图片:


这个错误出现在make bzImage或者make modules当中 记不清楚了。这怎么办?继续google,但是google这为大神,也无能为了,我搜索未果啊!!

后来我想到了解决办法了,我可以在配置文件中,将gfs2这个模块不要编译到内核中,这样应该可以解决问题。具体内容附上另外一图:


将M变成空,即可。这个解决办法本人,并没有去尝试,感觉可以解决这个断错!!但是这个始终不是解决的根本,我后来在想,既然linux3.9.3

是发布版本,不应该出现这中低级错误啊!!所以我抱着尝试的想法,找了rgrp.c 这个文件,打开后发现报错的那行居然是下面这个段定义:


很是奇怪,linux内核中有很多这样初始化,结构体变量,为什么这里会报错吗??我这里没有深究为什么会报错,反正就是这里报错了,ok,那么我就

手动来改一下这段代码吧!!(红色是错误,蓝色是改正),然后编译,仍会有段错误,但是值得庆幸的是,居然不是这个函数了,也就是说,我们修改

源码是有效的。然后我继续查看段错误,发现错误是同一个问题,都是结构体初始化问题。好吧,那我就将整个文件中和这个结构有关的,都改一遍吧。

当我改完后,继续make 发现所有居然可以编译通过了。可见,我们修改源码是可以。至此,总结一下,这个问题吧

产生上述问题的原因可能是本人使用的gcc版本过低导致的。可能换个版本就没有问题啦。

经过上面阐述,最终生成linux内核,然后reboot重启电脑,最终顺利进入新版本内核3.9.3  。

----------------------------------------------------------------------------总结------------------------------------------------------------------------------------

第一次,写这么长的文章,层次结构可能不太清楚,我也尽力了。至此,升级linux内核成功,这个过程虽然有点痛苦,但是最后我还是很有收获的,

如果哪位同学,正在升级linux内核遇到了问题,请参考本文章!!谢谢

下面是本人在升级linux内核查看的资料,仅供参考:

xugang.blog.51cto.com/400032/95621
http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0801/4085.html
http://linuxme.blog.51cto.com/1850814/390778
http://blog.csdn.net/yihuazhu/article/details/7702026
http://www.ha97.com/code/config


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值