热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

临时文件









推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • Spring Batch中多线程配置及实现例子
    本文介绍了在Spring Batch中开启多线程的配置方法,包括设置线程数目和使用线程池。通过一个示例演示了如何实现多线程从数据库读取数据并输出。同时提到了在多线程情况下需要考虑Reader的线程安全问题,并提供了解决方法。 ... [详细]
author-avatar
超级放开祢旳掱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有