zoukankan      html  css  js  c++  java
  • 第三周 内核调试

    1.实验结果

    这周主要是搭建linux内核测试的环境,以及简单分析linux内核的相关函数和执行步骤。

    首先是将一个内存镜像装入内核中运行的实验,这里是使用menu程序。实验结果如下。

    第二个实验主要是搭建gdb的测试平台,利用gdb设置断点,将断点设置在start_kernel处。以下是实验结果

    2运行分析

    这里主要分析以下内核启动时进程以及线程的初始化流程。首先附上代码地址。

    http://codelab.shiyanlou.com/xref/linux-3.18.6/

    我们要关注的内核初始化代码主要位于init/main.c 中的start_kernel函数中,其中函数首先对各个硬件以及环境变量进行初始化,其中561行trap_init()主要是进行中断的初始化,我们需要关注的进程初始化函数rest_init()位于start_kernel最后一行。其程序调用的大致框图如下,下图主要说明了程序进程的初始化作用,其中主要思想是初始化一个process0然后通过process0再生成其它的进程。即下图中的kthread参数。cpu_idle_loop则主要是个while(1)函数,用于协调进程间调用。

    3总结

      linux启动过程中首先有一个启动进程即0号进程,而这个进程是对linux系统不可见的,而其它所有的进程都是由这一个进程创建的。也就是说process1也是由process0创建而来的。而idle进程则主要是在系统的空闲时被系统调用。

  • 相关阅读:
    05数组 字符串数组 多维数组
    android textView的渐入效果
    android颜色表
    ExpandableListView置顶和子list收放
    Adb not responding
    android 一个TextView设置多种颜色
    android 循环操作
    Android异步更新
    android 水波纹
    Android 推门效果
  • 原文地址:https://www.cnblogs.com/qtalker/p/4351903.html
Copyright © 2011-2022 走看看