们将会针对Android根文件系统的相关目录结构等方面的问题进行一个详细的讲解,以帮助大家快速掌握这方面的知识。
我们曾经在一篇文章中为大家详细介绍过Android文件系的一些基本概念,相信大家已经可以充分了解这一知识点了。在这里大家将会继续对Android根文件系统的基本概念进行一个初步的掌握。
经过这几天在网上搜索关于Android根文件系统的相关资料,发现已经有很多高手 分析了Android的文件系统,这些高手多从不同的方面分析了其文件系统的结构和运行原理。我这里就写一下自己的理解。
首先是Android根文件系统目录的结构:
sqlite_stmt_journals :一个根目录下的tmpfs文件系统,用于存放临时文件数据。 cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。 sdcard :是SD卡 中的FAT32文件系统挂载的目录 etc :指向 /system/etc ,众所周知的配置文件存放目录 system :是Android根文件系统中一个很重要的目录,系统中的大部分东西都在这里了,以下是目录结构:
sys :用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值 sbin : 只放了一个用于调试的adbd程序 。 proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。 data :存放用户安装的软件 以及各种数据。 root :什么都没有。 dev :不用多说了,设备节点文件的存放地。 以上就是对Android根文件系统的相关介绍。 ==================================================================== Android文件系统深入剖析 Android文件系统具有什么样的结构?我们如何才能将这一文件系统分离出来?又能以何种方式挂载文件系统呢?这些问题都会在文中找到具体的解决答案。
用过Linux的朋友可能对开源的系统有一个非常好的印象。那么在日益成熟的手机操作系统中,有没有一款像Linux一样的开源系统呢?谷歌公司就退出了一款基于Linux平台的Android 操作系统来满足人们的需求。在这里大家可以先来了解一下Android文件系统的相关内容。 1、Android文件系统的结构 Android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。 2、分离Android文件系统出来 system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:
输出:
Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把 ramdisk.img解压出来: 将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
然后新建一个文件夹,叫ramdisk吧,进入,输入命令
这下,你就能看见并操作ramdisk里面的内容了。
然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和 ramdisk/userdata下。这样就得到一个文件系统了。 3、使用网络文件系统方式挂载Android文件系统 因此,我们需要建立/nfsroot目录,再建立/nfsroot/Androidfs目录,把刚才的Android文件系统改名为Androidfs,并链接到/nfsroot/Androidfs 4、Android文件系统内核引导文件系统 Android内核挂载/nfsroot/Androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是: 1)设置一些环境变量 2)创建system、sdcard、data、cache等目录 3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals 4)设置一些文件的用户群组、权限 5)设置一些线程参数 6)设置TCP缓存大小 ======================================================================================================== Android核心模块内容概述 我们在这里为大家总结的Android核心模块都包括有:操作系统层(OS);各种库(Libraries)和Android 运行环境(RunTime);应用程序框架以及应用程序等等。
51CTO曾经为大家详细介绍过一些Android操作系统中构造快的相关介绍。那么在这里我们会继续为大家介绍一下这方面的相关内容。在这篇文章中将会具体针对Android核心模块的相关概念进行详细介绍。
Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。 根据Android的软件框图,其Android核心模块结构自下而上分为以下几个层次: 第一、操作系统层(OS) 第二、各种库(Libraries)和Android 运行环境(RunTime) 第三、应用程序框架(Application Framework) 第四、应用程序(Application) 以下分别介绍Andoid各个层次的软件的重点及其相关技术: ● Android核心模块之操作系统层(OS) Android使用Linux2.6作为操作系统,Linux2.6是一种标准的技术,Linux也是一个开放的操作系统。Android对操作系统的使用包括核心和驱动程序两部分,Android的Linux核心为标准的Linux2.6内核,Android更多的是需要一些与移动设备相关的驱动程序。主要的驱动如下所示: 显示驱动(Display Driver):常用基于Linux的帧缓冲(Frame Buffer)驱动。 Flash内存驱动(Flash Memory Driver) 照相机驱动(Camera Driver):常用基于Linux的v4l(Video for )驱动。 音频驱动(Audio Driver):常用基于ALSA(Advanced Linux Sound Architecture,高级Linux声音体系)驱动。 WiFi驱动(Camera Driver):基于IEEE 802.11标准的驱动程序 键盘驱动(KeyBoard Driver) 蓝牙驱动(Bluetooth Driver) Binder IPC驱动: Andoid一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能。 Power Management(能源管理) ● Android核心模块之各种库(Libraries)和Android 运行环境(RunTime) 本层次对应一般嵌入式系统,相当于中间件层次。Android的本层次分成两个部分一个是各种库,另一个是Android 运行环境。本层的内容 大多是使用C++实现的。 在其中,各种库包括: ▅ C库 :C语言的标准库,这也是系统中一个最为底层的库,C库是通过Linux的系统调用来实现。▅ 多媒体框架(MediaFrameword):这部分内容是Android多媒体的核心部分,基于PacketVideo(即PV)的OpenCORE,从功能上本库一共分为两大部分,一个部分是音频、视频的回放(PlayBack),另一部分是则是音视频的纪录(Recorder)。 ▅ SGL:2D图像引擎。 ▅ SSL:即Secure Socket Layer位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。 ▅ OpenGL ES 1.0 :本部分提供了对3D的支持。 ▅ 界面管理工具(Surface Management):本部分提供了对管理显示子系统等功能。 ▅ SQLite:一个通用的嵌入式数据库 ▅ WebKit:网络浏览器的核心 ▅ FreeType:位图和矢量字体的功能。 Android 的各种库一般是以系统中间件的形式提供的,它们均有的一个显著特点就是与移动设备的平台的应用密切相关。 Android 运行环境主要指的虚拟机技术——Dalvik。Dalvik虚拟机和一般JAVA虚拟机(Java VM)不同,它执行的不是JAVA标准的字节码(bytecode )而是Dalvik可执行格式(.dex)中执行文件。在执行的过程中,每一个应用程序即一个进程(Linux的一个Process)。 二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。 ● Android核心模块之应用程序框架(Application Framework) Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本层次提供的首先包含了UI程序中所需要的各种控件: 例如: Views (视图组件)包括 lists(列表), grids(栅格), text boxes(文本框), buttons(按钮)等。甚至一个嵌入式的Web浏览器。 一个Andoid的应用程序可以利用应用程序框架中的以下几个部分: Activity (活动) Broadcast Intent Receiver (广播意图接收者) Service (服务) Content Provider (内容提供者) ● Android核心模块之应用程序(Application) Android的应用程序主要是用户界面(User Interface)方面的,通常以JAVA程序编写,其中还可以包含各种资源文件(放置在res目录中)JAVA程序及相关资源经过编译后,将生成一个APK包。Android本身提供了主屏幕(Home),联系人(Contact),电话(Phone),浏览器(Browers)等众多的核心应用。同时应用程序的开发者还可以使用应用程序框架层的API实现自己的程序。这也是Android开源的巨大潜力的体现 ===================================================================================================================== Android系统架构基本模式解析 Android系统架构总共被分为四层,在这里大家就可以通过介绍对这四个层次进行一个深入的解读,以加深大家对这一系统的认识。
如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱。不过,在智能手机占据主要地位的今天,挑选手机的主要因素就是挑选一款性能高的手机操作系统,Android就是其中的一个必然选择。Android系统架构和其操作系统一样,采用了分层的架构。Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
Android系统架构之应用程序 Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。 Android系统架构之应用程序框架 开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 隐藏在每个应用后面的是一系列的服务和系统, 其中包括; * 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。 * 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据 * 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。 * 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 * 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 有关更多的细节和怎样从头写一个应用程序,请参考 如何编写一个 Android 应用程序. Android系统架构之系统运行库 1)程序库 Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库: * 系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。 * 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。 * Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。 * LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。 * SGL - 底层的2D图形引擎 * 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。 * FreeType -位图(bitmap)和矢量(vector)字体显示。 * SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。 2)Android 运行库 Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。 每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。 Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。 Android系统架构之Linux 内核 Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。 |