码迷,mamicode.com
首页 > 移动开发 > 详细

android 文件系统目录分析(手机系统目录分析)

时间:2014-07-26 03:38:27      阅读:437      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   java   使用   os   文件   

# pwd && ls -a -l / 

drwxrwxrwt root     root              2009-06-10 09:53 sqlite_stmt_journals 

drwxrwx--- system   cache             2008-09-06 22:51 cache 

d---rwxrwx system   system            1970-01-01 08:00 sdcard 

lrwxrwxrwx root     root              2009-06-09 22:11 etc -> /system/etc 

drwxr-xr-x root     root              2008-09-06 22:45 system 

drwxr-xr-x root     root              1970-01-01 08:00 sys 

drwxr-x--- root     root              1970-01-01 08:00 sbin 

-rw-r--r-- root     root          117 1970-01-01 08:00 runme.sh 

dr-xr-xr-x root     root              1970-01-01 08:00 proc 

-rwxr-x--- root     root         1704 1970-01-01 08:00 init.trout.rc 

-rwxr-x--- root     root         9329 1970-01-01 08:00 init.rc 

-rwxr-x--- root     root         1677 1970-01-01 08:00 init.goldfish.rc 

-rwxr-x--- root     root       106636 1970-01-01 08:00 init 

-rw-r--r-- root     root          118 1970-01-01 08:00 default.prop 

drwxrwx--x system   system            2008-09-06 22:51 data 

drwx------ root     root              2009-06-07 16:29 root 

drwxr-xr-x root     root              2009-06-09 22:11 dev 


sqlite_stmt_journals:一个根目录下的tmpfs文件系统,用于存放临时文件数据。 cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。 sdcard:是SD卡中的FAT32文件系统挂载的目录 

etc:指向 /system/etc ,众所周知的配置文件存放目录 

system :是一个很重要的目录,系统中的大部分东西都在这里了,以下是目录结构: 

 

# ls -a -l /system 


drwxr-xr-x root     208               1970-01-01 08:00 xbin 

drwxr-xr-x root     root              1970-01-01 08:00 modules 

drwxr-xr-x root     root              2008-08-01 20:00 framework 

drwxr-xr-x root     root              2008-08-01 20:00 fonts 

drwxr-xr-x root     root              2008-08-01 20:00 etc 

-rw-r--r-- root     root         2197 2008-08-01 20:00 build.prop 

drwxr-xr-x root     root              2008-08-01 20:00 media 

drwxr-xr-x root     shell             2008-08-01 20:00 bin 

drwxr-xr-x root     root              2008-08-01 20:00 usr 

drwxr-xr-x root     root              2008-08-01 20:00 app 

drwxr-xr-x root     root              2008-09-06 22:45 lost+found 

drwxr-xr-x root     root              2008-08-01 20:00 lib 

drwxr-xr-x root     root              2008-08-01 20:00 sd 

-rw-r--r-- root     root          145 2008-08-01 20:00 init.rc 


sys :用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值  

sbin: 只放了一个用于调试的adbd程序。  

proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。 

data :存放用户安装的软件以及各种数据。  root :什么都没有。  

dev :不用多说了,设备节点文件的存放地。  下面介绍非目录的文件:  

runme.sh用于 SD 卡中 EXT2文件系统的自动挂载动作的脚本。  

init.trout.rc,init.rc,init.goldfish.rc 是初始化文件.  

init是系统启动到文件系统的时候第一个运行的程序。  

从以上的根目录分析来看,Android的根文件系统并非标准的Linux文件系统,所以以后还得仔细分析一下启动过程,才能认识Android系统。 

今天要来分析一下Android文件系统的/system目录的结构。    

/system目录是在Android文件系统占有及其重要的位置,基本上所有的工具和应用程序都在这个目录下,我看来是一个真正的rootfs。

他在 Android手机中存放在nand flash的mtd3中,是一个yaffs2文件系统,在启动时被挂载在root的/system目录下,其中包含有: 

 

# pwd && ls -a -l  /system 


drwxr-xr-x root     208               1970-01-01 08:00 xbin 

drwxr-xr-x root     root              1970-01-01 08:00 modules 

drwxr-xr-x root     root              2008-08-01 20:00 framework 

drwxr-xr-x root     root              2008-08-01 20:00 fonts 

drwxr-xr-x root     root              2008-08-01 20:00 etc 

-rw-r--r-- root     root         2197 2008-08-01 20:00 build.prop 

drwxr-xr-x root     root              2008-08-01 20:00 media 

drwxr-xr-x root     shell             2008-08-01 20:00 bin 

drwxr-xr-x root     root              2008-08-01 20:00 usr 

drwxr-xr-x root     root              2008-08-01 20:00 app 

drwxr-xr-x root     root              2008-09-06 22:45 lost+found 

drwxr-xr-x root     root              2008-08-01 20:00 lib 

drwxr-xr-x root     root              2008-08-01 20:00 sd 

-rw-r--r-- root     root          145 2008-08-01 20:00 init.rc 

下面逐个分析其中的目录: 

xbin:下放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。如果你看到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当于标准Linux文件系统中的/sbin。我的手机此目录下有busybox,肯定是改过的,应该是破解者加上的。 

modules:使用来存放内核模块(主要是fs和net)和模块配置文件的地方。 

framework: 是JAVA平台的一些核心文件,属于JAVA平台系统框架文件。里面的文件都是.jar和.odex文件。 

                   备注:什么是odex文件? odex是被优化过的JAVA程序文件,体积通常是.jar的4倍左右。执行效率比.jar高。 

fonts:很显然,这是字体库文件的存放目录。 

etc:这里存放了系统中几乎所有的配置文件,根目录下的/etc就链结于此。 

build.prop:是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似于/etc中的文件。 

media:里面主要是存放了系统的铃声的,分为 notifications(通知)、ui(界面)、alarms(警告)和ringtones(铃声),里面都是.ogg音频文件。 

bin:众所周知,是存放用户常用的工具程序的,其中大部分是到toolbox的链接(类似嵌入式Linux中的busybox)。toolbox应该是google简化版的busybox,我还没深入研究过。 

usr  :用户的配置文件,如键盘布局、共享、时区文件等等。您可以cat 来看看。 

app:顾名思义,存放的是Android系统自带的JAVA应用程序。 

lost+found :yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。 

lib:存放几乎所有的共享库(.so)文件。 

sd :SD卡中的EXT2分区的挂载目录 

init.rc :一个初始化脚本,用于将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏。 

好了,/system目录的结构的结构就简单分析到这里,  

以下内容转载自国内最大的CDMA手机玩家论坛www.diypda.com。

1、android文件系统的结构android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。 


2、分离android文件系统出来 

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  Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把 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下。这样就得到一个文件系统了。 


3、使用网络文件系统方式挂载android文件系统 

因此,我们需要建立/nfsroot目录,再建立/nfsroot/androidfs目录,把刚才的android文件系统改名为androidfs,并链接到/nfsroot/androidfs 


4、android内核引导文件系统 

android内核挂载/nfsroot/androidfs之后,根据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缓存大小 


5、操作android的一些方法 您应该已经知道,Android 的核心作业系统是Linux (现在用的版本是2.6.25)。因此内部的档案系统,与系统目录等,也和Linux 脱不了关系。要如何观察这些系统目录,到底藏了什么秘密呢?  

在Eclipse 环境中,你可以用DDMS 来观察。不过这个DDMS 在我的电脑上的执行速度,实在太慢了。

我个人的偏好是,直接用adb shell 来观察。 启动adb shell 的用法如下: 

1). 在Windows 中,开启一个命令列视窗(或执行cmd.exe 这个程式)  

2). cd <android-sdk-install_path>/tools  3). adb shell  

当你看到这个# 提示字元时,就表示你已经进入模拟器的系统。接下来,你就可以用Linux 上的指令来浏览这些目录。像是 cd, ls, pwd, cat, rm 等等。  

这里面,有几个目录是和Android 相关的,特地将他整理下来,供你参考。  

/system/app  

预载入应用程式执行档(*.apk),都是放在这。像是Alarm Clock, Browser, Contacts, Maps,... 等等。  

/system/framework  

这里放 Android 系统的核心程式库。像是core.jar, framework-res.apk, com.google.android.gtalkservice.jar,...等等。 

虽然许多程式库都是以jar 结尾的,不过里面Java classes 还是以dex 格式存在着。  /system/media/audio/(notification, alarms, ringtones, ui)  

这里放系统的声音档,像是闹铃声,来电铃声等等。这些声音档,多是 ogg 格式。  

/data/anr/traces.txt  

当你的应用程式发生ANR (Application is Not Responding) 错误时,Android 会自动将问题点的code stack list 写在这个档案内,你直接用cat 命令就可以看他的内容。  

/data/app  

/system/app 放的是系统预载的应用程式执行档。而这里放的是使用者自己安装的应用程式执行档(*.apk)。  

/data/data/<app-package-name>  

当你在程式中用Context.openFileOutput() 所建立的档案,都放在这个目录下的files 子目录内。而用Context.getSharedPreferences() 所建立的preferences 档(*.xml) ,则是放在shared_pref 这个子目录中。  

/data/location/gps  

这里看起来,应该是给GPS location provider 用的。

其中的 properties 档案的内容如下:  requiresNetwork false  requiresSatellite false  requiresCell false  

hasMonetaryCost false  supportsAltitude true  supportsBearing true  supportsSpeed true  repeat true  accuracy 100  

powerRequirement 1  

没猜错的话,这应该是用来描述GPS location provider 有那些功能的。  

/data/system/location/location.gps  

这个档案也是个一般文字档。主要是记录最后的经纬度座标。 LocationManager.getLastKnownLocation() 就在来这抓值的。  

/data/property/persist.sys.timezone  这个档案也是个一般文字档。主要是记录目前系统所使用的时区。在我的模拟器上,他记录着Asia/Taipei 这个字串。  

最后,下面这两个指令,也很好用。他可以帮你将外部档案,复制到模拟器的系统档案目录内,也可以将模拟器内的档案,复制到外部系统上。  

adb push <local> <remote> - copy file/dir to device  adb pull <remote> <local> - copy file/dir from device


参考:

http://blog.csdn.net/zjg555543/article/details/7792079

http://pbad.blog.163.com/blog/static/69146437201361910419813/



android 文件系统目录分析(手机系统目录分析),布布扣,bubuko.com

android 文件系统目录分析(手机系统目录分析)

标签:android   style   blog   http   java   使用   os   文件   

原文地址:http://my.oschina.net/f839903061/blog/294839

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!