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

# 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 文件系统目录分析(手机系统目录分析)

时间: 2024-12-17 09:28:10

android 文件系统目录分析(手机系统目录分析)的相关文章

Android——FileOutputStream与openFileOutput()的区别分析【第一个用于文件存储,第二个用于SD卡存储】【转】

本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. public void save() { try { FileOutputStream outStream=this.openFileO

Android应用开发性能优化完全分析

 应用UI性能问题分析 UI可谓是一个应用的脸,所以每一款应用在开发阶段我们的交互.视觉.动画工程师都拼命的想让它变得自然大方美丽,可是现实总是不尽人意,动画和交互总会觉得开发做出来的应用用上去感觉不自然,没有达到他们心目中的自然流畅细节:这种情况之下就更别提发布给终端用户使用了,用户要是能够感觉出来,少则影响心情,多则卸载应用:所以一个应用的UI显示性能问题就不得不被开发人员重视. 2-1 应用UI卡顿原理 人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然

Android中相机和相册使用分析

Android中相机和相册使用分析 欢迎转载,但请尊重原创(文章来自不易,转载请标明转载出处,谢谢) 在手机应用程序中,使用自带的相机拍照以及相册选择喜欢的图片是最常见不过的用户需求,那么怎么合理使用相机和相册来选择照片是重要的,下面就以项目中实际需求为例进行说明,这里实现的功能如下: 1 使用相机和相册选择图片,并裁剪较小图片(常用于剪裁小图) 2 使用相机和相册选择图片,并裁剪较大图片(常用于裁剪大图) 具体的实现功能清楚了,那么就一一进行说明,具体如下(这里不会罗列怎么上传图片到服务端,只

Android 应用开发性能优化完全分析

1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用,啥啥啥该咋用等,却很少有较为系统的进行真正性能案例分析的,大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质博文网上也还是有很多的,譬如Google官方都已经推出了优化专题,我这里只是总结下自的感悟而已,若有得罪欢迎拍砖,我

【转】Android应用开发性能优化完全分析

http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用,啥啥啥该咋用等,却很少有较为系统的进行真正性能案例分析的,大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质博文网

转——Android应用开发性能优化完全分析

[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用,啥啥啥该咋用等,却很少有较为系统的进行真正性能案例分析的,大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质博文网上也还是有很多的,

转:Android应用开发性能优化完全分析

转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用,啥啥啥该咋用等,却很少有较为系统的进行真正性能案例分析的,大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质

android 常见死机问题--log分析

http://blog.csdn.net/fangchongbory/article/details/7645815 android 常见死机问题--log分析=================================================================================================== 一般在平时工作中,基本上很多代码可以在eclipse+ndk进行调试,但如果需要用到具体的硬件设备,如媒体播放设备无法模拟的情况下,只能上硬

Android 上千实例源码分析以及开源分析

Android 上千实例源码分析以及开源分析(百度云分享) 要下载的直接翻到最后吧,项目实例有点多. 首先 介绍几本书籍(下载包中)吧. 01_Android系统概述 02_Android系统的开发综述 03_Android的Linux内核与驱动程序 04_Android的底层库和程序 05_Android的JAVA虚拟机和JAVA环境 06_Android的GUI系统 07_Android的Audio系统 08_Android的Video 输入输出系统 09_Android的多媒体系统 10_