Android的文件系统根目录的结构

更新时间:2023-06-09 18:47:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Android的文件系统根目录的结构

经过这几天在网上搜索关于Android文件系统的相关资料,发现已经有很多高手分析了Android的文件系统,这些高手多从不同的方面分析了其文件系统的结构和运行原理。我这里就写一下自己的理解。 首先是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中的文件属性来修改设备的属性值

Android的文件系统根目录的结构

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文件很重要,记录了系统的设置和改变,类

Android的文件系统根目录的结构

似于/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手机玩家论坛。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)设置一些文件的用户群组、权限

Android的文件系统根目录的结构

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 有那些功能的。

Android的文件系统根目录的结构

/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

本文来源:https://www.bwwdw.com/article/7pv1.html

Top