zoukankan      html  css  js  c++  java
  • 2020-2021-1 20209302毕慧敏《Linux内核原理与分析》第四周作业

    第四周作业

    一、实验楼实验三

    使用qemu运行内核,并用gdb跟踪调试内核从start_kernel到init进程启动

    1.实验过程:启动实验楼Linux系统和一个简单的文件系统。

    2.跟踪调试内核的启动过程

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S 

    -S可以使内核暂时冻结

    3.另外开一个窗口,用gdb跟踪调试内核,用1234这个端口与gdbserver进行连接,并且从start_kernel设置断点进行单步调试。

    在rest_init处设置一个断点,单步执行完后内核启动

    二、本周知识小结

    1.-s和-S的区别:

      -s:在1234端口上创建一个gdb-server

      -S:CPU初始化之前冻结起来

    2.可以用list来查看函数详情。

    3.gdb调试中s和n的区别:

      s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
      n: 执行一行源程序代码,此行代码中的函数调用也一并执行。

    4.start_kernel函数:

      main.c中没有main函数,start_kernel()相当于C语言中的main函数,是一切的起点,在此函数被调用之前内核代码主要是用汇编语言写的。

      init_task变量相当于第一个进程的PCB

      trap_init()实现中断向量的初始化

      mm_init()实现内存管理的初始化

      sched_init()实现调度模块的初始化

    5.rest_init():

      rest_init是0号进程,它创建了1号进程init和其他一些服务进程,它能够实现后续的初始化工作,正式执行内核线程和其他服务进程。

  • 相关阅读:
    nginx uwsgi django
    ubuntu config proxy
    jdbc调用sparksql
    jdbc调用sparksql on yarn
    JDK错误
    JDK错误
    docker错误
    docker错误
    Django网站直接使用supervisor部署
    Django网站直接使用supervisor部署
  • 原文地址:https://www.cnblogs.com/augusts/p/13911064.html
Copyright © 2011-2022 走看看