文件系统根目录结构分析

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

[plain]  view plain copy
  1. # ls -l  
  2. lrwxrwxrwx root     root              2011-01-01 20:00 bcm4329_cybertan.hcd -> /etc/bluez/bcm432x/BCM4329B1_002.002.023.0389.0000_Cybertan-Foxconn_Cls2_extLNA_EDRmaxInd  
  3. lrwxrwxrwx root     root              2011-01-01 20:00 bcm4329_usi.hcd -> /etc/bluez/bcm432x/BCM4329B1_USI_WM-BN-BM-01.hcd  
  4. lrwxrwxrwx root     root              2011-01-01 20:00 bcm4329_samsung.hcd -> /etc/bluez/bcm432x/BCM4329B1_TestOnly_0237_26MHz_SEMCO_B23.hcd  
  5. dr-x------ root     root              2011-01-01 20:00 config  
  6. drwxrwx--- system   cache             2011-01-01 20:00 cache  
  7. lrwxrwxrwx root     root              2011-01-01 20:00 udisk -> /mnt/udisk/usb  
  8. lrwxrwxrwx root     root              2011-01-01 20:00 flash -> /mnt/storage  
  9. lrwxrwxrwx root     root              2011-01-01 20:00 udiskint -> /mnt/udiskint  
  10. lrwxrwxrwx root     root              2011-01-01 20:00 sdcard -> /mnt/storage/sdcard  
  11. drwxr-xr-x root     root              2011-01-01 20:00 acct  
  12. drwxrwxr-x root     system            2011-01-01 20:00 mnt  
  13. lrwxrwxrwx root     root              2011-01-01 20:00 vendor -> /system/vendor  
  14. lrwxrwxrwx root     root              2011-01-01 20:00 d -> /sys/kernel/debug  
  15. lrwxrwxrwx root     root              2011-01-01 20:00 etc -> /system/etc  
  16. -rw-r--r-- root     root         1107 1970-01-01 08:00 ueventd.rk29board.rc  
  17. -rw-r--r-- root     root         3764 1970-01-01 08:00 ueventd.rc  
  18. -rw-r--r-- root     root            0 1970-01-01 08:00 ueventd.goldfish.rc  
  19. drwxr-xr-x root     root              2013-01-21 18:12 system  
  20. drwxr-xr-x root     root              1970-01-01 08:00 sys  
  21. drwxr-x--- root     root              1970-01-01 08:00 sbin  
  22. -rwxrwxrwx root     root       115047 1970-01-01 08:00 rk29xxnand_ko.ko  
  23. dr-xr-xr-x root     root              1970-01-01 08:00 proc  
  24. -rwxr-x--- root     root           45 1970-01-01 08:00 init_battery.sh  
  25. -rwxr-x--- root     root         4223 1970-01-01 08:00 init.rk29board.rc  
  26. -rwxr-x--- root     root        15898 1970-01-01 08:00 init.rc  
  27. -rwxr-x--- root     root         1677 1970-01-01 08:00 init.goldfish.rc  
  28. -rwxr-x--- root     root        94264 1970-01-01 08:00 init  
  29. -rw-r--r-- root     root          175 1970-01-01 08:00 default.prop  
  30. drwxrwx--x system   system            2011-01-01 20:52 data  
  31. drwx------ root     root              2013-01-04 17:57 root  
  32. drwxr-xr-x root     root              2011-01-01 20:00 dev  

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

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

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

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

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

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

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

root:空。

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

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

[plain]  view plain copy
  1. # cd /system/  
  2. # ls -l  
  3. drwxr-xr-x root     root              2013-01-04 19:57 fonts  
  4. drwxr-xr-x root     root              2013-01-04 19:34 framework  
  5. drwxr-xr-x root     root              2011-01-01 20:25 etc  
  6. -rw-r--r-- root     root         2038 2013-01-21 18:11 build.prop  
  7. drwxr-xr-x root     shell             2013-01-06 18:29 bin  
  8. drwxr-xr-x root     shell             2013-01-04 19:57 xbin  
  9. drwxr-xr-x root     root              2012-12-31 11:05 lib  
  10. drwxr-xr-x root     root              2013-01-04 19:57 media  
  11. drwx------ root     root              2013-01-21 18:12 lost+found  
  12. drwxr-xr-x root     root              2013-01-04 19:57 usr  
  13. drwxr-xr-x root     root              2013-01-17 17:39 app  
  14. drwxr-xr-x root     root              2013-01-04 19:57 tts  
  15.   

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 plain copy
  1. drwxr-xr-x root     root              2013-01-04 19:57 fonts  
  2. drwxr-xr-x root     root              2013-01-04 19:34 framework  
  3. drwxr-xr-x root     root              2011-01-01 20:25 etc  
  4. -rw-r--r-- root     root         2038 2013-01-21 18:11 build.prop  
  5. drwxr-xr-x root     shell             2013-01-06 18:29 bin  
  6. drwxr-xr-x root     shell             2013-01-04 19:57 xbin  
  7. drwxr-xr-x root     root              2012-12-31 11:05 lib  
  8. drwxr-xr-x root     root              2013-01-04 19:57 media  
  9. drwx------ root     root              2013-01-21 18:12 lost+found  
  10. drwxr-xr-x root     root              2013-01-04 19:57 usr  
  11. drwxr-xr-x root     root              2013-01-17 17:39 app  
  12. drwxr-xr-x root     root              2013-01-04 19:57 tts  

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,避免系统被无意破坏。

其它:

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

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

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

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

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

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. android文件下载
  4. Android综合小练习Fragment,解析,Handler,ViewPager
  5. android实现好看的自定义提示框
  6. Android(安卓)打开文件管理器 获取文件的真实路径
  7. android fragment学习5--fragment扩展 TabLayout非自定义
  8. android SD卡文件变化监控
  9. Android启动时启动Activity 的定义的位置

随机推荐

  1. Android获取并显示图片
  2. Android性能优化之路(二)
  3. 增加改查――android数据库篇二
  4. Android(安卓)CPU 架构详解
  5. ios及android两个平台下x264编译脚本
  6. Android异步操作 AsyncTask
  7. 【Android】获取本机电话号码
  8. android 数据库创建在SD(TF)卡中
  9. 荐 android 如何打包自定义控件(转)
  10. Android常用加密手段之MD5加密(字符串加密