跟踪调试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():

总结:

最新文章

  1. IOS XML解析
  2. poj1743 后缀数组求不可重叠的重复出现的子串最长长度
  3. IRunningObjectTable接口
  4. hdu 3308 LCIS 线段树
  5. css实现基础几何图形
  6. 探究Android SQLite3多线程
  7. javascript 中 nodeValue 、value 、text 的区别
  8. [LeetCode][Python]Regular Expression Matching
  9. python 基础学习小记
  10. Mybatis基本用法--中
  11. alex python of day3
  12. vue项目中编写一个图片预览的公用组件
  13. [NOI 2015]品酒大会
  14. [转]Eclipse下开发Struts奇怪异常:org.apache.struts.taglib.bean.CookieTei
  15. Meta referrer标签的,可以防止CSRF的攻击
  16. SNMP学习笔记之SNMPv3报文认证和加密
  17. Vue 需要使用jsonp解决跨域时,可以使用(vue-jsonp)
  18. VC++ 共享内存读写操作
  19. 使用mysql遇到的异常
  20. 介绍Web项目中用到的几款JQuery消息提示插件

热门文章

  1. HDU 1025 LIS二分优化
  2. layui水平导航条三级
  3. MongoDB初学笔记(1)
  4. python基础学习1-装饰器及应用
  5. 2_C语言中的数据类型 (八)运算符
  6. [算法]用java实现堆操作
  7. 一个将当前目录下HEX文件的第一行数据删除的程序
  8. SSIS 控制流和数据流
  9. UWP 应用程序名称本地化以及商店显示名称本地化
  10. keras 修仙笔记二(ResNet算法例子)