zoukankan      html  css  js  c++  java
  • Android ramdisk.img system.img userdata.img介绍与使用


    http://blog.csdn.net/myarrow/article/details/7867516


    Android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator负责加载这3个映像文件后,会把system.img和userdata.img分别加载到 ramdisk文件系统中的system和 userdata目录下(会发觉有相似性)。

          我们会发觉编译生成的root文件夹内容与android运行时根目录内容相似,ramdisk根文件系统中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据 init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是:
    1)设置一些环境变量
    2)创建system、sdcard、data、cache等目录
    3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals
    4)设置一些文件的用户群组、权限
    5)设置一些线程参数
    6)设置TCP缓存大小

          生成的system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:
    file ramdisk.img,输出: ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009 ,我们可以学习怎么样把 ramdisk.img解压出来。将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令 
    gunzip ramdisk.img.gz,然后新建一个文件夹,叫ramdisk吧,进入,输入命令cpio -i -F ../ramdisk.img,这下,你就能看见并操作ramdisk里面的内容了。然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和ramdisk/userdata下。这样就得到一个文件系统了。

          还会发现,根文件系统下的sys就是一个linux。

    =============================================================

    在android 1.5 模拟器上加载 android 2.1 的系统:

    本文编译出来的3个img文件是2.1版的。可以用system.img和ramdisk.img 替换1.5的版本:

    命令如下:

    打开android 1.5的模拟器 ,同时加载system.img和ramdisk.img

    emlator -avd sdk_1_5 -ramdisk [ramdisk.img路径] -system [system.img的路径]

    启动后可以看到设置中的手机版本变成了2.1版。

    =============================================================

          对于android系统文件夹,比如out/target/prod t/smdk6410/system目录,说明如下:

    system/app      这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是/data/文件夹中。

    system/bin       这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件。

    system/etc       从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。

    system/fonts   字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库。

    system/framework  主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。

    system/lib        lib目录中存放的主要是系统底层库,如平台运行时库。

    system/media  铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音

    system/usr      用户文件夹,包含共享、键盘布局、时间区域文件等。

     

    ramdisk.img 是android系统的根文件系统,系统内核会加载它。它的目录结构如下:

       /system

       /sys

       /sbin

       /proc

       init.rc

       init.goldfish.rc

       init

       /dev

       default.prop

       /data

     

    system.img 是android系统中存放系统文件的,格式为yaff2文件系统的image文件。它将被init进程通过解析init.rc文件mount到/system目录下。它的目录结构如下:

      app

      framework

      lib

      xbin

      build.prop

      fonts

      usr

      bin

      etc

     

    userdata.img 是android系统中存放用户数据的,格式为yaff2文件系统的image文件。它将被init进程通过解析init.rc文件mount到/data目录下。它没有目录结构。不过,mount到data目录后,init进程将会在其中创建如下结构的目录(参考init.rc文件):

     misc

     data

     app-private

     app

     property

     dalvik-cache

     lost+found

     

    //from http://www.devdiv.net/action-blogdetail-uid-1-id-1488

    1. Android 模拟 器采用的是开源工程Qemu,Qemu是Linux 下的著名模拟器

    2. kernel-qemu是内核镜像

    3. ramdisk.img是文件 系统 ,如果你自己编译 了android的源代码 ,它的内容为
    out/debug/target/product/generic/root,mount到android的/

    4. system.img主要存放系统数据 ,android启动后mount到/system
    它包含的内容为out/debug/target/product/generic/system

    5. 一般来说我们不直接使用userdata.img,而是使用userdata_qemu.data,用来存放用户 数据,可读写,android启动后mount到 /data。只有使用-wipe-data参数启动模拟器是时候才会用到userdata.img,它会使用userdata.img的内容覆盖 userdata-qemu.img
    userdata.img的内容为out/debug/target/product/generic/system

     

    我們也可以在terminal中運行mount命令查看文件系統mount情況。

     


  • 相关阅读:
    菜根谭#188
    菜根谭#187
    Single value range only allowed in SystemVerilog
    LUTs, Flip-Flop, Slice
    FPGA 的 RAM 的 区别
    GPU core clock, shader clock ???
    更改Mac的Terminal 格式
    GPU share memory 的应用 (主要内容转载)
    Mac text edit & pdf reader
    Programming Font
  • 原文地址:https://www.cnblogs.com/ztguang/p/12646429.html
Copyright © 2011-2022 走看看