Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133916
  • 博文数量: 16
  • 博客积分: 225
  • 博客等级: 民兵
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-28 22:07
个人简介

人是懒惰的,只要有借口就会不想往前。如果既有明确的目标,同时道路又直直指向目标,一览无余,只等你开始往前走,那么便没有借口,一往无前。

文章分类
文章存档

2014年(2)

2013年(9)

2012年(5)

分类: Android平台

2013-09-13 11:21:19


一、Android文件系统结构
编译官方android源码后得到的文件如下:

其中有ramdisk.img,system.img,userdata.img三个映像文件:
->ramdisk.img是android文件系统映像;
->system.img包括了主要的包、库等文件;
->userdata.img包括了一些用户数据。
当emulator加载这3个映像文件后,会把system.imguserdata.img分别加载到ramdisk文件系统中的
systemdata目录下。

二、分离组建Android文件系统
ramdisk.img,system.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:
其中ramdisk.img是一个分区映像文件,即一个文件系统(root file system),kernel启动时,ramdisk负责init,system.img包括了主要系统,系统app等,挂载于文件系统下的 system文件夹, userdata.img包括了一些用户数据,被挂载到文件系统下的data文件夹下。
另外Android源码编译后还有root、system、data三个文件夹,其实就是上述三个img解压之后的内容而已,root文件夹里面的内容就是ramdisk.img解压后的内容,即是一个文件系统,包括system、data、bin、dev等目录。而system与data则对应着system.img与userdata.img的解压后的内容。
验证一下就行了,将ramdisk.img复制一份到/nfsroot下(或任何其他目录),将其名称改为ramdisk.img.gz,
并使用命令gunzip ramdisk.img.gz
然后新建一个名为ramdisk的文件夹,转到ramdisk目录,输入命令:cpio -i -F ../ramdisk.img 
可以看到里面的内容与root文件夹一样的了:
然后把android系统源码编译后生成的system和data文件下的所有内容复制分别到ramdisk/system和ramdisk/data下,
这样就得到一个完整的文件系统了。


三、android系统目录简析

        android系统内部文件夹保存着系统运行的关键数据,android系统是基于linux内核的,
所以会看到他的文件系统设置还是有很大的linux的影子。

一个完整的ROM根目录下会有几个文件夹及文件,一般会有下面的:
\system是一个很重要的目录,系统中的大部分东西都在这里了
\sdcard是SD卡中的FAT32文件系统挂载的目录
\cache缓存目录
\etc指向 /system/etc ,众所周知的配置文件存放目录
\sys :用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中,
用户空间可以修改sysfs中的文件属性来修改设备的属性值 。
\sbin: 只放了一个用于调试的adbd程序。 
\proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。
\data :存放用户安装的软件以及各种数据。 
\root :这个目前还不清楚。 
\mnt 系统提供这个目录是让用户临时挂载其他的文件系统。 
\dev :不用多说了,设备节点文件的存放地。 
下面介绍非目录的文件: 
runme.sh用于 SD 卡中 EXT2文件系统的自动挂载动作的脚本。 
init.trout.rc,init.rc,init.goldfish.rc 是初始化文件. 
init是系统启动到文件系统的时候第一个运行的程序。 
\system\app 
  这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件,在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。例如:
\system\app\AlarmClock.apk 闹钟
\system\app\AlarmClock.odex
\system\app\Browser.apk 浏览器
\system\app\Browser.odex
\system\bin
这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件,例如:
\system\bin\akmd
\system\bin\am
\system\bin\app_process 系统进程
\system\bin\dalvikvm Dalvik虚拟机宿主
\system\bin\dbus-daemon 系统BUS总线监控
\system\etc
从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。例如:
\system\etc\apns-conf.xml APN接入点配置文件
\system\etc\AudioFilter.csv 音频过滤器配置文件
\system\etc\AudioPara4.csv
\system\etc\bookmarks.xml 书签数据库
\system\fonts
字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小。例如:
\system\fonts\DroidSans-Bold.ttf
\system\fonts\DroidSans.ttf
\system\fonts\DroidSansFallback.ttf
\system\framework
framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
\system\framework\am.jar
\system\framework\am.odex
\system\framework\android.awt.jar AWT库
\system\framework\android.awt.odex
\system\lib
lib目录中存放的主要是系统底层库,主要是C/C++库。如平台运行时库。
\system\lib\libaes.so 
\system\lib\libagl.so
\system\lib\libandroid_runtime.so Android运行时库
\system\lib\libandroid_servers.so 系统服务组件
\system\lib\libaudio.so 音频处理
\system\media
铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音
\system\sounds
默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。
\system\usr
用户文件夹,包含共享、键盘布局、时间区域文件等。
阅读(2518) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~