Android内核设计思想

本文详细介绍了Android系统的编译烧录过程,包括产品定制的步骤和原生系统编译。接着探讨了Android内核设计思想,涉及init进程、系统原理、应用原理等。在系统原理中,讲解了框架层的结构、C/C++库层、HAL层和内核层的角色。同时,文章详细阐述了Android应用的启动流程,包括线程模型、消息处理机制和进程间通信。此外,还讨论了关键服务如AMS、OpenGL ES、SurfaceFlinger和音频系统的工作原理。
摘要由CSDN通过智能技术生成

定制产品的编译和烧录

  1. 在device或vendor文件夹下创建公司命名的文件夹,并在该文件夹下新建各个产品文件夹,每个产品的文件就优先放在产品文件夹下(厂商–>产品)
  2. 在产品文件夹下新建一个vendorsetup.sh脚本,将产品添加到lunch选单中。
  3. 添加AndroidProducts.mk文件,该文件只是做一个转向的功能,每个产品的具体编译会有相应的mk文件
PRODUCT_MAKEFILES := \
	$(LOCAL_DIR)/aosp_toro.mk \
	$(LOCAL_DIR)/full_toro.mk
  1. 编写某产品专用的makefile文件
  2. 添加BoardConfig.mk文件,该文件用于填写目标架构、硬件设备属性、编译器的条件标志、分区布局、boot地址等一系列参数,可以将其他厂商的该文件复制过来进行简单的修改
  3. 添加Android.mk文件,该文件是Android系统下编译某个模块的标准makefile。因为一个产品可能由多个模块共同完成。
  4. 接下来就是原生系统的编译流程。。。

原生Android系统编译

  1. 执行envsetup.sh脚本。该脚本中定义了编译过程中各种函数实现,如lunch、m、mm等
  2. 选择编译的目标,不知道有哪些编译目标可以使用lunch命令来显示目标列表
  3. 开始编译,输入make -j4命令

Android内核设计思想

应用层(最终的app)

框架层(开发app过程中调用的接口)

应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。 应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下

c++库层+art(Java框架层中通过jni调用到该层)

  1. c/c++k库

    C/C++程序库能被Android系统中的不同组件所使用,并通过应用程序框架为开发者提供服务

  2. art虚拟机

    运行时库又分为核心库和ART(5.0系统之后,Dalvik虚拟机被ART取代)。核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代Dalvik虚拟机的ART 的机制与Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用

hal层(hal层之上称为android系统

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。

内核层(基于Linux驱动的可扩展性)

references:

Android系统架构与系统源码目录

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值