Linux核心升级

我是一个Linux的菜鸟, 但是也想升级升级自己linux的内核来玩玩。

 

升级自己linux内核的原因不只是简单的来玩玩,因为在已安装的机器上有几个东西始终用不起来了。一个是yum, 由于yum依赖与已安装的python, 并且一定版本一致, 也就是如果yum是3.0的, 那么要求python也是3.0. 否则会出现各种各样的问题。二是我的系统中竟然没有自带vector.h这个头文件, 这个头文件在编程中用到vector时需要的用到。

 

前面说了, 因为我是一个linux的菜鸟, 所以整了半天,上述2个问题依然没有搞定。在加上之前就有更新自己linux核心的想法,就开始了我的linux核心升级之路。当然希望更新linux核心能解决上述问题(后来发现这样并不能达到误我的目的)。

 

我把升级的过程以及出现的问题写下来,只是备案和供出现和我同样问题的兄弟姐妹参考。备案是等我将来对linux熟悉了以后, 再来分析一下这次升级过程出现的问题, 得出进一步的结论。 由于我发现同样的问题, 在linux中可能会是有好几种原因所导致, 相应的解决办法不一样, 另外同样是linux内核升级,各个版本出现的问题都会不一样。我觉得这也是很多程序员对linux敬而远之的原因之一, 这只是个人看法, 有人说砖头过来了, 我挡!

 

好了回到我们的主题。

 

先看看我机器配置, 奔腾3的1200Hz的主频, 分给linux磁盘空间8G,内存512. ( 好像有点古董了)

已安装了windows XP, Red Linux 2.6.22.

 

1. 进入linux操作系统

相对于我的机器,就是进入red linux 2.6.22. 注意一定是进入linux,不是windows XP。如果你非要在XP下面升级linux核心, 对不起我不会。至于是进入终端模式, 还是X window模式,随你喜好。我是进入终端模式, 因为在编译内核的时候需要耗费大量的资源, X window本身就会消耗不少的资源。

 

2. 下载linux核心源代码

www.kernel.org网站看看最新的并且是稳定的版本, 也就是选stable的, 版本最新的, fullsource的。你可以在别的机器上用迅雷之类的工具,下载下来。因为他还是比较大的, 有六十多M, 或者直接在linux慢慢下, 比如向我更新时,最新的稳定版本是2.6.34, 在终端就可以wget来下载:

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2

 

接下来就是解压源码,在终端上输入下列命令:

cd /usr/src/       

tar -jxvf /root/Desktop/linux-2.6.34.1.tar.bz2     #解压到/usr/src目录下面

 

3. 编译核心

 进入我们已经解压完毕的linux-2.6.34.1目录。

cd /usr/src/linux-2.6.34.1

make mrproper

上面的这条命令是清楚以前留下来的.o文件。

 

在编译核心之前需要配置, 也就是说配置我们要编译哪些东西, 怎么编译。关于这块, 书上和网上的一些办法都试过了,但是都行不同。书上说输入下列命令:

make menuconfig

或者

make xconfig

再或者

make gconfig

当我敲入这些命令后,我被告知, no rule … tartget: menuconfig.

我看书的作者编译的版本是2.6.14也就是说,编译2.6.14这个版本你就可以用这种方法, 但是你要编译2.6.34这个版本,这中方法行不同的。在网上查了很多资料,始终不行。最后打开源代码所带的README,才发现这个版本编译的另外一个参数。其实这个参数我到现在没有搞清楚做什么的, 虽然文档说这是个输出目录,包括.config, 但是我始终没有发现里面有什么东西, 也没有发现.config这个文件。

 

接下来就是在上面提到的任意一个命令中间加入输出目录,我设置的输出目录是/home/build/linux/

因此命令就变成了

make 0=/home/build/linux/ menuconfig

 

好成功了,配置界面出来了。这个界面上有比较详细的说明,我就在这里不赘述了。

有一个地方,需要提一下。就是

General Setup  —->

选中这一项,敲击回车, 进入他的子选项界面,看一下有个选项:

enable deprecated sysfs features to support old userspace tools

它前面的[]中是空的还是*号,如果是空,请选中这个选项后敲击键盘的Y, 注意这里一定是大写的Y,否则界面没有反应。

 

为什么要选这个,原因是他会编译sysfs 这个功能, 不然当我们一会儿编译完系统重启的后,发现有这样的错误:

error mounting /proc: No such file or directory
error mounting /sys: No such file or directory

 mount failed: No such file or directory

 

好了,配置完了,我们点退出。

 

接着执行下一个命令

 

make 0=/home/build/linux/ all

 

中间的这个参数不能丢。这条命令就是真正的开始编译核心了,时间比较长,在我的机器上,花了将近2小时。 如果没有错误, 我们核心的编译就大功告成。

 

4. 安装

执行下面的命令来安装我们新编译的核心:

 

make 0=/home/build/linux/ install

 

虽然这个环节很重要,但是都是make来帮我们完成,所以我们就不需要太费心。如果他成功的执行了,那么我们的核心安装也就大功告成了。

 

5. 重启

重启前, 书上说要修改/boot/grub/menu.lst。 也就是将我们刚才编译的这个核心添加进启动选项里。其实2.6.34这个版本就需要自己手动去更改了, 当我们make install的时候,make已经帮我们做了,我想以后的版本可能都不需要自己去添加了。

 

那接下来,来个reboot命令重启机器。

 

等待…

 

看到了吧, 启动菜单里面多了我们刚才编译的核心, red flag Desktop 2.6.34

好, 选中他, 回车

 

屏幕上不停的滚动着,那个高兴啊…

 

突然, 停了下来。

 

end_request: I/O error, dev fd0, sector 0
Buffer I/O error on device fd0, logical block 0
end_request: I/O error, dev fd0, sector 0
Buffer I/O error on device fd0, logical block 0
end_request: I/O error, dev fd0, sector 0

这是怎么回事, 自己看了半天,也没有看明白怎么回事, 那就google吧,在这个网站找到答案:

http://www.cyberciti.biz/faq/linux-end_request-ioerror-dev-fd0-sector0/

找到, 原来我的笔记本比较旧,还有个软驱,而这个软驱又没有mount到server上,所以出现了这个问题,解决办法就是禁用它。

首先进入我们原有的red flag 系统,

在终端上输入:

vi /etc/modeprobe.d/blacklist

在这个文件的最后一行加入:

blacklist floppy

 

然后保存退出,重启系统。

 

重新进入red flag 2.6.34.

等待…

呵呵, 看到了盼望已久的登录界面,成功了。

 

不容易啊, 这个东西远比上面我描述的那个过程艰辛,试了有5次吧, 关键是每一次要花掉3个小时, 非常耗时间。

 

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

留言

你的邮箱是保密的 必填的信息用*表示