android系统架构的前世今生,超强Android进阶路线知识图谱

news/2024/11/24 6:28:28/

4.Android专有的驱动程序

除了上面这些不同点之外,最重要的是,为了突出android特性,支持android设备,Android还对Linux设备驱动进行了增强,主要如下所示。

1)Android Binder 基于OpenBinder框架的一个驱动,用于提供 Android平台的进程间通信(InterProcess

Communication,IPC)功能。源代码位于drivers/staging/android/binder.c。

2)Android电源管理(PM) 一个基于标准Linux电源管理系统的轻量级Android电源管理驱动,针对嵌入式设备做

了很多优化。源代码位于:

kernel/power/earlysuspend.c

kernel/power/consoleearlysuspend.c

kernel/power/fbearlysuspend.c

kernel/power/wakelock.c

kernel/power/userwakelock.c

3)低内存管理器(Low Memory Killer) 比Linux的标准的OOM(Out Of Memory)机制更加灵活,它可以根据需要

杀死进程以释放需要的内存。源代码位于 drivers/staging/ android/lowmemorykiller.c。

4)匿名共享内存(Ashmem) 为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。源代码位于

mm/ashmem.c。

5)Android PMEM(Physical) PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物

理内存上。源代码位于drivers/misc/pmem.c。

6)Android Logger 一个轻量级的日志设备,用于抓取Android系统的各种日志。源代码位于

drivers/staging/android/logger.c。

7)Android Alarm 提供了一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即使在设备睡眠时也会

运行的时钟基准。源代码位于drivers/rtc/alarm.c。

8)USB Gadget驱动 一个基于标准 Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框

架的。源代码位于drivers/usb/gadget/。

9)Android Ram Console 为了提供调试功能,Android允许将调试日志信息写入一个被称为RAM Console的设备

里,它是一个基于RAM的Buffer。源代码位于drivers/staging/android / ram_console.c。

10)Android timed device 提供了对设备进行定时控制的功能,目前支持vibrator和LED设备。源代码位于

drivers/staging/android /timed_output.c(timed_gpio.c)。

11)Yaffs2 文件系统 Android采用Yaffs2作为MTD nand flash文件系统,源代码位于fs/yaffs2/目录下。

Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比,

Yaffs2能使用更小的内存来保存其运行状态,因此它占用内存小。Yaffs2的垃圾回收非常简单而且快速,因此能表

现出更好的性能。Yaffs2在大容量的NAND Flash上的性能表现尤为突出,非常适合大容量的Flash存储。

最新的Android系统分为五层六区(域):


![官方图](https://img-blog.csdnimg.cn/20190603160406434.jpg?x-oss-process=image/watermark

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

开源分享完整内容戳这里

,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjM3MjQ1,size_16,color_FFFFFF,t_70)

Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等;

硬件抽象层(android hardware abstraction layer):安卓驱动硬件的方式与Linux不尽相同。传统Linux的驱动完全存活于内核空间。Android则在内核外部增加了硬件抽象层(HAL, Hardware Abstraction Layer) ,把一部分驱动功能放到HAL层中。安卓为什么费尽麻烦增加一个HAL呢?为了保护源代码。Linux内核采用了GPL协议,所以硬件生产商想要支持Linux系统,必须遵照GPL协议公开硬件驱动的源代码。但这些源代码中包含有许多硬件的设计信息,牵涉到硬件生产商的核心利益。而增加了HAL层之后,硬件厂商就不需要开放所有的驱动代码了。

系统运行库层(libraries):这一层通过一些C/C++库(so库)来为Android系统提供了主要的特性支持。如SQLite库提供了数据库支持,OpenGL ES库提供了3D绘图支持,Webkit库提供了浏览器内核支持等;

应用框架层(application framework):这一层主要提供构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可通过使

用API来构建自己的应用程序;

应用层(applications):这一层主要用于手机应用的安装,如系统自带联系人、短信等程序,或是第三方应用程序

以上为五层五区,还有一个区域是存在于libraries层的Android运行时库(Android Runtime),它主要提供一些核心库,能够允许开发者使用Java语言来编写Android应用。另外Android运行时库中还包含了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程中,且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况作了优化处理。 每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例。为了支持多个虚拟机在同一设备上高效运行,dalvik被改写过。Dalvik虚拟机执行的是Dalvik格式的可执行文件(.dex)-该格式经过优化,以将内存好用降到最低。

Dalvik虚拟机 和代码编译


安卓的应用是由Java编写的,而包括HAL在内的Linux的库都是由C/C++编写的,这个落差由Dalvik虚拟机衔接的。当一个应用运行时,进程空间内将包含一个Dalvik虚拟机。Java程序编译为字节码文件,运行在Dalvik虚拟机中。根据Java代码中的要求,Dalvik通过JNI(Java Native Interface)调用底层的C/C++编写的功能。JNI是从Java中调用C/C++模块的接口。由于上层接口的标准化,字节码可以畅通无阻的跨平台运行。

Dalvik虚拟机内部是一个“虚拟”进程空间,有自己的栈和堆,管理代码的运行流程。如果这以“虚拟”进程空间不足,Dalvik内建的垃圾回收(garbage collection)机制会自动清空堆上不再使用的对象。自动的垃圾回收简化了程序员的工作,但速度较慢。手动内存管理效率高,但需要更多的编程,且容易犯错。

Android的4种文件类型Java,class,dex,apk

Class文件------Java编译后的目标文件

不像J2se,java编译成class就可以直接运行,android平台上class文件不能直接在android上运行。 由于Google

使用了自己的Dalvik来运行应用, 所以这里的class也肯定不能在AndroidDalvik的java环境中运行, android

的class文件实际上只是编译过程中的中间目标文件,需要链接成dex文件后才能在dalvik上运行

Dex文件-----Android平台上的可执行文件

Android虚拟机Dalvik支持的字节码文件格式Google在新发布的Android平台上使用了自己的Dalvik虚拟机

来定义, 这种虚拟机执行的并非Java字节码, 而是另一种字节码: dex格式的字节码。在编译Java代码之后,

通过Android平台上的工具可以将Java字节码转换成Dex字节码。虽然Google称Dalvik是为了移动设备定

做的,但是业界很多人认为这是为了规避向sun申请Javalicense。这个DalvikVM针对手机程式/CPU做过最

佳化,可以同时执行许多VM而不会占用太多Resource。


http://www.ppmy.cn/news/196440.html

相关文章

ABBYY FineReader 超强OCR识别软件 V15.0.0 特别版

ABBYY FineReader 一款可以从图片提取文字内容的软件,也叫做光学字符识别(OCR)。简单的说 abbyy finereader 是一款可以把图片上的文字扫描智能识别成文本文字,比如一整张扫描的的书本,或者拍照的很多文字,要重新排版或者放到其他…

RecyclerView的超强辅助Graywater——综合实操篇

关于Graywater的系列文章 RecyclerView的超强辅助Graywater——理论篇RecyclerView的超强辅助Graywater——基础实操篇RecyclerView的超强辅助Graywater——点击事件RecyclerView的超强辅助Graywater——综合实操篇 看到上一篇Graywater文章是11月8日写的,也是拖很…

华为鸿蒙拍照,华为首部鸿蒙手机P50来了!顶级拍照再升级,麒麟芯片或绝唱……...

最强拍照 全新鸿蒙,华为新旗舰要来了! 华为高管宣称,明年华为将发布基于鸿蒙系统的手机。此言一出,大家不禁把目光转向了华为明年的第一款旗舰智能手机P50。 高管的话显然在暗示 P50 系列或许会抛弃安卓系统转而拥抱鸿蒙 OS。尽管…

华为鸿蒙拍照,顶级拍照+全新鸿蒙双重BUFF加持,华为P50会有多强?

原标题:顶级拍照全新鸿蒙双重BUFF加持,华为P50会有多强? 作者:攒蘑菇的小提莫 最强拍照全新鸿蒙,华为新旗舰要来了! 华为高管宣称,明年华为将发布基于鸿蒙系统的手机。此言一出,大家…

android 小米拍照功能,iQOO和小米9到底拍照谁更强之iQOO手机拍照功能详细评测

iQOO和小米9到底拍照谁更强之iQOO手机拍照功能详细评测 2019-04-02 10:51:35 8点赞 13收藏 20评论 iQOO作为vivo子品牌一上市就以超强配置和超高性价比引爆市场,作为一款超高性价比手机拍照性能到底如何那,下面就来和大家聊聊iQOO的后置三摄。 iQOO后置竖…

练就超强记忆力,成为最强大脑【完结】

练就超强记忆力,成为最强大脑【完结】┼shidian8848 00发刊词:第0章 练就超强记忆力,让你学习工作更如意.mp3 00发刊词:第0章 练就超强记忆力,让你学习工作更如意.pdf 第01课:1.课前记忆测试:你…

Java超强面试题

Java程序员面试题集(1-50) 一、Java基础部分 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面…

win10 1050Ti 笔记本配置 TensorFlow-gpu 过程(多图超详细)

目录 写在前面 一、安装步骤 1. 安装Visual Studio 2015 社区版 2. 安装CUDA(重要) CUDA安装失败的解决方法 关于CUDA安装的说明 3. 安装Anaconda 4. 安装cuDNN 5. 安装TensorFlow-gpu 验证TensorFlow是否安装成功 6. Pycharm配置tensorflow …