Linux内核启动应用程序分析(二)
来源:互联网 发布:linux打包压缩命令zip 编辑:程序博客网 时间:2024/05/05 23:36
在前面的分析中我们了解到,内核挂接到根文件系统之后,进入init_post这个函数,开始启动应用程序。在前一篇博文中,我们具体分析了init_post最终会调用run_init_process(“\sbin\init”)这个函数进入下一阶段的启动流程。请参考:http://blog.csdn.net/stephen_lu_fahai/article/details/70452434
在此之前,我们首先来了解一个新的概念:busybox。所谓的busybox,实际上是一些命令的集合,比如:cd ls cp等。之所以会有这个概念是因为如果把每个命令都单独编译和链接的话,会比较麻烦,倒不如把所有的命令都链接到busybox下,这样我们只要编译和链接busybox就相当于编译和链接这些命令。而在run_init_process(“\sbin\init”)这个函数中,init也是到busybox的链接。
所以我们要想知道run_init_process(“\sbin\init”)这个函数具体做了什么事情,我们就要找到busybox的源码来分析。
在busybox源码目录下,我们可以看到各种指令的文件,然而我们要关心是init.c这个文件。进入这个文件,我们首先要看的当然是main函数:
在main函数中有这么一段:首先看954行的判断,由于挂接文件系统的时候,我们没有给它参数,所以argc=1(默认值),所以这一段函数会执行else的部分,也就是parse_inittab,从名字中我们就能看得出来,这个函数解析初始化的文件,进去看一下:
在这个函数中,764行,首先打开INITTAB这个文件,这个文件定义为:
#define INITTAB "/etc/inittab"/* inittab file location */ 显然是配置文件,那配置文件到底有什么内容,我们可以在bosybox源码目录下搜索,发现inittab在这个路径下:busybox-1.7.0\example,打开它:
首先我们看第10行选中的部分:Format for each entry: <id>:<runlevels>:<action>:<process>,说得很明白,它的格式为:
<id>:<runlevels>:<action>:<process>,并且随后对每一个部分都作出了解释:
id=>/dev/id,用作终端:(stdin stdout stderr printf scanf),还记得我们前一篇博文里面分析的首先打开一个文件吗?这里就是它的格式。
runlevels:可以完全忽略
action:执行时机
process:应用程序或者脚本也就是我们知道了这个配置文件的格式是这个样子的。。。那么我们再回到parse_inittab这个函数。
parse_inittab函数下:
765行,判断这个文件是否存在,也就是说是否成功打开这个文件。
765到786行,如果这个文件不存在的话,就会处理默认的配置信息。
从786行开始,如果成功打开这个文件的话,就会对这个文件进行解析,再进行处理。
我们可以看到,无论是直接处理默认的信息还是解析文件后再处理,都是调用new_init_action进行的。
咱们下次接着分析吧。
- Linux内核启动应用程序分析(二)
- Linux内核启动应用程序分析(一)
- Linux内核启动应用程序分析(三)
- linux内核启动过程分析(二)
- Linux内核启动流程分析(二)
- Linux内核启动分析二
- <Linux>Linux内核启动分析(二)——start_kernel
- Linux内核启动流程分析(二) 写的非常好
- Linux内核分析(二)
- Linux 内核启动分析
- Linux内核启动分析
- Linux 内核启动分析
- linux内核启动分析
- Linux 内核启动分析
- Linux内核启动分析
- Linux内核启动分析
- Linux内核启动分析
- Linux内核启动分析
- linux 电子邮件服务器Postfix安装与配置
- 位图和哈希切分的大数据处理
- 静态成员
- Mayor's posters
- 外挂学习之路(15)---lua语言的使用,
- Linux内核启动应用程序分析(二)
- Arrays类对数组的操作
- Batch Normalization Tensorflow代码
- c++中的system("pause")的作用
- webrtc android编译
- Mike and gcd problem-codeforces-Round 410 Div2-C
- 怎样在微信公众号实现实验室预约
- Vim插件之TaskList
- poj 2528 Mayor's posters(线段树+离散化)