- 博客(76)
- 收藏
- 关注
原创 Android Safety 系列专题【篇三:Secure Boot机制】
Secure Boot从字面上面来讲,是安全启动,就是为了保证设备里刷入的镜像是安全的,这里安全的意思是,这些刷入的镜像是由厂商编译生成的,而不是刷入的别的厂商或者恶意破坏后的镜像。Secure boot主要是保证BP 侧镜像,在加载kernel 之前的镜像的安全,防止刷入设备的镜像,不是由厂商自己编译生成,使设备遭受到恶意攻击。
2026-01-06 16:41:19
938
原创 Android Safety 系列专题【篇二:keystore安全架构】
Android安全架构与密钥管理机制解析 摘要:本文系统介绍了Android安全架构中的密钥管理机制。Android Keystore通过将密钥保留在应用程序进程空间之外,并利用TEE安全硬件提供保护,有效防止密钥泄露。文章详细分析了Keystore的发展历程、架构设计(包括TEE、Keymaster HAL等组件),以及Google KEY和Widevine KEY这两种关键密钥的功能与实现原理。通过多个实际案例(如XTS测试失败、身份认证异常等),展示了密钥管理在实际应用中的重要性。特别指出,密钥认证和
2026-01-06 16:38:17
194
原创 Android Safety 系列专题【篇一:系统签名】
Android应用签名是系统构建时对应用包进行的数字签名验证机制,涉及/build/target/product/security/目录下的密钥文件
2025-12-27 10:11:46
190
原创 Android Qualcomm USB 专题系列【总篇:USB HAL架构】
摘要:本文分析了高通在Android USB系统上的定制实现,主要分为HOST模式(负责主机端管理)和DEVICE模式(Gadget功能)。重点介绍了USB启动配置流程,包括init.qti.usb.qmaa.rc等文件的执行顺序和作用,以及HAL层的两个服务实现:android.hardware.usb-service.qti(主机管理)和android.hardware.usb.gadget-service.qti(从设备功能支持)。最后详细说明了usb_compositions.conf中定义的各种功
2025-12-19 22:49:10
1127
原创 Android Qualcomm USB 专题系列【篇二:UsbGadget模式配置】
Android设备的主流调试方式还得是通过usb线进行连接,通过adb或者serial进行调试,除此之外高通项目还可以通过diag进行诊断。本篇先围绕usbd进程,引申出后续的adb和diag。
2025-12-19 20:57:42
1057
原创 Android Qualcomm USB 专题系列【篇四:Qualcomm Diag】
高通平台架构分为三部分:右侧为Android系统(HLOS),左侧为高通专有子系统(NON-HLOS),包含Modem、DSP、TrustZone等模块。高通独立开发了这些子系统和专用编译工具链(如Hexagon SDK),需要配置特殊环境变量进行编译。子系统编译后会生成.mbn/.bin等固件文件,每个模块都有特定版本标识,如MPSS(Modem)、ADSP(音频DSP)、TZ(安全区)等。完整的高通平台开发需要同时使用Android SDK和Qualcomm SDK,后者包含ARM、Hexagon等专用
2025-11-29 15:42:05
973
原创 Android Init 系列专题【篇四:service & action】
摘要:Android初始化语言(Android Init Language)是构建Native层的基础,主要包含Actions、Commands、Services等五类语句。Actions通过触发器(Trigger)激活命令序列,Services定义后台运行的服务。RC文件分布在/system、/vendor等分区,通过LOCAL_INIT_RC宏配置。APEX模块支持版本化RC文件(如init.31rc)以适应不同SDK版本。关键命令包括启动服务(class_start)、设置属性(setprop)等
2025-11-08 22:05:22
196
原创 Android Init 系列专题【篇五:reboot & shutdown】
在android系统中,init进程不仅仅作为第一个进程,涉及设备的开机流程,其实android系统的关机和重启流程,也都离不开init。本篇以android系统的关机/重启流程为切入点,重点来介绍一下init进程在这个过程中是如何举足轻重。如上每一行日志的都是非常关键,这个案例是autotesttool自动化测试工具在压测过程中通过设置属性sys.powerctl='reboot,autotesttool'方式来对系统进行重启。
2025-11-05 22:11:38
375
原创 Android Build系列专题【篇五:构建系统build.prop生成机制】
这里我们主要介绍一下android构建系统的主入口文件build/core/makefile,它承担着整个编译的启动和调度工作。该文件作为构建系统的起点,负责初始化编译环境并包含所有必要的子模块文件。Android构建系统采用模块化设计,位于build/core/目录下,由makefile和多个mk文件组成。makefile作为启动入口,main.mk作为核心流程文件,通过包含关系组织起整个构建框架。由于整个流程过于复杂,这里只记录我跟读过的一些模块。
2025-11-01 15:00:40
948
原创 Android Build系列专题【篇四:编译文件相关语法】
本文介绍了Android Build系统的核心组件,包括Makefile、mk文件和bp文件等。重点针对相关语法进行解析
2025-10-14 11:57:05
258
原创 Android Build系列专题【篇三:平台编译流程】
本文基于AOSP的编译流程,重点介绍了MTK LD2架构和高通NON-HLOS架构的基本原理和相关差异
2025-10-14 11:55:13
599
原创 Android SystemServer 系列专题【篇五:UserController用户状态控制】
本篇接着SystemServer的启动流程,围绕SystemServer最后阶段关于主用户的启动和解锁的流程,作为切入点,来看看SystemServer是如何讲用户状态同步到所有的系统级服务中。本篇先介绍UserController是如何管理用户状态,SystemServiceManager是如何把用户状态通知到所有的系统级服务,如上三个场景的触发条件来分别介绍。
2025-09-12 23:43:58
1125
3
原创 Android SystemServer 系列专题【AttentionManagerService】
AttentionManagerService是framework中用来实现屏幕感知的一个系统级服务,他继承于systemserver。我们可以通过dumpsys attention来获取他的一些信息。如下针对屏幕感知的功能的引入来针对这个服务进行一个介绍。
2025-09-04 15:16:53
335
原创 Android SystemServer 系列专题【篇四:SystemServerInitThreadPool线程池管理】
本篇重点介绍一下SystemServerInitThreadPool,顾名思义此类针对SystemServer进程的提供了一套ThreadPool线程池的统一标准方案,下面从源码和日志的角度来剖析一个这个类。
2025-08-26 19:40:59
628
原创 Android Input 系列专题【inputflinger事件的读取与分发】
文章摘要: ServiceManager是Android Binder机制的核心管理组件,负责服务注册与查询。作为独立进程,它通过Binder驱动与其他进程通信。启动时完成三个关键步骤:1)打开并映射Binder驱动设备;2)注册为上下文管理者;3)进入循环处理服务请求。服务进程注册时,ServiceManager将句柄保存到链表并通知Binder驱动创建内核对象;客户端查询时,通过句柄查找服务。Binder驱动在内核空间维护红黑树管理服务引用,实现跨进程通信。整个过程体现了观察者模式的设计思想,通过用户空
2025-07-05 15:29:33
1860
7
原创 Android Input 系列专题【dumpsys input解读】
Android IMS原理解析 - 简书Android 输入事件分发全流程梳理(一)_android input事件分发流程-CSDN博客Android 输入事件分发全流程梳理(二)_android输入事件流程图-CSDN博客inputflinger模块与surfaceflinger模块在同级目录之下,即aosp/frameworls/native/services,放在这个目录下面,是因为和fw里面的ims存在大量的交互,其结构如下:
2025-07-02 19:58:32
343
原创 Android Init 系列专题【篇二:Selinux启动流程】
文章摘要: 本文详细剖析了Linux内核和Android系统中SELinux的初始化与配置过程。主要内容包括:1) Linux内核阶段SELinux的初始化流程,涉及LSM安全框架启动、内核参数处理机制以及selinuxfs文件系统的实现;2) Android init进程的三个阶段(vendor init、selinux_setup和second_stage)中SELinux的配置过程;3) 系统如何通过kernel cmdline参数(如androidboot.selinux=permissive)和宏
2025-07-02 19:35:36
780
原创 Android Init 系列专题【篇三:property_service】
摘要:本文详细分析了Android系统中init进程初始化系统属性的机制。首先介绍了属性系统的本质是通过创建/dev/__properties__目录及文件来存储键值对。然后解析了kernel参数转换为系统属性的四种流程:设备树、cmdline、bootconfig处理和默认值设置,并对比了不同平台自定义kernel参数的方法。接着阐述了属性监听机制,包括PropertyServiceThread后台任务、属性设置流程和变更通知机制。最后通过两个实际案例,展示了ro属性的修改限制和PRODUCT_PRODU
2025-06-16 23:11:50
1228
原创 Android 进程查杀机制 之ams & lmkd & kswapd
lwkd进程属于native层启动的一个守护进程,他的作用贯穿android世界的始终。他的另外一个大家都属于的名字lowmemorykiller。
2025-06-09 20:02:11
1075
原创 Android Qualcomm USB 专题系列【篇三:AOSP ADB】
adb源码的架构,其实在根据下面一段文字的介绍,android设备的adb主要靠守护进程adbd来实现,具体代码实现是在Daemon里面。
2025-05-30 10:03:54
2016
原创 Android SystemServer 系列专题【篇三:SystemServer新增服务】
AIDL接口是android通用跨进程通信的工具之一,在Binder死磕到底(三):浅析AIDL-CSDN博客这篇文档中,我们深度解析了AIDL如何实现跨进程通信,以及它如何与binder架构进行对接。因此任何JAVA进程(包括三方应用),都可以通过AIDL接口的方式来实现进程间通信。但是这里使用到AIDL的目的虽然也是跨进程通信,但是为什么会出现跨进程通信呢?
2025-05-26 20:40:12
512
原创 Android Init 系列专题【篇六:native进程自定义】
在Android五层架构中,native层基本上全是c++的世界,这些c++进程基本上靠android世界的第一个进程init进程创建,init通过rc配置文件,创建了众多的c++子进程,也是这众多的c++进程,构建了整个android世界的native层。这里介绍一下如何自定义一个native进程,或者c++进程,或者init服务。在阅读本篇之前,可以先看看。
2025-05-13 22:50:30
566
原创 Android Init 系列专题【篇七:hal服务进程自定义】
通常定义在types.hal里面,其语法和java/c/c++可能不一致,详细参考hl=zh-cnHAL的正式接口,同前面的回调接口刚好相反,即HAL接口:客户端/Framework -------> HAL进程(HAL进程是被调用者)CALL接口:HAL进程 ------>客户端/Framework (HAL进程主动发起)
2025-04-18 22:31:57
1709
原创 Android Init 系列专题【篇一:fstab分区表挂载】
众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的,这个过程需要在android世界的前面。Init进程的通过FirstStageMount::Create()来拿到一个fsm对象,然后依次调用fsm的DoCreateDevices和DoFirstStageMount来初始化挂载文件系统。
2025-03-07 20:58:13
1167
原创 Android 经验总结【存储相关调试技能汇总】
df 命令主要用于需要检查文件系统上已使用和可用的磁盘空间的数量。如果没有指定文件名,则显示在当前所有挂载的文件系统上可用的空间。其原理是从proc/mounts 或 /etc/mtab 中检索磁盘信息。df -a能够打印当前所有文件系统,包括伪的(具有0块的伪文件系统(没有直接绑定到物理设备))、重复的、不可访问的文件系统。注意:df命令并不是来打印当前磁盘各个文件的大小,而是打印当前挂载的文件系统和块设备之间的关系。df命令平时使用的多的参数是df -h和df -a。字段Filesystem。
2025-02-25 12:00:57
1038
原创 Android SystemServer 系列专题【DeviceStorageMonitorService】
DeviceStorageMonitorService是framework中实时检查当前设备是否存在底存储空间状态的服务,他继承于systemserver。我们可以通过dumpsys devicestoragemonitor来获取他的一些信息。
2025-02-20 16:15:48
1003
原创 Android 经验总结【Battery Historian调试技能汇总】
Batterystats是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用adb bugreport命令抓取日志,将收集的电池数据转储到开发机器,并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的 HTML 可视化内容。
2025-02-05 17:52:58
3541
原创 Android 之永乐大典
如下编译脚本逻辑,这里通过DISABLE_DEXPREORT_CHECK宏控来失能是否进行DEXPREOPT优化检测,如果为true则失能,默认需要进行优化检测,通过过滤所有PRODUCT_PACKAGES安装的应用,即先过滤ALL_DEFAULT_INSTALLED_MODULES宏控指定列表里面的应用,然后在过滤DEXPREOPT_SYSTEMSERVER_ARTIFACTS列表中指定的需要dexpreort优化的系统jar。Android DexOpt前世今生:参考。
2024-12-18 11:08:40
1578
原创 Android Safety 系列专题【总篇:安全机制汇总】
Android中涉及到KEY和秘钥相关的地方有好几处,而且还比较容易混淆。这里记录一下我们常用的一些KEY以及他们的目的和作用
2024-12-03 22:27:09
5628
原创 学习笔记之UCOS-II
功能描述:一系列判断待挂起的任务是这个函数的任务本身,如果是本身必须删除该任务在任务就绪表中的就绪标识,并在任务控制块成员OSTCBStart中做了挂起记录之后引发一次任务调度,如果带挂起任务不是调用函数的任务本身,那么只需要删除任务就绪表中被挂起任务的就绪标志,并在任务控制块成员OSTCBStart做了挂起记录即可。这个函数首先为被创建任务从任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各成员赋值,最后把这个任务控制块链入到任务控制块链表的头部。所谓挂起一个任务就是停止这个任务的运行。
2024-11-30 22:22:45
1210
原创 Android Init 系列专题【总篇:Init启动流程】
init进程触发系统重启是一个很合理的逻辑,为什么合理?init进程是android世界的一切基石,如果android世界的某些服务或者进程出现异常,那么会导致整个系统无法正常使用,为了防止这种情况,专门给init进程设计了能够重启的功能,那么android世界的这些徒子徒孙他们怎么来重启系统呢?就通过给init进程发送reboot或者shutdown这类的命令使系统重启。这里一个案例,进入mate模式之后系统直接重启,init日志如下。
2024-11-30 13:24:22
1373
3
原创 Android OTA 升级 之 Recovery
目录1、Application层客户端的调用2、Framework层的RecoverySystem2.1 processPackage 解密升级包2.2 verifyPackage 校验升级包2.3 installPackage 安装升级包2.3.1 data目录固定block.map路径2.3.2 主系统向recovery系统写命令2.3.3 主系统的systemservice进程如何与recovery系统通信?2.3.4 为升级包申请元数据2.3.5 重启进入recovery系统3、Native层unc
2024-11-29 23:41:35
2234
原创 Android OTA 升级 之 UpdateEngine
下面根据源码和日志依次介绍Android新引入的无缝升级流程,其主要通过update_engine后台服务来完成,当然这里参与工作的肯定不仅仅只有他,但他一定是重要的入口,因此这里简称UpdateEngine。
2024-11-29 23:40:21
486
原创 Android 经验总结【Trace调试技能汇总】
MTK官方网站介绍了一些关键字来确认IO数据量的请求,详细可以点击我block_rq_insert:表示将一个新的块I/O请求插入到块层请求队列中。当应用程序或者操作系统发起一个读取或写入请求时,这个请求会被插入到块I/O请求队列中等待处理block_rq_issue:表示一个块I/O请求已经提交并开始执行,具体含义是块设备层已经向硬盘或固态驱动器提交了一个请求,并此请求已经在硬盘或驱动器设备上执行。当I/O请求插入到请求队列中表示等待执行,issue。
2024-11-23 19:03:24
11587
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅