作业三--Linux内核分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业三--Linux内核分析相关的知识,希望对你有一定的参考价值。

一、Linux内核源码

  arch目录支持不同CPU的源代码,是内核源码中比较大的文件。

  fs文件系统Linux内核的源码放在kernel目录中。

二、构造一个简单的Linux系统MenuOS

技术分享

三、使用gdb跟踪调试Linux内核的方法

  -S freeze CPU at startup(在CPU运行前冻结)

 技术分享

  -s 在tcp::1234窗口中创建gdb server.

  在程序中设置断点,然后c运行文件,之后可以用list指令来查看函数运行的位置。

技术分享

如上图,先在tcp:1234端口创建gdb sever,然后把断点设置在init函数上,最后查看init函数的位置:

技术分享

如图,看到init函数在start_kernel函数的尾部。函数内容如上图。

四、简单分析start_kernel函数

  首先定义了全局变量 init_task,即手工创建的PCB,0号进程即最终的idle进程。

  特定内核模块都会涉及到start_kernel,因为所有的模块都会调用到init函数。

  mm_init:内存管理模块初始化  sched_init调度模块初始化

  rest_init:在进程内核启动时就一直存在的0号进程。

  init_process是1号进程,也就是第一个用户态进程。当没有1号进程系统会找默认路径下的程序来作为一号进程。

  函数运行时会当系统没有进程调用时就调度到idle进程。

  0号进程创建了1号进程和其他服务的内核线程。

  

 

以上是关于作业三--Linux内核分析的主要内容,如果未能解决你的问题,请参考以下文章

20169203《Linux内核原理与分析》第四周作业

linux内核分析作业3:跟踪分析Linux内核的启动过程

Linux内核分析作业 NO.7

Linux内核分析作业 NO.2

Linux内核分析作业一

魏昊卿——《Linux内核分析》第三周作业:Linux系统启动过程