跟踪调试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内核的启动过程 攥写人:杨光 学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.stud ...
- 20135202闫佳歆--week3 跟踪分析Linux内核的启动过程--实验及总结
实验三:跟踪分析Linux内核的启动过程 一.调试步骤如下: 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd r ...
- 跟踪分析Linux内核的启动过程小解
跟踪分析Linux内核的启动过程 “20135224陈实 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...
- 实验三:跟踪分析Linux内核的启动过程
实验三:跟踪分析Linux内核的启动过程 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.16 ...
- 20135239 益西拉姆 linux内核分析 跟踪分析Linux内核的启动过程
回顾 1.中断上下文的切换——保存现场&恢复现场 本节主要课程内容 Linux内核源代码简介 1.打开内核源代码页面 arch/目录:支持不同CPU的源代码:其中的X86是重点 init/目录 ...
- Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程
Linux内核分析第三周学习博客--跟踪分析Linux内核的启动过程 实验过程截图: 过程分析: 在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_t ...
- Linux内核分析实验三----跟踪分析Linux内核的启动过程
一.Linux内核源代码介绍 1.根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码. init目录下包含内核启动相关的代码,如main.c(start_ker ...
- Linux内核分析 实验三:跟踪分析Linux内核的启动过程
贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...
- linux内核分析第三周-跟踪分析Linux内核的启动过程
一.实验流程 1.打开环境 执行命令:cd LinuxKernel/ 执行命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd root ...
随机推荐
- Php5.6.31连接sqlserver 2008R2数据库问题sqlsrv(php5.3及以上版本)与mssql(php5.3以前版本)②
Php5.6.31连接sqlserver 2008R2数据库 1.环境配置 Win7(win8.1) 64 +Apache2.4 + PHP5.6.31 + SQL Server 2008 R2数据 ...
- Using 1.7 requires compiling with Android 4.4 (KitKat); currently using
今天编译一个project,我设置为api 14,可是编译报错: Using 1.7 requires compiling with Android 4.4 (KitKat); currently u ...
- block本质探寻八之循环引用
说明:阅读本文,请参照之前的block文章加以理解: 一.循环引用的本质 //代码——ARC环境 void test1() { Person *per = [[Person alloc] init]; ...
- Redis高级特性---------事务与持久化与发布订阅
一.redis事务的用法 1.开启事务:multi 2.提交事务:exec ( queued只是把指令放入队列中,没有执行) 3.取消事务:discard 4.redis事务不能保证同时成功或者失 ...
- git更新远程仓库报错
hint: Updates were rejected because the tip of your current branch is behind hint: its remote counte ...
- WPF的IsSynchronizedWithCurrentItem属性
如果两个控件都绑定到同一个源(ObservableCollection)集合视图时,该对象会自动绑定到该视图的 CurrentItem.请注意,CollectionViewSource 对象会自动同步 ...
- Flex自定义组件开发 - jackyWHJ
一般情况下需要组件重写都是由于以下2个原因: 1.在FLEX已有组件无法满足业务需求,或是需要更改其可视化外观等特性时,直接进行继承扩展. 2.为了模块化设计或进一步重用,需要对FLEX组件进行组合. ...
- [2016北京集训试题6]魔法游戏-[博弈论-sg函数]
Description Solution 首先,每个节点上的权值可以等价于该节点上有(它的权的二进制位数+1)个石子,每次可以拿若干个石子但不能不拿. 然后就发现这和NIM游戏很像,就计算sg函数em ...
- deque!
deque:双端队列 比较常用的函数: que.back() 返回容器que的最后一个元素的引用.如果que为空,则该操作未定义. que.begin() 传回迭代器中的第一个数据地址. que.cl ...
- vmware虚拟机中的系统(例如kali),输入内容有延迟和卡顿的解决方案
实际上是因为内存在vmware里设置小了,设置得大点即可, 比如我的kali之前是2gb,然后之前倒是没出过这种问题,但是这次更新系统后可能出了一些问题就变得卡了, 所以我就把kali的内存从2gb调 ...