Linux内核启动应用程序分析(一)

来源:互联网 发布:如何用淘宝买东西 编辑:程序博客网 时间:2024/04/29 23:53

前面我们分析了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。


0 0
原创粉丝点击