zoukankan      html  css  js  c++  java
  • 跟踪调试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():

    总结:

     

     

  • 相关阅读:
    springMVC的自定义类型的转换器
    pl/sql
    oracle中的函数
    Oracle基础
    跳台阶算法题
    红黑树
    优先队列
    堆排序
    H5页面,输入框的光标,如果页面上下滑动光标停留在页面上,除了输入框外,松手过了一段时间才跑回输入框里面
    正则:判断为数字,输入的金额整数位不得超过9位,小数位不得超过2位!
  • 原文地址:https://www.cnblogs.com/fuyujing/p/5260806.html
Copyright © 2011-2022 走看看