前面我们分析了Linux内核的启动流程,请参考:
http://blog.csdn.net/stephen_lu_fahai/article/details/70162011
http://blog.csdn.net/stephen_lu_fahai/article/details/70305405
通过分析Linux内核的启动流程,我们知道Linux内核首先挂接到根文件系统下,接着用init_post这个函数启动应用程序。
一、打开一个文件
756行,首先打开/dev/console,随后两行 759和760的两个sys_dup表示赋值,都是指向console,这几行代表的意思是,标准输入printf ()、标准输出scanf()、标准错误err()都是从console这个文件中打印出来。
二、通过run_init_process来启动应用程序
774行,如果有命令行输入的话,就执行命令行,如果没有输入的命令行,就执行run_init_process("/sbin/init");如果run_init_process("/sbin/init")执行失败,就接着往下执行。一般来说,这几个run_init_process都是一直循环,不返回的,除非是执行出现错误(可能是找不到对应的文件)。
那么输入的命令怎么来的?我们通过搜索execute_command,找到这个结果:
这是u-boot传入的参数,形式为init=user_command. 具体的user_command是由用户输入,即execute_command=user_command,所以才有了第一个run_init_process判断是由有用户命令传入。
三、总结:
1、打开/dev/console这个文件,这个文件代表着标准输入、标准输出、标准错误。
2、先判断是否有用户的执行命令传入,若是有,就一直循环执行,若是没有,接着往下执行。
注意:run_init_process是个死循环,执行成功后不会返回,只有当执行失败的时候(可能是找不到要执行的文件),才会往下执行其他的run_init_process。
最后
以上就是孤独蜗牛最近收集整理的关于Linux内核启动应用程序分析(一)的全部内容,更多相关Linux内核启动应用程序分析(一)内容请搜索靠谱客的其他文章。
发表评论 取消回复