zImage.img、ramdisk.img、system.img、userdata.img介绍及解包、打包方法

时间:2022-09-09 22:30:47

ramdisk.img system.img userdata.img介绍及解包、打包方法

Android 源码编译后,在out/target/product/generic下生成ramdisk.img、system.img、userdata.img三个镜像文件:

镜像 目录树 内容 目录映射
zImage.img linux内核  
ramdisk.img root 一个分区影像文件,它会在kernel 启动的时候,以只读的方式被 mount , 这个文件中只是包含了 /init以及一些配置文件,这个ramdisk 被用来调用init,以及把真正的root目录挂载起来。 /out/target/product/generic/root
system.img system

它包含了整个系统,android 的framework,application 等等,会被挂接到 "/"上,包含了系统中所有的二进制文件
类似与根文件系统的映像,放着android的应用程序、配置文件和字体等。

out/target.product/generic/system

userdata.img data 将会被挂接到 /data 下,包含了所有应用相关的配置文件,以及用户相关的数据 。  

android加载后3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 data目录下。

ramdisk.img

Ramdisk镜像是采用cpio打包,gzip压缩的。用file验证:

# file ramdisk.img    

输出:

# ramdisk.img: gzip compressed data, from Unix 

为了便于说明问题,我们将ramdisk.img拷贝到其它一个目录,然后按以下步骤将ramdisk.img还原为目录树:

    # mv ramdisk.img ramdisk.img.gz
  # gunzip ramdisk.img.gz
  # mkdir ramdisk
  #cd ramdisk
  # cpio i F ../ramdisk.img

这样,就得到一个完整的ramdisk目录,与out/target/product/generic/root对比后,我们发现它们是一样的内容。 通过执行以下的操作,我们可由目录树再生成ramdisk镜像

  # cd ramdisk   # find . | cpio -o -H newc | gzip > ../ramdisk-new.img

ramdisk.img其实是对root目录的打包和压缩,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、userdata.img

system.img userdata.img这两个镜像都属于yaffs2文件格式,生成方式是一样的。我们就以system.img为例来说明。

System.img 生成 system目录树 所需工具unyaffs

# mkdir system
# cd system
# unyaffs ../system.img

system目录树生成system.img 所需工具 mkyaffs2image,Android源码编译后会生成该工具,在 out/host/linux-x86/bin 目录下。 命令格式:

# mkyaffs2image system/ system_new.img

system.img文件是system目录的一个映像,类似于linux的根文件系统的映像,放着android的应用程序,配置文件,字体等

android启动时首先加载ramdisk.img镜像,并挂载到/目录下,并进行了一系列的初始化动作,包括创建各种需要的目录,初始化console,开启服务等。System.img是在init.rc中指定一些脚本命令,通过init.c进行解析并挂载到根目录下的/system目录下的。
对于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      用户文件夹,包含共享、键盘布局、时间区域文件等。

解压和生成 system.img&data.img ( yaffs2格式)

解压和生成 system.img&data.img ( ext4格式)

zImage.img、ramdisk.img、system.img、userdata.img介绍及解包、打包方法的更多相关文章

  1. Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.

    Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img. 2014年10月20日 ⁄ 计算机视觉 ⁄ 共 1 ...

  2. Android 系统镜像: boot.img kernel.img ramdisk.img system.img userdata.img cache.img recovery.img

    boot.img(kernel.img+ramdisk.img) ramdisk.img(/) system.img(/system) userdata.img(/data) cache.img(/c ...

  3. Android镜像文件ramdisk.img,system.img,userdata.img介绍

    Android 源码编译后,在out目录下生成的三个镜像文件:ramdisk.img,system.img,userdata.img以及它们对应的目录树root,system,data. ramdis ...

  4. 无法读取配置节 system.serviceModel 因为它缺少节声明的解决方法

    无法读取配置节 system.serviceModel 因为它缺少节声明的解决方法,需要的朋友可以参考下 在Windows Server2008 R2中的IIS7中部署WCF服务时报出如题错误: HT ...

  5. 定义一个Person类,其中包括:1.定义属性:姓名、年龄、民族作为成员变量。定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化。3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+";"); }4.定义一个方法“成长”:实现年龄的增加,每执行一次年龄增加1

    题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显 ...

  6. 教你从手机中提取system镜像制作线刷救砖包的简单方法

    其实在制作刷机包的过程中,有时候没有官方或者第三方提供的救砖包(线刷),那怎么办?常规的方法有两种:(此处为常规方法,回读的方式暂不说明)     1.卡刷包转线刷包     2.dd命令导出分区镜像 ...

  7. "System.Security.Cryptography.CryptographicException: 拒绝访问" 问题的解决方法

    .net web程序使用rsa算法进行加解密时,程序报告“System.Security.Cryptography.CryptographicException: 拒绝访问”错.按网上搜的解决方法做了 ...

  8. System.Data.OleDb.OleDbException: 未指定的错误的解决方法

    异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误 这个错误是access数据库特有的错误,当access频繁读取或操作过多的时候就会发生这个错误,微软官 ...

  9. Ubuntu下修改system.img 解包system.img、打包system.img

    一.准备工作:解压解打包工具,得到三个文件:make_ext4fs.mkuserimg.sh.simg2img,把它们跟要修改的 .img.ext4(或.img)文件放置到同一个目录下 二.转换源文件 ...

随机推荐

  1. 关于MySQL数据库优化的部分整理

    在之前我写过一篇关于这个方面的文章 <[原创]为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)> 这次,主要侧重点讲下两种常用存储引擎. 我们一般从两个方面进行MySQ ...

  2. svn迁移到git

    步骤命令如下: > git svn clone https://svn-url/ProjectName --no-metadata --authors-file=user.txt --trunk ...

  3. 详解JS跨域问题

    什么是跨域? 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域.             JavaScript   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  4. java编译正常javac出错不是内部或外部命令

    javac不是内部或外部命令 安装jdk版本jdk-8u111-windows-x64(jdk1.8.0_111) 配置环境: JAVA_HOME D:\xiazai\Java\jdk1.8.0_11 ...

  5. php中的curl】php中curl的详细解说

    本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...

  6. 第4章 awk编程

    1 awk编程模型       2 awk用法 调用awk有三种方法(与sed类似): 在Shell命令行输入命令调用awk,格式为: awk [-F 域分隔符] 'awk程序段' 输入文件 将awk ...

  7. HDU 1698 &lpar;线段树 区间更新&rpar; Just a Hook

    有m个操作,每个操作 X Y Z是将区间[X, Y]中的所有的数全部变为Z,最后询问整个区间所有数之和是多少. 区间更新有一个懒惰标记,set[o] = v,表示这个区间所有的数都是v,只有这个区间被 ...

  8. Spring学习之杂七杂八

    源码解读Spring IOC原理 - http://www.cnblogs.com/ITtangtang/p/3978349.html 1. 使用Groovy配置Bean http://blog.cs ...

  9. 背水一战 Windows 10 &lpar;105&rpar; - 通知(Toast)&colon; 带按钮的 toast&comma; 带输入的 toast(文本输入框,下拉选择框)

    [源码下载] 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框) 作者:webabcd 介绍背水一战 Wind ...

  10. javaee登录界面

    首先在此之前我们应该正确安装数据库,以及eclipse(javaee)文件包. 1.首先在javaee中建立新的项目 2.右键点击WebContent-New-JSP File,新建jsp(动态)文件 ...