全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux

         最近补了一点基础的概念,之前完全看不懂的代码似乎有看懂了一丢丢。尝试做一个补充理解笔记。

528_linux内核学习_内核进程启动分析_Linux

         这里,增加了一个理解说明,关于fork。之前,这个函数功能不了解,而这部分没有源代码存在于库文件,因此也没去做深入的分析。现在大概看懂了,其实这里是fork创建了一个子进程。而子进程中,执行了init函数。

         在我手中这份内核代码中,存在两个init函数,但是也非常明确,这里的init就是main.c中的,因为另一个是静态函数无法在这里调用。

         接下来,再看看init中的相应代码。

528_linux内核学习_内核进程启动分析_Linux_02

         最开始,先执行了一部分驱动的设置,输出了一些系统本身的信息。

528_linux内核学习_内核进程启动分析_Linux_03

         上面这部分代码中,fork了一个新的进程,并在子进程中关闭了一个文件标识符,尝试打开一个文件,成功则退出。不成功,尝试运行一个其他的程序,失败后退出且有一个退出码返回。如果成功,应该是进入相应的程序不再返回了。继续往下,其实是父进程的处理,父进程会等待子进程的执行。

528_linux内核学习_内核进程启动分析_Linux_04

         之后,父进程进入一个死循环。在死循环中,又fork进程,失败的时候打印失败提示信息。成功,则在fork出来的子进程中关闭了三个文件标识符。下面的几行代码,又涉及到了我不熟悉的函数。不过,从这里看得出,其实266行会让这个任务不再返回,因此正常运行的话这个循环中不会无限fork。继续往后,有些异常处理以及同步操作。

         有几个不熟悉的函数,后面还是得要增补学习一下。