跟踪调试Linux内核的启动过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟踪调试Linux内核的启动过程相关的知识,希望对你有一定的参考价值。

跟踪调试Linux内核的启动过程---使用gdb

 符钰婧

原创作品转载请注明出处

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

 

本次的实验是使用gdb跟踪调试内核从start_kernel到init进程启动,并分析启动的过程。

 

1、首先是在实验楼虚拟机上进行调试跟踪的过程。

 (1) 先构造一个简单的Linux系统

 技术分享

(2) 接下来使用gdb跟踪调试内核

启动(窗口被冻结)

 技术分享

另开一个shell窗口(水平分割),然后gdb

 技术分享

先读取符号表,接着连接Linux系统并设断点(start_kernel)

 技术分享

按“c"回车,系统开始启动到start_kernel处:

 技术分享

 

“list”可看到start_kernel上下的代码

 技术分享

设断点rest_init并运行

 技术分享

“list”可看到rest_init上下的代码(可看出它是在start_kernel函数的尾部被调用)

 技术分享

还可再设断点(如kernel_init),查看运行结果

 技术分享

 

2、接下来简单分析一下start_kernel(这里只关注较重要的地方)

(1)先打开init目录下的main.c找到start_kernel:

 技术分享

510行处的init_task为全局变量,相当于一个进程的pcb,0号进程为最终的idle进程。

注:不管内核的哪一方面都会涉及到start_kernel。

(2) 搜索trap_init,找到arch/x86下的代码:

 技术分享

其中的一个硬件中断:

技术分享

这里的SYSCALL_VECTOR是一个系统调用,用指令的方式来触发中断。

 

(3)之后有很多个初始化,需要注意的还有整个函数的最后一句rest init():

技术分享

总结:

 

 

以上是关于跟踪调试Linux内核的启动过程的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核分析 实验三:跟踪分析Linux内核的启动过程

实验三:跟踪分析Linux内核的启动过程 ----- 20135108 李泽源

跟踪内核启动过程CONFIG_DEBUG_LL转自

gdb跟踪调试内核从start_kernel到init进程启动

Linux内核的启动过程分析

Linux内核分析之跟踪分析Linux内核的启动过程