什么是busybox?
根文件系统里面其实就是各种应用程序的集合,例如sh、cd、ps这些命令。如果我们要将这些应用程序的源码都拿来进行编译然后再放进根文件系统里面,就会很麻烦不太实际。而busybox就是这些应用程序的集合,我们执行ls命令,实际上是执行busybox ls命令,因为ls命令实际上是指向busybox的链接,如下图。因此当我们想要知道ls命令做了什么事情的时候,就需要找到busybox的源码,去分析它做了什么事情。
busybox里面的init程序
上文我们讲到内核挂载根文件系统以后,会去启动第一个可用的init应用程序。但是init应用程序并不是linux启动的最终归宿,我们的最终目的是启动特定功能的应用程序,但是不同的产品,他们的应用程序肯定是不同的,因此init程序要启动哪个应用程序呢?我们猜测,应该会有一个配置文件,而init程序会读取这个配置文件,再去启动配置文件里面的程序,这样就可以根据不同的用户来启动不同的应用程序了。
上面说的配置文件其实就是/etc/inittab文件,这个文件的格式是:
<id>:<保留>:<动作><应用程序名>
其中init程序会读取这个配置文件。
init程序会将id会变成/dev/id,用来做终端,表示这个程序的标准输入,标准输出,标准错误定向到这个终端中。
init程序会根据动作的不同来运行这个应用程序。而init程序运行的这些应用程序,他们里面会调用库里面的函数,因此busybox里面肯定还包含了各种各样的库。
busybox里面的有什么东西?
根据上面的分析,我们知道busybox里面至少应该有下面这些东西:
- /dev/console:用来作为应用程序的标准输入、输出、错误
- /dev/null:用来当应用程序没有指定标准输入、输出、错误的时候指定它的终端
- init进程:第一个应用程序
- /etc/inittab中指定的应用程序:配置文件
- C库
个人理解
其实busybox更像是我们的应用程序集合,我们的电脑在装完系统以后会安装各种软件方便我们的使用,同样的busybox就是一个应用软件的市场,不过它更加底层,底层到第一个应用程序也是由busybox来生成。