跟踪分析Linux内核的启动过程

    xiaoxiao2021-03-25  64

    王宣 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一部分:GDB命令简介 其实这个网上很多,这里引用网友的一篇博客http://blog.csdn.net/yinjiabin/article/details/7732931

    第二部分:省略了其中很多调用的函数调用关系图

    第三部分:实验分析 这次直接在实验楼上面做了

    首先init是个普通的用户态进程,它是Unix系统内核初始化与用户态初始化的接合点,也是所有进程的祖先, 在运行init以前,是内核态初始化,该过程的最后一个动作就是运行/sbin/init可执行文件。那么init这个 进程是怎么生成的呢? 首先要从main.c中的start_kernel()函数说起,

    上图的箭头就是对0号进程的初始化, 然后进行一系列的工作之后,会跑到rest_init()这个函数中,而这个函数就是Linux内核初始化的尾声, rest_init()

    而这个函数中有一个kernel_thread()函数,在这个函数里面会运行kernel_init()函数

    然后在这个kernel_init()函数中的会启动init进程

    然后箭头所指的函数就会通过execve()函数来运行init程序,也就是1号进程就随之运行, 而0号和idle进程的关系则是在调用cpu_idle()后,0号进程随之演变成了idle进程

    第四部分:总结 这次实验追踪那些函数,代码又比较多,对gdb也不怎么熟,所以做起来有点吃力, 通过这次实验,学到了不少东西,而且对gdb也慢慢的适应了,初次接触这些东西,上面的分析如果有什么不对的, 请给本菜鸟指点指点啦。。。

    转载请注明原文地址: https://ju.6miu.com/read-36318.html

    最新回复(0)