近期公司要整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

暂时文件








更多相关文章

  1. Android(安卓)Studio(七):项目从Eclipse到Android(安卓)Studio迁
  2. Android(安卓)APK瘦身之Android(安卓)Studio Lint (代码审查)
  3. 【Android(安卓)应用开发】 Android(安卓)APK 反编译 混淆 反编
  4. Android(安卓)Studio(十一):代码混淆及打包apk
  5. 【Android】Android背景选择器selector用法汇总
  6. Android相关经验积累总结
  7. Android处理Bitmap的一些方法
  8. Android开机启动
  9. NPM 和webpack 的基础使用

随机推荐

  1. The Saygus VPhone V1 clears FCC, Will
  2. android中图片的拖拉和缩放
  3. Android(安卓)ListView的使用
  4. android save bitmap
  5. Android中Broadcast的Intent大全
  6. android driver for ubuntu 手机驱动
  7. android日历实现
  8. Android(安卓)之 Spinner用法介绍
  9. Android(安卓)TextView自带padding 10dp
  10. android > APK更新