zoukankan      html  css  js  c++  java
  • 20135320赵瀚青LINUX内核分析第三周学习笔记

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

    概述

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

    一、实验概述

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

    二、实验的主要步骤

    1、kernel启动一个内核

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

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

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

    三、实验代码分析

    • 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和其他服务线程。这就是内核的启动过程

  • 相关阅读:
    mysql 索引
    私有变量 _变量名 、__变量名、__变量名__的区别
    python中 is 和 == 的区别
    赋值,浅拷贝,深拷贝
    Django model字段类型清单
    (转)nginx uwsgi wsgi django 这些东西究竟是什么关系
    线性结构
    复杂度_最大子列和问题(2)
    复杂度_最大子列和问题(1)
    应用实例——最大子列和问题
  • 原文地址:https://www.cnblogs.com/5320zhq/p/5270056.html
Copyright © 2011-2022 走看看