基于android2.3.5系统:Linux如何启动Andriod的守护进程init

来源:互联网 发布:深入浅出node 编辑:程序博客网 时间:2024/06/01 10:48

***************************************************************************************************************************
作者:EasyWave                                                                                 时间:2013.07.28

类别:Android系统源码分析                                                            声明:转载,请保留链接

注意:如有错误,欢迎指正。这些是我学习的日志文章......

***************************************************************************************************************************

一):Linux是如何Andriod的呢

    我们都知道在Linux系统启动文件系统的时候,一般会在Linux内核中指定command line,如下所示:

从图片中我们可以看到,在linux内核的配置中,有个Boot options的选项,进入之后,我们可以看到有这样的一行命令:

console=ttySAC0 root=/dev/mtdblock2 rootfstype=cramfs init=/linuxrc

这行非常重要,要想成功的启动Andriod系统,最需要关注的是init=/linuxrc,这个在后面详细的讲解,现在我们来看看内核启动之后,都会干些什么事情呢,具体的情参考我的另一篇博文:MACHINE_START and MACHINE_END Macro define   这里面详细的介绍了Linux是如何启动的,这里我们只关注这个函数:static noinline int init_post(void)如下所示:

我们可以看到,内核启动后,会自动的去找前面指定的init=/linuxrc,如果找不到的话,那么他就会去找下面的/sbin/init、/etc/init等等。而在andriod的文件系统中正好是在根目录下有个linuxrc文件,如何看到呢,我们可以通过命令解压ramdisk.img,步骤如下[以OK6410的Andriod系统为例]:

在命令行输入命令: cp ramdisk.img ramdisk.img.gz

之后创建一个文件夹,如:mkdir test,然后复制ramdisk.img.gz到新建的test文件中,之后采用命令:gunzip ramdisk.img.gz进行解压,最后才采用如下的命令:

cpio -i -F ramdisk.img 就将文件系统解压出来了,如下所示:

我们可以在test文件夹中看到一个linuxrc的文件,如下所示:

最后,我们打开linuxrc文件看看里面的内容,如下所示:

看到最后一行/init的吗,不错,Linux内核是通过command line来加载linuxrc,进而linuxrc中加载了/init的Andriod的守护进程init。