Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程

实验过程截图:

Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程-LMLPHP

Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程-LMLPHP

Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程-LMLPHP

Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程-LMLPHP

过程分析:

在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_thread等几个函数的执行。其中start_kernel相当于普通C程序的main函数。Trap_init负责初始化中断向量,mm_init负责内存管理模块初始化,sche_init负责调度模块初始化。

两把宝剑:

1.中断上下文切换

2.进程上下文切换

Qemu工具学习:

格式:

qemu  -kernel  文件名 -initrd  (rootfs.img)

-kernel后跟要启动的内核的文件名(不在当前目录需要全路径)

-initrd 后跟虚拟硬盘名,默认启动其中名为init的文件。在该实验里为menuOS。

start_kernel函数末尾调用rest_init,负责当系统没有进程需要执行时就调用到idle进程

0号进程

有一个全局变量init_task,是手工创建的PCB,也是最后的idle进程,与rest_init函数有配合作用。

编译内核

1.原因:生成符号表

2.方法:

(1)make config操作简单,耗时

(2)make menuconfig图形化界面

(3)make allnoconfig 全no选择处理

总结:

对于linux系统启动过程,可以类比道家的“无中生有”的思想,道生一(start_kernel....cpu_idle),一生二(kernel_init和kthreadd),二生三(即前面0、1和2三个进程),三生万物(1号进程是所有用户态进程的祖先,2号进程是所有内核线程的祖先)。

通过几个最初的函数作为基础,逐渐搭建出一个体系,供其它进程进一步发挥;当其它进程工作到一段落,再重回起点,进入暂时休眠的状态。

zl + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”

04-15 09:41