内核编译(七):构建根文件系统(一):第一个应用

    上节课,我们就把内核的启动流程给彻底分析完了,我们知道,在内核的启动流程中,最终是要运行我们的系统应用程序,然后这些系统应用程序就帮我们构建一个根文件系统,实现人机交互。

    我们从上节课的分析知道,当内核挂接(识别)好了根文件系统后,最后会执行下面的函数:


我们进入这个函数看看:


首先,它先打开了"/dev/console"这个文件,也就是我们的终端(控制台)。然后,我们把这个文件号进行复制两次(sys_dup为重定向),且这两个复制后的文件号都指向这个文件。其实,这里就是创建标准输入,标准输出,标准错误(0,1,2),后面ramdisk_execute_command的值是NULL(具体什么原因最近可以找搜索一下这个变量,这里就不分析了,它是和虚拟内存盘有关的。),所以if的语句块不会被执行,之后execute_command我们是有值的,我们看看它的值是什么:

可以看到,它后面也定义有__setup这个宏,而且参数是"init=",这个在我们命令行参数里面是有定义的,也就是我们第一个启动的应用程序。这样,我们就会第一个应用程序。如果我们没有定义我们的“init=”这个参数,或者这个程序不存在的话,我们就会执行后面的程序,也就是后面的四个run_init_process调用,如果这些程序都不存在,就会引发错误(一般来说,我们执行第一个程序后就一去不复反了。)

    到此,第一个应用程序我们就分析完了!

猜你喜欢

转载自blog.csdn.net/xiaokangdream/article/details/80304438