1.实验环境:
硬件:Intel i5
操作系统:Windows 8.1
虚拟机:VMware Workstation 12.5.0
软件:Red Hat Enterprise Linux 9 (Linux 内核 2.4.20-8)
2.实验目的:
Linux系统从启动到登陆shell界面需要花费较长的时间,在普通微机上的启动过程需要十几秒或更长。如果要启动X界面,那花费的时间更多了。启动时间过长对嵌入式系统而言,如信息家电产品(机顶盒),是无法接受的。、
Linux系统的启动由内核态下的启动和用户态下的启动组成。利用本实验中采取的多种方法,可以简化Linux系统启动过程,提高Linux系统启动速度,适应嵌入式系统快速启动和实时应用的需要。
3.实验内容:
a. 分析源码,理解启动流程。
b. 在内核态下,利用do_gettimeofday()函数测试时钟初始化完成后,系统启动过程中的几个主要部分的启动时间。如start_kernel()中的控制台console_init(),init()函数过程中的文件系统初始化和文件系统加载,寻找初始化时间较长的内核部分。
c. 至少选取启动过程中的5处较大的代码模块,测量其执行时间,保证测出的执行时间可观测。
d. 内核态进程启动过程优化——IDE检测修改
- 修改linux/include/asm-I386/ide.h中宏定义#define MAX_HWIFS 10,
- 减少内核启动时检测的端口数目,提高启动速度。
- 编写测试函数,测试实验前后IDE接口检测时间。
e. 用户进程启动过程优化——开机画面字符隐藏技术
f. 用户进程启动过程优化——开机画面隐藏/调出
g. 用户进程启动过程化——开机画面更换
h. 经过上述内核态和用户态优化后,测试系统总的启动时间
综上所述,实验分为内核态启动优化和用户态启动优化
内核态启动优化
- 测量几个较大代码模块的启动时间
- 更改MAX_HWIFS,减少检测IDE过程的启动时间
用户态启动优化
- 开机画面字符隐藏技术
- 开机画面隐藏/调出
- 开机画面更换
4.实验原理:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
结构纪录的是系统时间(距1970年1月1日0点)
其中tv_sec纪录的是秒,tv_usec纪录的是该秒内的微妙;
void do_gettimeofday(struct timeval *tv);
函数把当前系统的时间传递给tv所指向的结构。
通过使用do_gettimeofday()函数计算各个系统启动初始化函数所用的时间。
通过修改内核源代码和系统的默些配置文件可以加快启动速度,隐藏启动字符,开机画面显示与隐藏,更换开机画面等。