文件系统根目录结构分析

Android文件系统根目录结构如下:

[plain] view plaincopy

  1. #ls-l

  2. lrwxrwxrwxrootroot2011-01-0120:00bcm4329_cybertan.hcd->/etc/bluez/bcm432x/BCM4329B1_002.002.023.0389.0000_Cybertan-Foxconn_Cls2_extLNA_EDRmaxInd

  3. lrwxrwxrwxrootroot2011-01-0120:00bcm4329_usi.hcd->/etc/bluez/bcm432x/BCM4329B1_USI_WM-BN-BM-01.hcd

  4. lrwxrwxrwxrootroot2011-01-0120:00bcm4329_samsung.hcd->/etc/bluez/bcm432x/BCM4329B1_TestOnly_0237_26MHz_SEMCO_B23.hcd

  5. dr-x------rootroot2011-01-0120:00config

  6. drwxrwx---systemcache2011-01-0120:00cache

  7. lrwxrwxrwxrootroot2011-01-0120:00udisk->/mnt/udisk/usb

  8. lrwxrwxrwxrootroot2011-01-0120:00flash->/mnt/storage

  9. lrwxrwxrwxrootroot2011-01-0120:00udiskint->/mnt/udiskint

  10. lrwxrwxrwxrootroot2011-01-0120:00sdcard->/mnt/storage/sdcard

  11. drwxr-xr-xrootroot2011-01-0120:00acct

  12. drwxrwxr-xrootsystem2011-01-0120:00mnt

  13. lrwxrwxrwxrootroot2011-01-0120:00vendor->/system/vendor

  14. lrwxrwxrwxrootroot2011-01-0120:00d->/sys/kernel/debug

  15. lrwxrwxrwxrootroot2011-01-0120:00etc->/system/etc

  16. -rw-r--r--rootroot11071970-01-0108:00ueventd.rk29board.rc

  17. -rw-r--r--rootroot37641970-01-0108:00ueventd.rc

  18. -rw-r--r--rootroot01970-01-0108:00ueventd.goldfish.rc

  19. drwxr-xr-xrootroot2013-01-2118:12system

  20. drwxr-xr-xrootroot1970-01-0108:00sys

  21. drwxr-x---rootroot1970-01-0108:00sbin

  22. -rwxrwxrwxrootroot1150471970-01-0108:00rk29xxnand_ko.ko

  23. dr-xr-xr-xrootroot1970-01-0108:00proc

  24. -rwxr-x---rootroot451970-01-0108:00init_battery.sh

  25. -rwxr-x---rootroot42231970-01-0108:00init.rk29board.rc

  26. -rwxr-x---rootroot158981970-01-0108:00init.rc

  27. -rwxr-x---rootroot16771970-01-0108:00init.goldfish.rc

  28. -rwxr-x---rootroot942641970-01-0108:00init

  29. -rw-r--r--rootroot1751970-01-0108:00default.prop

  30. drwxrwx--xsystemsystem2011-01-0120:52data

  31. drwx------rootroot2013-01-0417:57root

  32. drwxr-xr-xrootroot2011-01-0120:00dev

cache是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。

sdcard:是Android手机中SD卡的文件夹路径。

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

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

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

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

data存放用户安装的软件以及各种数据。

root:空

devLinux系统常规文件夹,里面的文件很多都是设备模拟的文件系统,一般用户无需理会。

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

[plain] view plaincopy

  1. <spanxmlns="http://www.w3.org/1999/xhtml"style="">#cd/system/

  2. #ls-l

  3. drwxr-xr-xrootroot2013-01-0419:57fonts

  4. drwxr-xr-xrootroot2013-01-0419:34framework

  5. drwxr-xr-xrootroot2011-01-0120:25etc

  6. -rw-r--r--rootroot20382013-01-2118:11build.prop

  7. drwxr-xr-xrootshell2013-01-0618:29bin

  8. drwxr-xr-xrootshell2013-01-0419:57xbin

  9. drwxr-xr-xrootroot2012-12-3111:05lib

  10. drwxr-xr-xrootroot2013-01-0419:57media

  11. drwx------rootroot2013-01-2118:12lost+found

  12. drwxr-xr-xrootroot2013-01-0419:57usr

  13. drwxr-xr-xrootroot2013-01-1717:39app

  14. drwxr-xr-xrootroot2013-01-0419:57tts

  15. </span>

udisk/flash/udiskint:都是到/mnt相应目录的软链接(挂载目录)。

sqlite_stmt_journals一个根目录下的tmpfs文件系统,用于存放临时文件数据。(Android原生态系统下存在)


下面介绍非目录的文件:

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

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

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

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


主要来分析一下Android文件系统的/system目录的结构:

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

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

[plain] view plaincopy

  1. drwxr-xr-xrootroot2013-01-0419:57fonts

  2. drwxr-xr-xrootroot2013-01-0419:34framework

  3. drwxr-xr-xrootroot2011-01-0120:25etc

  4. -rw-r--r--rootroot20382013-01-2118:11build.prop

  5. drwxr-xr-xrootshell2013-01-0618:29bin

  6. drwxr-xr-xrootshell2013-01-0419:57xbin

  7. drwxr-xr-xrootroot2012-12-3111:05lib

  8. drwxr-xr-xrootroot2013-01-0419:57media

  9. drwx------rootroot2013-01-2118:12lost+found

  10. drwxr-xr-xrootroot2013-01-0419:57usr

  11. drwxr-xr-xrootroot2013-01-1717:39app

  12. drwxr-xr-xrootroot2013-01-0419:57tts

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+foundyaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。

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

sdSD卡中的EXT2分区的挂载目录。


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

其它:

media/audio:这里面保存着安卓系统默认的铃声,alarms是闹铃提醒的,notification是短信或提示音,ringtones是来电铃声,而ui是一些界面音效,比如键盘敲击声。

data/data:这里是每个安装过应用的用户文件存储位置,一般为设置文件、数据库或临时缓存文件,进入后以每个软件的package name包名来命名。

mnt/sdcard/dcim或/sdcard/dcim:这个DCIM文件夹是干什么用的,这里android123提示大家,一般数码相机都有DCIM文件夹,其中进入后Camera为手机摄像头拍摄的照片或视频存放位置。


针对RAM和ROM进行分析:

一部Android手机存在不同的存储空间类型。512MB ROM和512MB RAM,还有一个SDHC的扩展槽,标配2G内存卡,最大可支持32G内存卡。那么这些数据都是什么意思呢?

RAM:

RAM是Random Access Memory的缩写,中文名称是随机存取存储器。对于大多数的计算机和智能手机来说,RAM可以使一个软件快速并直接地读取和写入数据。当断电的时候 RAM中的内容就会丢失,比如手机关机。RAM的大小决定了你能同时运行几个程序,也决定了你最大能加载多大的文件。当RAM不足的时候就会提示“Out of memory”错误。因为Android 2.2能提前预测当需要内存的时候,哪一个程序将要被从RAM中去除,所以RAM的信息并没有显示到“设置”菜单里。Android 2.2之前的版本最大只支持256MB内存,但是Android 2.2可以支持大容量内存,比如512MB RAM。

ROM:

ROM是Read-Only Memory的缩写。以前常用来表示一旦出厂后上面存储的数据就不能被修改,同时即使没有电,数据也不会丢失。后来,一种新型的ROM――EEPROM, 代替了原来的ROM。这种EEPROM允许用高一点的电压改写数据以便用于升级。以后Flash Memory(闪存)代替了EEPROM,闪存可以很容易的修改内容。现在我们说智能手机中的ROM一般指的是Flash Memory了。

手机中的ROM一般被分成若干区域。在Android中,有一部分被分给了操作系统,分给操作系统的这部分通常被保护起来,用户不能向里面写入数据。通常我们说Rooting指的就是获得操作系统的最高权限,因此我们可以读取和写入到这部分区域。比如替换系统默认的图片。

另外ROM还分了一部分空间给用户作为存储数据用, 用于存储下载应用程序,保存用户数据等。这部分区域已经完全脱离了“Read-Only”,不再“只读”。在Android 2.2版本中,这部分空间被挂载到/mnt/asec目录下,我们可以进入查看下载的应用程序的APK文件。这部分空间有时被称作“手机内部存储”,想一 下Windows中的C盘,windows的文件夹是不可见的并且在系统分区。在我的LG Optimus中,最初有180MB可用,这些可用的空间随着安装的程序的增多而变小。我们可以通过“设置”-“SD卡和手机内存”-“手机内部存储”来 查看剩余的空间大小。最后强调一点,当可用空间变得非常小的时候,就不能再下载或者安装应用程序了。

Micro SD/SDHC

这是增加手机存储空间的唯一方法。他相当于一个计算机的外部硬盘。LGOptimus出厂的时候配置了一个2GB SD卡,我们用32GB及以下的内存卡替换掉他。SD卡目录挂载到/mnt/sdcard目录下,可以去“设置”-“SD卡和手机内存”-“SD卡”查 看。

在SD卡上,你可以存储任何的数据,电影,音乐,照片等随你。如果你喜欢你可以把手机作为一个(非常昂贵的)读卡器^_^。在Android 2.2手机中,一部分应用程序可以从手机内部存储移动到SD卡上,以便节约宝贵的内部存储空间。不过你得记住,不是所有的程序或者程序的一部分能被移动到 SD卡上的。所以,如果你的手机内部存储空间几乎没有空闲,通过一味的增大SD卡的容量,并不会对你有帮助。

当你想替换一个SD卡的时候,记得在抠下老的SD卡之前,先去“设置”-“SD卡和手机内存”-“SD卡”-“卸下SD卡”(别忘了Android是基于Linux的)。新插入的SD卡会自动的被加载。

想要得到内存和存储卡的更详细信息,需要安装第三方相关应用程序。


结合网络上相关资料,初步概括了文件系统相关目录说明,后续会继续添加,欢迎博友指点!!!


更多相关文章

  1. Android 将系统的back键模拟成为home键的功能
  2. Android 系统功能设置菜单 LinearLayout与relativeLayout的实现
  3. Android中xml文件读写
  4. Android 属性系统: Android Property System
  5. Android屏幕适配之修改系统density
  6. Android中Manifest.xml配置文件
  7. android之layout配置文件解读
  8. android 从tomcat读取文件出错:connect failed: ECONNREFUSED
  9. Android:dimen尺寸资源文件的使用

随机推荐

  1. sql查看所有表大小的方法
  2. 附加到SQL2012的数据库就不能再附加到低
  3. php使用pdo连接sqlserver示例分享
  4. 用sql实现18位身份证校验代码分享 身份证
  5. sqlserver数据库使用存储过程和dbmail实
  6. 使用sqlserver存储过程sp_send_dbmail发
  7. 查找sqlserver查询死锁源头的方法 sqlser
  8. 一条SQL语句修改多表多字段的信息的具体
  9. sql中参数过多利用变量替换参数的方法
  10. sqlserver游标使用步骤示例(创建游标 关