[关闭]
@RunZhi 2016-09-13T16:13:08.000000Z 字数 1343 阅读 642

在CentOS编译linux kernel4.6.4

操作系统实验报告

配置环境

机器配置

电脑型号: Hasee 神舟 战神K650D-i7
CPU型号: Intel Core i7-4700MQ四核处理器(主频:2.4GHz,CacheSize:6144KB,位数:64)
内存: DDR3 4GB
硬盘: 1TB 机械硬盘

编译环境

操作系统:CentOS Linux release 7.2.1511 (Core)
编译器:gcc

编译内核

以下列出编译使用的方法和时间.

直接编译

配置好后,直接在终端输入make指令即可开始编译.但编译的时间非常长.加上time指令后显示的信息为:

real: 52m38.452s
user: 46m22.252s
sys: 6m16.200s

并行编译

make指令可以带上参数 -jn (n正整数),n为同时执行的指令个数,具体设为多少由CPU核心数来定.本人设n为8.
执行time make -j8指令后,显示数据如下

real:20m5.536s
user:113m45.565s
sys:12m57.356s

由以上数据可以发现,使用了并行编译的指令参数可以大大加快编译时间.但是具体来讲能加快多少,依赖于makefile文件有没有处理好各个指令之间的依赖关系

使用ccache

ccache是linux下的一个软件.通过设置,可以把编译器编译出的中间文件保存到用户目录下的.ccache文件中,方便以后再次编译.具体的设置方法,详见ccache的主页.

通过配置后,执行time make -j8指令,显示数据如下:

real: 14m17.355s
user: 9m34.277s
sys: 3m19.552s

以下表格将以上数据进行汇总

编译方法 real time user time sys time
直接编译 52m38.452s 46m22.252s 6m16.200s
并行编译 20m5.536s 113m45.565s 12m57.356s
并行编译+ccache 14m17.355s 9m34.277s 3m19.552s

附:除了以上的三个方法外,还可以使用tmpfs(类似于Ramdisk,但又不尽相同).但是由于本人的内存空间只有4G,而整个内核编译完之后都有几G之多.所以就没有加入这个方法的数据.实际上使用tmpfs也是很常用的加速linux程序编译的方法.

FAQS

1.编译内核时我做了什么?

实际上,等待编译内核是一个很漫长的过程.我用了几乎一整天去以各种方式进行编译.编译过程中,由于避免加大电脑的负担(尤其是用了并行编译的),那么只能做别的无关本课程的事情了,比如运动运动,唱唱歌,看看书什么的.

2.遇到了什么问题?怎么解决?

主要遇到了如下几个问题:

怎么编译内核?
怎么加速编译内核?
怎么更新自己的内核?
...

上网找资料可以全部解决

3.还可以用其他编译器进行编译吗?

由于内核源代码都是C写的,因此使用的编译器首要条件就是能够编译C语言.
但是本人曾经尝试使用clang来进行编译,但是改了makefile之后,错误百出,因为整个makefile文件都是为gcc和g++量身定做的.光是改export是不够的,还有各种参数与指令.
网上据说也有关于如何用clang来编译linux内核的.但是据说还不支持最新的linux内核,所以究竟可不可以,不知道.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注