Android 源码编译后,在out/target/product/generic下生成的三个镜像文 件:ramdisk.img,system.img,userdata.img以及它们对应的目录树root,system,data。 ramdisk.img是根文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,android加载 这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 data目录下。

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这两个镜像都属于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      用户文件夹,包含共享、键盘布局、时间区域文件等。

ramdisk.img文件解析相关推荐

  1. Json文件解析(下

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...

  2. Json文件解析(上)

    Json文件解析(上) 代码地址:https://github.com/nlohmann/json 自述文件 alt=GitHub赞助商 data-canonical-src="https: ...

  3. OpenCV读写视频文件解析(二)

    OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++: bool VideoCapture::set(int propId, double value ...

  4. OpenCV读写视频文件解析

    OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在OpenCV 中,VideoCapture 类 ...

  5. cocosstudio csd文件解析为.lua

    在学习python过程中,有幸能够看到一位大神在网页中公开的一个关于<CocosStudio 文件解析工具CsdAnalysis>的源码.本人使用稍作改变,由原有的.csd文件转换为C++ ...

  6. java解析五元组_pcap文件解析,并且按照五元组分类

    [实例简介] pcap文件解析,并按照五元组分包,全部用java语言实现. [实例截图] [核心代码] PcapTestZZ ├── PcapTestZ │   ├── 111.206.37.1930 ...

  7. 文件解析库doctotext源码分析

    doctotext中没有make install选项,make后生成可执行文件 在buile目录下面有.so动态库和头文件,需要的可以从这里面拷贝 build/doctotext就是可执行程序. do ...

  8. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  9. 从ramdisk根文件系统启动Linux

    今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下. 其中涉及的内容较多,很多东西不再详述,如需深入研究请查阅相关资料(百度或谷歌一下一大堆). 开发环境:Fed ...

最新文章

  1. linux安装mysql5.7自己初始化_linux系统安装mysql5.7步骤
  2. 传统KTV向互联网+量贩式低头,KTV也需O2O
  3. 记录一下提取文件夹中所有文件名字
  4. python使用手册-Python参考手册(第4版)
  5. zs040蓝牙模块使用方法_三菱CCLINK-IE网络模块使用方法
  6. 十二、dbms_logmnr(分析重做日志和归档日志)
  7. SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)
  8. [解题报告]102 - 生态装箱 时间限制:3.000秒
  9. c语言程序设计5pdf,C语言程序设计5.pdf
  10. 为什么低通滤波器的作用相当于积分器
  11. GDAL集成GEOS编译笔记
  12. cad画多段线时不显示轨迹_为什么CAD绘图编辑拖动时看不到预览效果?
  13. 如何理解同震、震后、震间的含义
  14. Qt::QLocale
  15. 微信小程序日期选择器控件xxxx-xx-xx格式
  16. C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)【2】
  17. Debian8.8开发环境(四)个人设置之bashrc
  18. dart pub私有仓库搭建、私有仓库上传方法、上传工具定制
  19. 由前序序列与中序序列实现后序遍历
  20. 微信小程序的悬浮按钮

热门文章

  1. Vocabulary Group 8
  2. WIFI基础入门--802.11--MAC基础--2
  3. Matlab学习记录:常用模块
  4. 车联网车载T-BOX系统解决方案
  5. 在腾讯云开通短信验证服务如何设置正确格式的签名和正文模板并完成群发消息测试
  6. 微信小程序功能——展开和收起查看
  7. sublime下载与安装及Package Control插件安装
  8. Python + Excel——飞速处理数据分析与处理
  9. 罗马java_Java 数字转换成罗马字
  10. Openstack容器项目之Magnum