linux第五周
第五周
给MenuOS增加time和time-asm命令
更新menu代码到最新版
在main函数中增加MenuConfig
增加对应的Time函数和TimeAsm函数
make rootfs
- 使用gdb跟踪系统调用内核函数sys_time
一直按n单步执行会进入schedule函数
sys_time返回后进入汇编代码处理gdb无法继续跟踪
执行int 0x80之后执行system_call对应的代码
- 系统调用在内核代码中的处理过程
1.系统调用在内核代码中的工作机制和初始化
2.系统调用机制的初始化
3.中断上下文的切换和进程上下文的切换
- 实验:使用gdb跟踪分析一个系统调用内核函数
1.运行MenuOS系统
在实验楼的虚拟机环境里,打击打开shell,使用命令
cd LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
即可启动这个用于实验的Linux系统MenuOS,实际上就是一个在Linux内核的基础上,再运行一个简单菜单命令行程序。我们可在MenuOS>的提示符下输入help,看到其全部支持的命令.
2.调试运行
1)使用带参数命令启动MenuOS
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:
-S freeze CPU at startup (use ’c’ to start execution)
-s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
也就是在启动MenuOS系统的时候,添加了-S和-s这两个参数,这样可以使得系统在刚刚启动的时候,暂停执行。以便等待我们调试器跟踪执行。
2)启动gdb,设置断点,运行
在shell窗口上,右键单击,选择水平分割,在分割出的新的窗口中,输入gdb,在出现gdb提示符后,加载符号文件
(gdb)file linux-3.18.6/vmlinux
建立和被调试程序的连接
(gdb)target remote:1234
在start_kernel函数入口处设置断点
(gdb)break start_kernel
继续输入c,使得系统运行到start_kernel处停住
(gdb)c
在gdb下,使用list,列出断点附近的源代码,使用n,单步执行等命令,从而可以详细的跟踪到Linux系统启动的过程。
gdb调试常用参数
- r(run) : 开始运行程序;
- c(continue) : 继续运行一直到断点停止
- b(break) : 设置程序断点;
- p(print) : 打印出变量值;如 p var,会把var变量的值输出
- s(step) : 单步跟踪,会进入函数内部
- n(next) : 单步跟踪,不进入函数
- finish : 跳出函数调试,并打印返回时的信息
- u(until) : 跳出循环体
- q(quit) : 退出gdb
- l(list) : 显示当前行后面的源程序
- bt (backtrace) : 查看堆栈信息
- info : 查看各类gdb信息以及环境信息,比如:info break 可以查看断点信息
- clear : 清除全部已定义的断点
- delete : 删除指点的断点号,后面接断点号
3. 总结
start_kernel()是内核的汇编与C语言的交接点,在该函数以前,内核的代码都是用汇编写的,完成一些最基本的初始化与环境设置工作。start_kernel就像是c代码中的main函数。不管你关注Linux的内核模块,总是离不开start_kernel函数的,因为大部分模块的初始化工作都是在start_kernel中完成的。在start_kernel()中Linux将完成整个系统的内核初始化,因此start_kernel函数也比较复杂,好在我们只需要关注自己感兴趣的部分即可。内核初始化的最后一步就是启动init进程这个所有进程的祖先。
在start_kernel的最后,是调用rest_init函数,在rest_init函数,内核将使用下面的代码产生第一个真正的进程,即pid=1的1号进程,而init_task是静态制造出来的,pid=0,我们可以在start_kernel函数的开始处,看到其被初始化的代码 。
课后作业
(一)使用gdb跟踪分析一个系统调用内核函数
加载Linux内核符号表:
设置断点:
在sys_fork函数处设置断点:
列出执行的位置:
单步调试:
linux第五周的更多相关文章
- Linux第五周学习总结——扒开系统调用的三层皮(下
Linux第五周学习总结--扒开系统调用的三层皮(下) 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- 20135320赵瀚青LINUX第五周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 按照刘老师的周从三个角 ...
- 20135337朱荟潼 Linux第五周学习总结——扒开系统调用的三层皮(下)
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 一.学习内容 (一 ...
- Linux 第五周 实验: 分析system_call中断处理过程
姬梦馨 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 使用gdb跟踪分析一个系统调用内核函数 ...
- 20135316王剑桥 linux第五周课实验笔记
4.1.1程序员的可见的状态 ———— Y86的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态.如图1所示. 1.程序寄存器(Program registers): %eax, %ec ...
- Linux第五周学习总结
作者:黎静 一.知识点总结 (一)给MenuOS增加time和time-asm命令 1.更新menu代码到最新版 2.test.c中main函数里,增加MenuConfig() 3.增加对应的两个函数 ...
- Linux内核设计第五周——扒开系统调用三层皮(下)
Linux内核设计第五周 ——扒开系统调用三层皮(下) 一.知识点总结 1.给MenuOS增加新的命令的步骤 更新menu代码到最新版 test.c中main函数里,增加MenuConfig() 增加 ...
- 《Linux内核分析》第五周学习总结
<Linux内核分析>第五周学习总结 ——扒开系统调用的三层皮(下) 姓名:王玮怡 学号:20135116 1.给menu ...
- 《Linux内核分析》第五周学习笔记
<Linux内核分析>第五周学习笔记 扒开系统调用的三层皮(下) 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.c ...
随机推荐
- c++11 处理时间和日期
c++11提供了日期时间相关的库 chrono,通过chrono库可以很方便的处理日期和时间. 1. 记录时间长度的duration template<class Rep, class Peri ...
- 关于Android图片资源瘦身的奇思妙想
版权声明:本文由况鹰原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/77 来源:腾云阁 https://www.qcloud ...
- js表单的focus()与blur()方法
前段时间在多文本输入textarea中遇到点小问题,textarea在HTML是没有value属性的,但在js里的可以获取其value值. textarea禁止拉伸resize:none; (为了兼容 ...
- centos配置Tomcat以指定的身份(非root)运行
本文依赖的环境: 已安装并配置好jdk和tomcat环境 已安装并配置好gcc.make等编译工具 1.编译安装守护程序 cd /usr/local/tomcat7/bin/ tar vzxf c ...
- onethink----网站配置信息调用!
{:C('WEB_SITE_TITLE')} // 标题 {:C('WEB_SITE_DESCRIPTION')} // 描述 {:C('WEB_SITE_KEYWORD')} // 关键词 {:C( ...
- ThinkPHP做自动登陆及异位或加密COOKIE!
异位或加密方法: /* *登陆如果自动登陆加密 *默认是0解密状态,1是加密 *采用的方法是异位或加密 */ function encrytion($value,$type=0){ $key = md ...
- 04.ActiveMQ与Spring JMS整合
SpringJMS使用参考:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jms.html ...
- mysql登录密码特殊字符处理
mysql -h 192.168.12.23 -u root -pClz_b1qYPyl6$Zu1 登录报错 mysql -h 192.168.12.23 -u root -pClz_b1qYPy ...
- input输入框制定输入数据类型匹配
<input type="text" id="price_169" value="97" style="max-width: ...
- Yii 后台防止表单提交
第一种方法: 在AR类中设置rules()方法里面设置该属性为unique属性 Class Item extends \yii\db\ActiveRecord{ public function rul ...