Chinaunix首页 | 论坛 | 博客
  • 博客访问: 50519
  • 博文数量: 47
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 11
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-19 01:39
文章分类
文章存档

2015年(18)

2014年(29)

我的朋友

分类: Android平台

2015-08-06 21:43:28

http://blog.csdn.net/wuye110/article/details/8463820

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 -idmv < 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      用户文件夹,包含共享、键盘布局、时间区域文件等。 

阅读(601) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~