• 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

    暂时文件








  • 相关阅读:
    2. Redis哨兵、复制、集群的设计原理与区别
    1. 详解Redis的存储类型、集群架构、以及应用场景
    博客园主题优化
    【Java基础】Java面试题精选
    【Java集合】——集合类分析总结
    新零售供应链的三大闭环
    Comparable和Comparator比较实现排序 场景分析
    Java基础-枚举类
    Java基础-泛型
    微服务架构~BFF和网关
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5178967.html
Copyright © 2020-2023  润新知