Android4.2.2 文件系统目录分析

文件系统生成

目前 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 命令,比如 mount , mkdir , symlink , chmod...

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

tmpfs devpts proc sysfs rootfs 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/sdcard 为 android 默认 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/sdcard , SD 卡的挂载点

/sys

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

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

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

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

/sys/module 这里可以看已经 insmod 的 kerneldevice 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

临时文件

posted @ 2016-11-30 17:08  水火379  阅读(545)  评论(0)    收藏  举报