自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 Android Build系列专题【篇六:VINTF机制】

VINTF架构的原理剖析,以及相关配置策略

2026-01-06 16:59:49 227

原创 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 专题系列【篇一:UsbHost模式配置】

X。

2025-12-21 10:59:38 127

原创 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

原创 学习笔记之STM32

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。

2024-12-07 20:55:19 1663

原创 学习笔记之Android

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来.

2024-12-07 16:44:15 1633

原创 Android Safety 系列专题【总篇:安全机制汇总】

Android中涉及到KEY和秘钥相关的地方有好几处,而且还比较容易混淆。这里记录一下我们常用的一些KEY以及他们的目的和作用

2024-12-03 22:27:09 5628

原创 学习笔记之UCOS-II

功能描述:一系列判断待挂起的任务是这个函数的任务本身,如果是本身必须删除该任务在任务就绪表中的就绪标识,并在任务控制块成员OSTCBStart中做了挂起记录之后引发一次任务调度,如果带挂起任务不是调用函数的任务本身,那么只需要删除任务就绪表中被挂起任务的就绪标志,并在任务控制块成员OSTCBStart做了挂起记录即可。这个函数首先为被创建任务从任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各成员赋值,最后把这个任务控制块链入到任务控制块链表的头部。所谓挂起一个任务就是停止这个任务的运行。

2024-11-30 22:22:45 1210

原创 学习笔记之TCP/IP协议簇

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来

2024-11-30 21:20:39 1406

原创 学习笔记之Linux内核机制

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,先搬移过来,也不知道到底是对是错了。

2024-11-30 19:26:35 1213

原创 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关注的人

提示
确定要删除当前文章?
取消 删除