手把手教你做北邮操作系统小学期的实验一——Linux启动过程优化2
2017-07-25 17:50
344 查看
接Linux启动过程优化1的1.2.3.
一、多个init函数比较
1) 在/usr/src/linux-2.4目录下,能得到Linux源代码(内核开发包)。
2) 修改linux/init/main.c,在所有的需要检测的代码段添加条件编译TIME_TEST常量。测试的代码段包括console_init(),vfs_caches_init,和pci_init()等等。
源代码(原代码)
添加#define TIME_TEST
添加
在380多行添加
do_gettimeofday(&gettime_before);
do_gettimeofday(&gettime_after);和一个打印时间的函数
//添加在console_init();函数的前后
在420多行添加
do_gettimeofday(&gettime_before);
do_gettimeofday(&gettime_after);和一个打印时间的函数
//添加在vfs_caches_init();函数的前后
在510多行添加
do_gettimeofday(&gettime_before);
do_gettimeofday(&gettime_after);和一个打印时间的函数
//添加在pci_init();函数的前后
添加do_initcalls()函数里的,注意do_initcalls()函数前后不添加,而是在代码里添加,在460多行左右
在rest_init()函数里
do_gettimeofday(&gettime_before);
do_gettimeofday(&gettime_after);和一个打印时间的函数这和之前的样。
同理可得。
3) 修改完以后,编译内核。make mrproper清除源码树
4) make oldconfig生成现有.config文件
5) make menuconfig配置内核(需要安装ncurses-devel,安装ncurses-devel又需要安装yum,有的电脑需要安装,有的不需要安装)可以在网上找一个ncurses的tar.gz的包
我找的是ncurses-5.7.tar.gz
首先
然后 make menuconfig
6) make dep//生成依赖关系
7) make bzImage //编译内核
8) make modules//编译模块
9) make modules_install//安装模块
10) make install//安装内核
离胜利不远了。
11) init 6//重启 选那个2.4.20-8custom
由上图可以知道console_init()函数花费:156 mircosecond
vfs_caches_init()函数花费:156 mircosecond
pci_init()函数花费:79878 mircosecond
do_initcalls()函数花费:4 second -550203 mircosecond//记得do_initcalls()用到函数的地址费时最多的那一个,但是开机画面显示的是一部分,可以等一下用代码查看。
rest_init()函数花费:71 mircosecond
dmesg | grep “second”
综上所述,c036e138花费4 second -550203 mircosecond,用System.map查看c036e138是initcall_ide_init
4.实验步骤:
内核态启动优化一、多个init函数比较
1) 在/usr/src/linux-2.4目录下,能得到Linux源代码(内核开发包)。
2) 修改linux/init/main.c,在所有的需要检测的代码段添加条件编译TIME_TEST常量。测试的代码段包括console_init(),vfs_caches_init,和pci_init()等等。
源代码(原代码)
添加#define TIME_TEST
添加
#ifdef TIME_TEST #include <linux/time.h> struct timeval gettime_before, gettime_after; #endif //gettime_before函数调用前时间和gettime_after调用后时间
在380多行添加
do_gettimeofday(&gettime_before);
do_gettimeofday(&gettime_after);和一个打印时间的函数
//添加在console_init();函数的前后
在420多行添加
do_gettimeofday(&gettime_before);
do_gettimeofday(&gettime_after);和一个打印时间的函数
//添加在vfs_caches_init();函数的前后
在510多行添加
do_gettimeofday(&gettime_before);
do_gettimeofday(&gettime_after);和一个打印时间的函数
//添加在pci_init();函数的前后
添加do_initcalls()函数里的,注意do_initcalls()函数前后不添加,而是在代码里添加,在460多行左右
在rest_init()函数里
do_gettimeofday(&gettime_before);
do_gettimeofday(&gettime_after);和一个打印时间的函数这和之前的样。
同理可得。
3) 修改完以后,编译内核。make mrproper清除源码树
4) make oldconfig生成现有.config文件
5) make menuconfig配置内核(需要安装ncurses-devel,安装ncurses-devel又需要安装yum,有的电脑需要安装,有的不需要安装)可以在网上找一个ncurses的tar.gz的包
我找的是ncurses-5.7.tar.gz
首先
tar -zxvf ncurses-5.7.tar.gz//解压 cd ncurses-5.7 ./configure make make install //对它进行编译
然后 make menuconfig
6) make dep//生成依赖关系
7) make bzImage //编译内核
8) make modules//编译模块
9) make modules_install//安装模块
10) make install//安装内核
离胜利不远了。
11) init 6//重启 选那个2.4.20-8custom
由上图可以知道console_init()函数花费:156 mircosecond
vfs_caches_init()函数花费:156 mircosecond
pci_init()函数花费:79878 mircosecond
do_initcalls()函数花费:4 second -550203 mircosecond//记得do_initcalls()用到函数的地址费时最多的那一个,但是开机画面显示的是一部分,可以等一下用代码查看。
rest_init()函数花费:71 mircosecond
dmesg | grep “second”
综上所述,c036e138花费4 second -550203 mircosecond,用System.map查看c036e138是initcall_ide_init
相关文章推荐
- 手把手教你做北邮操作系统小学期实验一——Linux启动过程优化5
- Linux操作系统启动过程
- 实验三:跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程--实验报告 分析 及知识重点
- 实验三:跟踪分析Linux内核的启动过程 ----- 20135108 李泽源
- Linux操作系统启动过程
- Linux内核分析实验3——分析linux内核启动过程
- 操作系统知识(1)--Linux启动过程
- 实验三:跟踪分析Linux内核的启动过程
- Linux内核分析实验三----跟踪分析Linux内核的启动过程
- 手把手教你北邮操作系统小学期实验实验二——Linux 系统内核/系统配置小型化2
- Linux内核分析:实验三--内核启动过程分析
- 20135202闫佳歆--week3 跟踪分析Linux内核的启动过程--实验及总结
- 实验三:跟踪分析Linux内核的启动过程
- 关于linux操作系统启动的过程
- Linux操作系统启动过程详解
- Linux操作系统启动过程详解
- 在Sitara平台上如何优化Linux启动过程?
- Linux常用命令(一)服务控制及优化启动过程
- Linux操作系统启动过程