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

赵瀚青原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

概述

本周是学习的主要是构造简单的LINUX系统,因为涉及到的是LINUX内核相关的知识,所以在理解上有一点困难,视频看了几遍加上老师的讲解,才艰难的弄懂了大概,相信以后几周的学习肯定更加艰难,但是不能因为困难就放弃,要更加努力地完成任务。

一、实验概述

本周实验大致做的事情就是,启动qemu然后启动kernel内核,然后再运行init,使用gdb调试理解每一步实现的功能

二、实验的主要步骤

1、kernel启动一个内核

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

2、使用-S,和-s命令启动一个冻结的内核

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

3、另外打开一个shell启用gdb命令

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

4、设置各种不同断点来观察内核

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

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

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

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

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

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

三、实验代码分析

  • file linux-3.18.6/vmlinux
    作用:加载符号表
  • target remote:1234
    作用:连接LINUX内核
  • break start_kernel
    作用:断点的设置可以在target remote之前,也可以在之后,然后输入c开始运行
  • break kernel_thread
    作用:主要看线程是如何工作的
  • break kernel_init
    作用:运行到Init这段代码来看到底有什么功能

    四、遇到的问题

    一、按照视频中的讲解使用水平分窗后,无法进入kernel内核,无法进行gdb调试

    解决方法:另外打开一个shell重新进入kernel

    二、对make的理解尚不深刻

    暂未解决

    五、总结

    这次的实验内容和步骤不难,但是在理解上还是有一定的困难,下面我谈谈自己的一些理解

    1、qemu相当于一个虚拟机

    2、sched_init()进程调度初对0号进程,即idle进程进行初始化

    3、rest_init实际上就是start_kernel内核一启动的时候会一直存在,这个就叫0号进程;0号进程创建了1号进程kernel_init和其他服务线程。这就是内核的启动过程

上一篇:(转)在Eclipse中使用JUnit4进行单元测试


下一篇:快来领取一场专门讲解UTF-8与UTF-16编码算法的GitChat活动的免费名额