一些OS前置知识(android)

type
status
date
slug
tags
summary
category
icon
password
首先是安卓系统的分层,Linux内核、HAL(Hardware Abstraction Layer)、系统Native库、Android运行时环境、Java框架层以及应用层
notion image
关系图:
notion image
 
 
安卓系统启动过程:
Boot Loader引导开机,依次进入 Kernel→Native→Framework→App
 

Loader 层

Boot ROM:当手机处于关机状态时,长按Power开机,引导芯片开始从固化在ROM里预设的代码开始执行,然后加载引导程序到RAM
Boot Loader:启动Android系统前的引导程序,主要是检查RAM,初始化硬件参数等功能
 

Linux内核层

Android平台的基础是Linux内核,比如ART虚拟机最终调用底层Linux内核来执行功能。Linux内核的安全机制为Andorid提供相应的保障,也允许设备制造商为内核开发硬件驱动程序
  • 启动Kernel的swapper进程(pid = 0):该进程又称为idle进程,系统初始化的过程Kernel从无到有开创的第一个进程,用于初始化进程管理、内存管理,加载Display、Camera Driver、Binder Driver等相关工作
  • 启动kthreadd进程(pid = 2):Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。kthreadd进程是所有内核进程的鼻祖
 

硬件抽象层(HAL)

提供标准接口,HAL包含多个库模块,其中每个模块都为特定类型的硬件组件实现一组接口,比如WIFI/蓝牙模块,当框架API请求访问设备硬件时,Android系统将为该硬件加载相应的库模块
 

Android Runtime & 系统库

每个引用都在其自己的进程中运行,有自己的虚拟机实例。ART通过执行DEX文件可在设备运行多个虚拟机,DEX文件是一种专为Android设计的字节码格式文件,经过优化,使用内存很少。ART主要功能包括:AOT和JIT,GC垃圾回收,以及调试相关的支持
 
这里的Native系统库主要包括init孵化来的用户空间的守护进程、HAL层以及开机动画等。启动init进程(pid=1),是Linux系统的用户进程,init进程是所有用户进程的鼻祖
  • init进程会孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户进程守护进程
  • init进程还启动servicemanager(binder服务管家)、bootanim(开机动画)等服务
  • init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程(即虚拟机进程),Zygote是所有Java进程的父进程,Zygote进程本身是由init进程孵化而来的
 

Framework层

  • Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:
    • 加载ZygoteInit类,注册Zygotye Socket服务套接字
    • 加载虚拟机
    • 提前加载类preloadClasses
    • 提前加载资源preloadResouces
  • System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务
  • Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlinger, Camera Service等服务
 

App层

  • Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
  • Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。
  • 所有的App进程都是由Zygote进程fork生成的。
 

Syscall && JNI

  • Native与Kernel之间有一层系统调用(SysCall)层
上一篇
一些OS前置知识(linux)
下一篇
小米环境记录
Loading...
文章列表
Hi~, I ‘m moyao
reverse
pwn
pentest
iot
android
others
ctf
iOS