浅析Android系统架构及内核

Android之内核学习笔记 0、Android系统启动 《Android系统启动流程 -- bootloader》 《The Android boot process from power on》 《Android 启动过程介绍》 《Android培训班(86)内核运行之前的引导程序》 这是一系列文章 《Android 分区挂载》 1、init 《深入理解android 卷1》 第3章 深入理解in 阅读详情

Android是Google公司开发的基于Linux平台的开源手机操作系统,它包括操作系统、中间件、用户界面和应用程序,而且不存在任何以往阻碍移动产业创新的专利权障碍,并由Google公司于2007年11月5日正式发布。同时,Google公司组建了一个开放手机联盟,这个联盟由中国移动、摩托罗拉、高通、宏达电和T-Mobile等在内的全球30多家技术和无线应用的领军企业组成,Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统;可预见地,生产和使用基于Android系统的嵌入式手持移动设备将是未来的发展趋势,对相应软件的需求量也将日趋增长,因此对Android系统内部作一个完整和深入的分析,对基于Android平台的软件移植和开发是很有益处的。

1 Android系统平台架构

对操作系统而言,必须做到设计合理、层次分明,同时还需考虑整个系统的结构要聚耦适当,Android系统是基于linux内核的,因此还必须具备开源的特性,以符合开源人员共同工作。

从系统的组成要件来讲,Android平台架构包括硬件设备、板级支持包、驱动程序、操作系统内核、程序运行库,运行框架,应用程序等,它们的有机结合和协同工作共同完成了整个系统的正常运行和对事务的处理。

依据Google开源资料可知,整个系统由Linux内核、程序库、Android Runtime、应用程序框架和应用程序等5部分组成,,系统架构如图1所示。

Android系统平台架构

参照图1,由上而下对组成系统各部分的主要组件作以下描述。

1.1 Linux内核

Android基于Linux 2.6内核,但并非完全照搬内核,而是对内核作了部分增删和修改,在Linux 2.6内核的基础上,Android核心系统实现了安全性、内存管理、进程管理、网络协议栈和驱动模型等功能,Linux内核也同时作为硬件和软件栈之间的抽象层。

①硬件驱动程序:完成与各种硬件的通信,Linux内核提供了大部分设备的驱动程序,如显示屏,摄像

头,内存,键盘,无线网络,音频设备,电源等组件。

②系统内存管理:对所有可用的内存进行统一编码管理,定义一整套内存定位,使用与回收的策略。

③系统进程管理:内核管理进程的创建与销毁,管理进程间的通信,以及采取必要的措施避免死锁等内容。

④网络管理系统:无线网络设备工作原理,内核掌控如何读取网络设备中的缓存数据。

1.2 程序库

程序库是指可供使用的各种标准程序、子程序、文件以及它们的目录等信息的有序集合,Android包含一些C/C++库,Android系统中不同的组件通过应用程序框架可以使用这些库,以下是一些核心库:

Surface Manager:管理显示子系统,并且为多个应用程序提供2D和3D图层的无缝融合;

Media Framework:基于OpenCORE的多媒体框架,支持多种常用的音频、视频格式文件的回放和录制,同时支持静态图像文件。

SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

OpenGL ES:3D图形库,用于3D图形渲染,该库可以使用3D硬件加速。

FreeType:位图(Bitmap)和矢量(Vector)字体显示。

WebKit:支持Android浏览器和一个可嵌入的Web视图。

SGL:2D图形库,用于2D图形渲染。

LibC:一个从BSD继承的标准C系统函数库,它是专门为基于嵌入式Linux设备定制的。

1.3 Android运行库(Android Runtime)

Android运行库包括两部分:一是核心库,二是自身的虚拟机。

核心库提供Java编程语言核心库的大多数功能。Dalvik虚拟机是Google专为Android开发的,比SunJava虚拟机的效率更高,功能也更为复杂,以更好的支撑Android平台,并拥有独立的版权。每一个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例, Dalvik虚拟机执行.dex的可执行文件,该格式文件针对小内存的使用进行了优化,同时虚拟机是基于寄存器实现的,所有的类由Java编译器编译,然后通过SDK中的相应工具转化成.dex格式,最后由虚拟机执行。

1.4 应用程序框架

应用程序框架是指定义了一个应用程序运行所必须的全部功能组件,开发者也可以访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块,并且任何其他的应用程序都可以使用其所发布的功能块(应该遵循框架的安全性限制)。同样,该应用程序的重用机制也使用户可以方便地替换程序组件。

隐藏在每个应用后面的是一系列的服务和系统,其中包括:

活动管理器(Activity Manager):用来管理应用程序生命周期,并且提供常用的导航回退功能。

丰富而又可扩展的视图(Views):可以用来构建应用程序,它包括列表(Lists)、网格(Grids)、文本框

(Text Boxes)、按钮(Buttons),甚至包括可嵌入的Web浏览器。

内容提供器(Content Providers):使得应用程序可以访问另一个应用程序的数据,或者可以共享它们自己的数据。

资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形和布局文件(Layout

Files)。

通知管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息。

Android程序框架体显了“统一”与“兼容”的原则,其优势归纳为:

①任何一个应用程序都可以发布它的功能块。

②所有的应用程序在Android平台上都是平等的。

③所有的应用程序与资源都被按类别进行分别管理。

④所有程序各司其职。

1.5 应用程序

Android系统发布时,会同一系列核心应用程序和常用程序一起发布,如常用的手机功能程序,包括语音电话、通讯录、短信收发、照相、话机设置等;数据应用程序,包括邮件工具,日程表,浏览器,地图导航等,以及Android Market上的各种应用程序;所有的应用程序都是使用Java语言编写。

2 Android内核

Android内核基于Linux2.6内核作了部分修改和增删,是一个增强内核版本,除了修改部分Bug外,它还提供了用于支持Android平台的设备驱动,与标准的Linux内核比较、分析可知其内核的全貌和基本结构,下面对基于Android修改的核心驱动作初步阐述:

2.1 系统进程管理

Android平台的进程间通讯基于Binder机制实现,它提供了一种进程间通信的方法,即一个进程可以以类似远程过程调用的形式调用另一个进程所提供的功能,然后带着执行的结果返回。Android Binder是基于Service与Client的,有一个ServiceManager的守护进程管理着系统的各个服务,它负责监听是否有其他程序向其发送请求,如果有请求就响应,每个服务都要在ServiceManager中注册,而请求服务的客户端去ServiceManager请求服务。

2.2 内存管理

低内存管理器(Low Memory Killer):相对于Linux标准OOM(Out Of Memory)机制更加灵活,它可以根据需要杀死进程来释放需要的内存。匿名共享内存(ashmem):为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。Android PMEM(Physical):PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上。

2.3 文件系统管理

Android平台采用Yaffs2作为MTD nand flash文件系统,Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比,Yaffs2使用更小的内存来保存它的运行状态,因此它占用内存小;Yaffs2的垃圾回收非常简单而且快速,因此能达到更好的性能;Yaffs2在大容量的NAND Flash上性能表现尤为明显,非常适合大容量的Flash存储。

2.4 时钟管理

Android Alarm,提供了一个定时器用于把设备从睡眠状态唤醒,同时它也提供了一个即使在设备睡眠时也会运行的时钟基准,Android timed device,提供了对设备进行定时控制功能,目前支持vibrator和LED设备。

2.5 电源管理

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

2.6 USB管理

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

2.7 系统日志管理

Android Logger,一个轻量级的日志设备,用于抓取Android系统的各种日志。

3 结束语

Android是一款开放的、基于Linux内核的嵌入式操作系统,将被广泛地应用到各种移动手持设备中,充分发挥其强大的网络功能;由于开源的特性,Android不区分核心应用程序和第三方应用程序,并可自由的吸纳新出现的尖端技术;同时,Android提供广泛而实用的函数库和工具,利用它们可以开发丰富的应用程序。由此可以展望,基于开放手机联盟(Open Handset Alliance)平台强大的技术实力和市场推广,Android系统在移动嵌入式领域的应用将会非常广阔。
AD20/Altium designer——如何进行DRC检查、冲突的错误如何改正 对于一个画完的PCB,我们常常需要进行DRC检查,确保板子的电器连接及制作工艺在设定规则的范围内,本篇将介绍如何对PCB进行后期DRC检查处理,确保电路板出现不必要错误。 1.DRC检查入口 2.DRC设置 3.错误分析 对于错误的内容,依据个人实际情况不同,其出现的原因都是因为与设计规则中的设定标准冲突,这里按遇到的错误进行修改讲解,其他错误同理。 4.常见错误分析及解决方法 (1) 解决方法:将未连接网络连接(... 阅读详情

相关推荐

【AI编程】用AI开发STM32软件(1):环境配置+AI编写LED闪烁

现在AI编程这么火,不拿来开发嵌软也太可惜了。笔者最近刚好有个2学分的实践课,要自己做项目,这不,机会就来了。笔者特意记录下来其过程,以供大家学习和参考。使用:VSCode+Copilot+EIDE+STM32CubeMX,单片机用最经典的stm32f103c8t6+STLink。

qq_23220445的博客 4574

Android系统架构浅析-「Android取经之路」

本文主要介绍Android的系统架构,Android使用linux内核(Marco kernel),但是Android的架构又与Linux系统有所不同,因此在介绍Android系统架构之前,我们先一起来了解一下Linux系统的架构。 Linux系统架构 Linux架构如下图所示: Linux系统架构 Computer Resources:硬件资源 Kernel:内核 Shell:shell是系...

Andriodqin的博客 591

深入剖析:功率放大电路设计精髓——从理论到实践

输入信号首先被调制(通常是PWM脉宽调制)成高频开关信号,驱动功率开关管(MOSFET),再通过LC低通滤波器滤除高频分量,还原出放大的音频信号。在靠近功放板电源引脚处放置足够容量的电解电容(如100uF - 1000uF)和高频瓷片电容(如0.1uF)并联进行电源去耦,抑制低频和高频干扰,防止低频振荡(Motorboating)和高频自激。,堪称电子世界里的“能量转换器”。当输入信号在零附近(即两个器件切换导通的区域)时,由于器件的开启电压(Vbe或Vgs)不为零,输出波形会出现明显的衔接不流畅的失真。

Zihan2558的博客 1698

Android系统架构-[Android取经之路]

[Android取经之路] 系列文章: 《系统启动篇》 Android系统架构 Android是怎么启动的 Android 10.0系统启动之init进程 Android10.0系统启动之Zygote进程 Android 10.0 系统启动之SystemServer进程 Android 10.0 系统服务之ActivityMnagerService Android10.0系统启动之Launcher(桌面)启动流程 Android10.0应用进程创建过程以及Zygote的fork流程 Android 10

纸上得来终觉浅,绝知此事要躬行 5001

海思MIPI屏调试实战:从参数计算到点亮屏幕的完整指南

本文提供了一份海思平台MIPI屏幕调试的完整实战指南。文章以Hi3516DV300调试800x1280分辨率屏幕为例,详细讲解了从参数计算、配置文件修改到最终点亮屏幕的全流程,并分享了常见问题排查与进阶优化技巧,旨在帮助嵌入式开发者高效解决MIPI屏调试难题。

weixin_29190573的博客 740

Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南)

本文详细介绍了在Windows环境下为QT5.15.2安装MQTT模块的完整流程,包括环境准备、源码获取、编译配置及项目集成等关键步骤。特别针对分支选择、依赖项处理和常见错误提供了实用解决方案,帮助开发者高效完成MQTT模块的安装与调试,适用于物联网开发场景。

weixin_29224589的博客 466

shell android 多框架编译ffmpeg_Android系统架构浅析-「Android取经之路」

本文主要介绍Android的系统架构,Android使用linux内核(Marco kernel),但是Android的架构又与Linux系统有所不同,因此在介绍Android系统架构之前,我们先一起来了解一下Linux系统的架构。Linux系统架构Linux架构如下图所示: Linux系统架构Computer Resources:硬件资源 Kernel:内核Shell:shell是系统的用户界...

weixin_39765209的博客 146

YOLO模型使用jupyterlab的方式进行预测/推理(示例)

首先相信很多使用过python的人都或多或少地了解过这个应用。是一个开源Web应用程序,可让用户创建和共享包含实时代码、公式、可视化和叙述文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、等等。而Jupyter Lab则是Jupyter的下一代笔记本界面。是一个基于Web的交互式开发环境,用于Jupyter notebook、代码和数据。非常灵活,可支持数据科学、科学计算和机器学习领域的广泛工作。是可扩展和模块化的,其可编写插件来添加新组件并与现有组件相集成。

ocean00008899的博客 902

系统架构_浅析安卓系统架构

安卓是由美国谷歌公司开发的移动操作系统,它是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要应用在手机以及平板电脑上。安卓最早并非属于谷歌公司,而是在2005年谷歌收购了Android公司,原班人马一并进入google公司,这个时候安卓这款操作系统才真正开始起航。我们知道安卓的体系架构并非是自己独立的,它是基于linux内核的基础上进行开发的。安卓大致分为四层最底层是与...

weixin_42129412的博客 642

Cadence元件库介绍

Cadence安装完之后,在安装目录下,会有默认自带的一些常用元件库。例如,我的Candece安装目录为: D:\Cadence\Cadence_SPB_17.2-2016 元件库所在目录为: D:\Cadence\Cadence_SPB_17.2-2016\tools\capture\library 各个元件库对应的内容如下: AMPLIFIER.OLB 共 182 个零件,存放模拟放大器 IC,如 CA3280,TL027C,EL4093 等。 ARITHMETIC.OLB 共 182 个零件,存放

年少时的棉花糖 1万+

幸狐RV1106开发板运行Yolo8示例

rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,目前对 Luckfox Pico 所使用的 RV1103/RV1106 有限支持,最新的示例支持 mobilenet 模型部署和 yolo 模型部署,本章以部署 yolov8修改版本为例介绍 rknn_model_zoo 示例的使用。:可选项,用于指定 RKNN 模型的保存路径,默认保存在 ONNX 模型同一目录下,名称为 ‘yolov8.rknn’例如“rv1106”。

qq_42730522的博客 3225

Android系统架构浅析

qq601517284的博客 178

SAP 批量修改 工艺路线 和 BOM

1、在运维的过程中经常会遇到用户需要批量更改组件,或者是批量更改数量,还是组件里面的一些标识,当处理这些批量数据处理的业务时,BOM的批量更改一个想到的就是CS20,但是CS20当BOM需要替换的时候就不是很适用。当前工作区域:选择 SAP_ITEM 对BOM行项目进行变更,工艺路线也是可以批量更改的,根据实际的业务进行选择,我这里选择的就是BOM的组件变更。5、本博客将使用新的一种方式进行BOM的批量变更,标准的事务代码:CEWB对BOM进行批量更改。3、使用LSMW的方式进行BOM的批量更改。

我小时候很黑的博客 4100

Android 系统启动流程浅析

上面的zygote service配置中,执行 /system/bin/app_process64命令之后,程序就会执行到/frameworks/base/cmds/app_process/,该目录下面就是可执行文件,该路径下有app_main.cpp,最终执行的就是app_main.cpp的main方法,在AndroidRuntime的start方法中通过jni启动ZygoteInit。当内核启动完成之后,启动init进程,作为第一个系统进程,init进程有内核态转换为用户态。

yangxiucheng520的博客 1299

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android Framework启动流程浅析

前言 对于Android开发,干上几年后,都要进阶,或者直接转行了。如果你还在干Android,想要进阶 对Framework的了解是必不可少的过程,下面就开始进入今天的主题吧。 我们知道,对于任何程序语言而言,入口一般都是main函数。 那Android的程序入口在哪呢? 他的main函数是怎么启动起来的呢? 可能熟悉Android的同学,知道一个应用程序的入口在ActivityThread中,...

dingdegao的博客 1854

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

linux与安卓系统目录,浅析Android系统的架构以及程序项目的目录结构

Android框架结构直接上图:由上图,我们可以看出Android系统架构由5部分组成,分别是:Linux Kernel(linux内核)、Android Runtime(运行时环境)、Libraries(类库)、Application Framework(应用框架)、Applications(应用)。1.1、Linux KernelAndroid基于Linux 2.6提供核心系统服务,例如:安全...

weixin_35714577的博客 471

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android系统架构分析

一、Android系统构架 Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。 2011-4-23 12:57 上传 下载附件 (73.11 KB) 下面是简单翻译的版本: 2011-4-23 12:57 上传 下载附件 (73.28 KB) Linux内核(

熊尧的专栏 1047

Android开发平台下多媒体开发系统架构

在移动互联网科技高度发展的今天,多媒体播放技术是唯一能与移动电话相竞争的现代技术。当今的移动智能设备不再是单纯的消息.电话设备,而已经成为了小型的智能通信设备,或者说,现在的移动智能设备已经是携带通信功能的小型计算机。而在设备的众多功能中,多媒体技术无疑是其中最为耀眼的一个,为你讲解Android平台下的多媒体开发技术。  Android是一种以Linux为基础的开源码操作系统,Androi

ccnanxi的博客 1205

android浅析1---android系统构架

1) 应用程序(Application) 所有的应用程序都是使用JAVA语言编写的 2) 应用程序框架(Application framework) 应用程序的架构设计简化了组件的重用 隐藏在每个应用后面的是一系列的服务和系统, 其中包括;  a.丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),

QinQin_92的专栏 1173

android 系统架构

Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。 下面是简单翻译的版本: Linux内核(Linux Kernel) Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。 Linux 内核是硬件和软件层之间的抽象层。 中间件 ...

weixin_34413065的博客 91

Android 内核/框架结构学习笔记

> Android内核 Android内核学习笔记- http://blog.youkuaiyun.com/imyfriend/article/details/9946821 0、Android系统启动 《Android系统启动流程 -- bootloader》 《The Android boot process from power on》 《Android 启动过程介绍》 《Androi...

ShareUs的专栏 2672
上一篇: autotool Makefile
下一篇: Android对Linux内核的改动你知道多少?
KerNEL.AC.CN
博客等级 码龄15年 100粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值