免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1002 | 回复: 0
打印 上一主题 下一主题

编译核心 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-29 15:01 |只看该作者 |倒序浏览
为何要编译核心,相信大家都知道,这里就不多说了,下面主要说说要编译内核的时候要注意的及编译的步骤.至于其他更高深的理论我就不清楚了.我也是在学习中,而且编译过好几次内核都没有成功,只有最近编译成功过一次.希望有机会能和你一起交流,学习...

核心的版本
[root@mail root]# uname -r
2.4.20-8
说明(从左至右):
[主版本].[次版本].[修订版本]-[附版本]
如果次版本是奇数,例如:2.3,2.5等,那表示它是一个测试性质功能的核心版本,这种核心通常在推出稳定版本的核心之前,用来给开发人员(核心维护更新测试人员)作测试用的,虽然功能较为强大,但由于是测试目的,所以可能有一些bug.
如果次版本是偶数,例如2.4,2.6等,那表示它是一个经过测试之后发布的稳定核心版本,这种核心较为稳定不容易出错,比较适合一般个人或商业使用.
所以,要升级的时候大多使用偶数的核心版本,但需要注意的是,2.4与2.6是两个具有相当大差异的核心版本,两者之间用到的函数库基本上己经不同了,所以在升级之前,如果你的核心原本是2.2.xx版,那么就升级到2.2.xx版本的最新版,不要由2.2.xx直接升级到2.4.xx版,否则到时可能会使你欲哭无泪.
此外,对比2.2.xx与2.4.xx,并不是2.4.xx就一定比2.2.xx还要新,因为这两个版本同时在进行维护与升级的工作,如果有兴趣,可以在
http://www.kernel.org
看个究竟,以了解目前的核心变动情况.另外,还有一点,2.2可以升级到2.3版本,因为这两个是相互引用的,所以两者的函数库使用情况大致相同,这个情况也可以用到2.4.xx升级到2.5.xx版本.
在编译核心之前,也来了解关于模块的概念.
核心的更新速度虽然很快,然而有些硬件的推出却是不定的,另外,有些软件的加载程序可能需要核的的支持,因此,如果每次一有新的硬件或软件推出,就需要编译一次核心,这样一来,那是非常麻烦的.为了使这种情况少出现,就有所谓的模块了.由于目前的核心己以具有外挂模块的功能,所以,只要将可能用到的功能选项编译成模块,那么以后需要该功能时,再将它加载到核心就可以了.这么做最大的优点就是,没有用到该功能时,核心并不会主动加载,所以真正在核心内工作的程序就不会消耗太多系统资源,以免除再次编译的繁复手续.所以,如果可以编译成为模块,那么直接编译成模块.但是,肯定不会用到的功能,那么就不需要编译出来了.

编译的过程(这里是以2.4.19版的核心来做升级操作的)
将获得的核心文件(如linux-2.4.19.tar.gz)解压缩在/usr/src/下,再以符号链接成为linux,后续动作在/usr/src/linux中进行.
#cd /usr/src
#mv linux linux.old
#tar -zxvf linux-2.4.19.tar.gz
#ln -s linux-2.4.19 linux
#cd linux
在Linux中安装软件的铁则是:注意看套件解压缩之后的INSTALL或README文件.
由于担心前现有人己经编译过核心,编译过程中会产生目标文件(文件名为*.o),为避免此问题,请先执行make mrproper指令:
#make mrproper
系统会显示很多rm去除文件的信息
注意:如果同一版本的核心被编译两次以上,那么请将/lib/modules中该核心先移走,因为第一次编译完成之后,己以产生了一些模块在/lib/modules/2.4.19中,那么第二次再编译,核心模块还是会放在/lib/modules/2.4.19中,这样模块就重复了.有些模块重复放置后会导致问题重重.这时可以这样做:mv 2.4.19 2.4.19.old,然后再编译.
设定编译模式:(包括以下几种)
1.make config:这种模块需要逐行输入需要设定的项,无法往前修改设定。
2.make xconfig:这种模式使用X-Windows为主要环境的设定模式。
3.make menuconfig:这种模式有点像文字界面的菜单模式,较为简便,而且可以在纯文件界面下执行编辑动作,是目前最常用的模式。
#make menuconfig
设定好后,接下来开始编译
#make dep     
#make clean   
#make bzImage  
#make modules   
#make modules_install  
如果担心在编译时会出现一些错误或警告信息,可以使用重定向将数据存在文件中,如
#make dep clean bzImage modules modules_install > compile.kernel.log
再说说上面各个步骤的主要意义:
1.make dep:这个动作用于为你在上一节(make menuconfig)所选项中属于模块的部分建立相依属性,以方便未来执行软件或程序时调用模块.
2.make clean:这个动作会删除你前一次编译的目标文件(*.o文件),所以编译的内核会是新的核心
3.make bzImage:这个步骤主要用于产生可引导的核心文件,也就是vmlinuz文件,但由于目前的核心文件较大,因此需要经过压缩,所以,编译出来的核心文件放置在/usr/src/linux/arch/i386/boot/bzImage.那个未经压缩的放在/usr/src/linux下.
4.make modules:这个步骤用于编译模块
5.make modules_install:这个步骤用于安装模块.
如果在编译过程中发生问题,通常的可以是挑选的项有问题,重新挑选设定内容之后再编译就可以了.
如果在过程中没有出现任何问题,那么很好,这时就可以安装核心了.

安装核心与多重启动设定
上面的步骤并没有将核心安装好,仅是将模块安装到/lib/modules/2.4.19中,核心编译完成并放在/usr/src/linux/arch/i386/boot/bzImage而己,所以这个时候请将核心放置在启动核心的默认目录/boot下.
#cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.19
后面文件的名字只是习惯而己,方便确认
核心搬完之后,还需要在Linux的启动管理程序中设定新的启动项,可以参考前面的多重启动文章.
这里以grub为例:
只要在/boot/grub/menu.lst中加入以下两行就可以了.
title linux-2.4.19
     root (hd0,0)      
     kernel /boot/vmlinuz-2.4.19 root=/dev/hda1
这样,新的核心基本设定完成,重启即可.

最后一点点建议:编译核心最好是在新安装系统后进行,这样就不必在编译好新的核心后再去重新编译你的程序了.


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/18616/showart_223115.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP