我是一个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个小时, 非常耗时间。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.