首页 > 代码库 > Android——4.2.2 文件系统目录分析

Android——4.2.2 文件系统目录分析

    最近公司要整android内部培训,分配给我写个培训文档,这里记录如下:



                                                                              撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/40897703


导读:


这里补充下android运行时的文件系统结构,

同样,资料网上有很多,只是简单介绍我常涉及到的,个人观点,仅供参考~

各个厂商平台可能会有出入.这里单以我这边mstar的平台

以“/”代表文件系统的根目录.



                                                                                   ——蒋斌jscese

                                                                                           2014/11/7





文件系统生成

目前android编译出来的镜像基本都是ext4格式,可用file命令查看,不再是之前的yaffs2,因为之前用的是nand,现在的主流已是emmc,但是在制作android文件系统时挂载的类型就五花八门了,各种都有.

可在系统启动时/system/core/init/init.c中的main中查看mount类型.

对文件系统的创建语句基本都写在/system/core/rootdir/init.rc,这个文件语法可参考/system/core/init/readme.txt,交由init.c负责解析执行.其中init.rc还会加载平台rc执行一些自己的操作:import/init.${ro.hardware}.rc一般的.rc都放在/”目录下.

关于init.rc中的语句怎么被执行,这里不多描述,可另行参考init机制,可以看到里面很多对分区以及文件的shell命令,比如mountmkdirsymlinkchmod...

mount上去的文件类型大体有这几种:

tmpfs devpts proc sysfsrootfs yaffs2 cgroup ext4 debugfs

这些文件系统类型可去维基百科查,每一种都有自己的特性.可在shell终端输入mount查看挂载情况.

我们通过shell终端看到的文件系统目录是最终制作完成的产物,有的文件目录下是挂载的分区,如果修改就是实际修改的nand/emmc上面的内容,有的可能只是制作过程中从分区某个地方copy放在那个目录下的,你删除了,下次重启依旧还会存在,这个就要根据具体情况而判断了.

这个的生成过程还是很繁杂的,这里就不一一述说.下面介绍下常用到的目录文件.

详细可参考:Android——启动过程详解






/cache

缓冲区目录,用于存放临时文件,目前我这边用到的地方就是存放从网络下载OTA包用于更新.





/data

顾名思义,主要用于存放数据的地方,往下的目录都是存放app的相关分类数据.

其中/data/app目录下存放的就是用户安装的apk文件.

/data/data目录下存放的是系统中所有app的数据文件,以apk包名区分,其中会有提交的数据库以及xml数据文件.









/dev

linux设备文件夹,存放设备节点文件,挂载的是tmpfs格式文件系统,断电后数据将会消失.android系统上的设备都会在这个目录底下创建设备文件,

秉承linux的理念:一切设备皆文件.并且都是可以通过文件对设备进行操控管理.

其中/dev/block下列出所有emmc存储设备的所有block









/etc

软连接指向/system/etc,这个目录一般用于存放系统中的各种配置文件,没什么好说的.






/mnt

外部挂载点目录,作为外部存储设备的挂载点路径,往下的分支常用的包括/mnt/sdcardandroid默认SD卡挂载点.其它的不同平台可能会有大的差异,比如挂载usb设备的挂载点,我这边挂载在/mnt/usb







/proc

一个虚拟的文件系统,由kernel提供,不是实际的存储空间,存在kenel管理的内存中,应用层可通过/proc下的文件动态获取kernel中系统进程(process)的运行信息.也可通过/proc/sys目录下可写文件修改kernel运行状态,实现与kernel的交互.

init.c中挂载到/proc文件上.

其中比较常用的获取文件:/proc/cpuinfo/proc/meminfo /proc/mounts /proc/version ...

顾名思义.可以在shell使用cat*查看

设置/proc/sys/kernel状态值,init.rc中就有设置,可以参考,大部分设置在/proc/sys/kernel

shell下可使用echo* > * 重定向设置状态值.





/sbin

存放root用户可执行文件的目录,一般存在这下面的就是adbd





/sdcard

软连接上面说到的/mnt/sdcardSD卡的挂载点






/sys

类似/proc,也是虚拟的文件系统.

区别在于这个文件系统提供的是关乎kernel中的设备驱动.

/sys/devices下就是已经注册到总线上的所有物理设备.

/sys/dev下面是blockchar设备的节点文件,链接到真实设备.

/sys/module这里可以看已经insmodkerneldevice driver

/proc下一样可使用cat查看

/sys/kernel下的是可写的设备值,同/proc一样操作写入控制.






/system

这个是android系统最重要的文件目录了,可以在rc中看到挂载的是system分区,也就是源码编译出来的system.img镜像,主要的运行机制也就全在这个目录下了,默认是挂载成ext4只读.

/system/app系统预置的apk存放路径,只有root才有写权限

/sysem/bin这个下面全部是android系统可执行文件

/system/build.prop编译过程中收集的各种属性

/system/etc上面有提到,配置文件

/system/fonts字库

/system/framework下面全是jar也就是源码中frameworks编译出来的系统框架,核心所在

/system/lib存放几乎所有编译出来的动态库(.so)

/system/vendor存放一些厂商的东西一般有applib之类的

这几个应该算是最重要的,其它的目录不一一列出.

如果想要修改/system下面的内容,可在shell终端输入:mount-o remount rw /system

重挂载为可读写.



/tmp

临时文件








Android——4.2.2 文件系统目录分析