美文网首页Android开发
编译生成镜像文件(5)

编译生成镜像文件(5)

作者: xcz1899 | 来源:发表于2018-08-28 10:07 被阅读0次

    Android AOSP编译后会在out目录下生成多个image文件:
    boot.img,cache.img,system.img,userdata.img,ramdisk.img,recovery.img。下面对这几个img做一个简单的介绍

    system.img

    system.img在Android启动后会被挂载到system目录(在init.rc环节通过mount挂载)。
    system.img包含了Android系统的主要的目录和文件,解压后的目录如下:
    app目录:存放系统预制APK
    bin目录:存放Linux工具
    etc目录:存放系统配置
    framework目录:存放系统所有的jar包和资源文件
    lib目录:存放系统共享库
    media目录:存放多媒体资源
    priv-app目录:4.4后增加的用于存放系统核心的APK
    tts目录:存放系统的语音合成文件
    usr目录:存放键盘布局,时间区域文件
    vendor目录:存放第三方厂商配置文件,firmware以及动态库
    xbin目录:存放系统管理工具
    build.prop文件:系统属性的定义文件

    userdata.img

    userdata.img在Android启动后被挂载到data目录(在init.rc环节通过mount挂载)。
    userdata.img主要用于存储用户数据,这些数据一般是使用过程中产生的(比如安装APK),但是也可以预制APK到userdata.img中,这些预制的APK用户可以删除。
    除此之外,userdata.img还可以确定设备内存的大小。

    ramdisk.img

    ramdisk.img是Android编译生成的img文件(打包out目录下的root文件夹),其最后会和kernel一起打包生产boot.img。
    ramdisk.img中主要是存放android启动后第一个用户进程init可执行文件和init.*.rc等相关启动脚本以及sbin目录下的adbd工具。

    boot.img

    boot.img包含了kernel(二进制文件zImage)和ramdisk.img。
    由于ramdisk.img中包含的init命令是与Linux内核第一个交互的程序,所以在boot.img中需要同时包含kernel和ramdisk.img。当kernel调用init后,系统就会根据init.rc及其相关文件的代码对整个Android系统进行初始化。
    其中主要的初始化工作就是建立如/system、/data等系统目录,然后使用mount命令将相应的镜像挂载到这些目录上。(在device路径下的fstab.xxx文件定义了挂载img对应的路径,然后device路径下的init.xxx.rc执行mount_all)

    recovery.img

    recovery.img和boot.img一样,也是由kernel和ramdisk.img组成的。它们的kernel是一样的,recovery.img的ramdisk.img中的sbin目录多了一个recovery命令,从而开机后进入recovery界面,不会正常启动Android。

    相关文章

      网友评论

        本文标题:编译生成镜像文件(5)

        本文链接:https://www.haomeiwen.com/subject/zphfwftx.html