姬梦馨

原创博客

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

  1. 常用调试参数
  2. r(run) 开始运行程序
  3. c(continue) 继续运行一直到断点停止
  4. b(break) 设置程序断点
  5. l(list) 显示当前行后面的源程序
  6. bt (backtrace) 查看堆栈信息
  7. info 查看各类gdb信息以及环境信息,比如:info break可以查看断点信息
  8. p(print) 打印出变量值;如 p var,会把var变量的值输出
  9. s(step) 单步跟踪,会进入函数内部
  10. n(next) 单步跟踪,不进入函数
  11. finish 跳出函数调试,并打印返回时的信息
  12. clear 清除全部已定义的断点
  13. q(quit) 退出gdb

一: 启动Linux 内核

  1. cd LinuxKernel/
  2. qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

内核启动完成后进入menu程序,输入help查看三个命令help、version和quit

  • 使用gdb跟踪调试内核

  1. qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:
  2. # -S freeze CPU at startup (use ’c’ to start execution)
  3. # -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

另开一个shell窗口

  1. gdb
  2. (gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
  3. (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
  4. (gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后

实验总结;

1:start_kernel 相当于普通C程序的main()。

mm/ 内存管理代码。

kernel/ 与进程调度有关;Linux内核的核心代码在该目录中。

2.全局变量init_task

其中有一个全局变量init_task,即手工创建的PCB,0号进程即最终的idle进程。

3.trap_init

trap_init涉及到中断,初始化一些中断向量

  1. set_intr_gate:设置中断门
  2. set_system_trap_gate:系统陷阱门SYSCALL VECTOR

4. mm_init   mm_init:内存管理模块初始化

sched_init  sched_init:调用进程调度初始化

rest_init :kernel_init:创建1号进程 第一个用户态进程:init_process,1号进程,找默认路径下的程序作为1号进程 kthreadd:内核线程,用来管理系统资源

当系统没有进程需要执行时就调度idle进程,即0号进程,一直存在。

5、qemu相当于打开一个虚拟机。

6.百度的一些GDB 源码查看

  • list <linenum> -- 显示程序第 linenum 行的周围的源程序.
  • list <function> -- 显示函数名为 function 的函数的源程序.
  • list <filename:linenum> -- 哪个文件的哪一行.
  • list <filename:function> -- 哪个文件中的哪个函数.
  • list <offset> -- 当前行号的正/负 offset 偏移量那那行.
  • list -- 显示当前行后面的源程序.
  • list - -- 显示当前行前面的源程序.
  • list <first>, <last> -- 显示从 first 行到 last 行之间的源代码.若无 first 则显示从当前行到 last 之间的源代码.
  • set listsize <count> -- 设置一次显示源代码的行数.
  • show listsize -- 查看当前listsize的设置.

Linux 第三周 学习笔记和实验的更多相关文章

  1. 《Linux内核分析》第三周学习笔记

    <Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...

  2. Linux内核分析第三周学习笔记

    linux内核分析第三周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  3. Linux第三周学习总结——构造一个简单的Linux系统MenuOS

    第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  4. Linux内核分析——第三周学习笔记20135308

    第三周 构造一个简单的Linux系统MenuOS 计算机三个法宝: 1.存储程序计算机 2.函数调用堆栈 3.中断 操作系统两把宝剑: 1.中断上下文的切换:保存现场和恢复现场 2.进程上下文的切换 ...

  5. 20135320赵瀚青LINUX第七周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...

  6. 20165326 java第三周学习笔记

    纸质学习笔记 代码托管

  7. 20135320赵瀚青LINUX内核分析第三周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造 ...

  8. Linux内核分析——第三周学习笔记

    20135313吴子怡.北京电子科技学院 chapter1 知识点梳理 一.Linux内核源代码简介 (视频中对目录下的文件进行了简介,记录如下) arch目录 占有相当庞大的空间 arch/x86目 ...

  9. 20179223《Linux内核原理与分析》第三周学习笔记

    测试3的实验: 1. 用gcc -g编译vi输入的代码 2. 在main函数中设置一个行断点 3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点 4. 提交调 ...

随机推荐

  1. curl_init 接口

    <?php// +----------------------------------------------------------------------// | ThinkPHP [ WE ...

  2. JS强制刷新页面、清除缓存刷新

    清理网站缓存的几种方法 meta方法 <meta http-equiv="pragma" content="no-cache"> <meta ...

  3. 配置使用;yum安装slatstack的master,minion<at>centos6_x86_64

    使用: ####################################### 配置: ####################################### 安装: 服务端安装: [ ...

  4. 十分钟教你使用NoteExpress

    http://www.a-site.cn/article/761794.html 如果你正走在读研的路上,不管是什么专业,日常生活中都少不了读文献.读文献和读文献. 与其等到文献堆积如山,给阅读和使用 ...

  5. OpenCV——边缘检测入门、Canny边缘检测

    边缘检测的一般步骤: 最优边缘检测的三个评价标准: 低错误率:表示出尽可能多的实际边缘,同时尽可能地减少噪声产生的误报: 高定位性:标识出的边缘要与图像实际边缘尽可能接近: 最小响应:图像中的边缘只能 ...

  6. 例子:照片的OCR识别

    来自ng的ml-003中 18_XVIII._Application_Example-_Photo_OCR 这是ng2013年在coursera上最后的一课了.这一系列的几个视频还是相比前面有些难懂, ...

  7. day45

    今日内容 1.css三种引入方式 2.三种引入方式的优先级 3.长度及颜色单位 4.常用样式 5.css选择器 CSS三种引入方式 1.1css引入方式之行间式 ​ 行间式(特点): ​ 1.标签头部 ...

  8. 简单直白的去理解AOP,了解Spring AOP,使用 @AspectJ - 读书笔记

    AOP = Aspect Oriental Programing  面向切面编程 文章里不讲AOP术语,什么连接点.切点.切面什么的,这玩意太绕,记不住也罢.旨在以简单.直白的方式理解AOP,理解Sp ...

  9. 自研后端HTTP请求参数验证器服务ParamertValidateService

    好处:方便了后端对HTTP请求中参数进行核验,只需一次编写效验器,一行代码便可对所有参数的pojo进行参数核验!而且更改效验逻辑时只需要更改效验器类即可,实现了解耦合. 只需要程序员按照规范开发一个P ...

  10. WPF和WebBrowser JS交互

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...