- 博客(82)
- 收藏
- 关注
原创 Android Binder 系列专题【篇六:自定义AIDL HAL进程】
前文已经介绍了硬件抽象层中的HIDL接口,然而在Android 14之后,Google计划废弃HIDL接口,转而使用AIDL进行替换。因此基于上一篇介绍的自定义HIDL HAL进程的基础上,本篇介绍一下如何从零开始新增一个AIDL HAL进程,或者如何把之前HIDL HAL转换为一个AIDL HAL进程。
2026-03-22 11:08:27
60
原创 Android Safety 系列专题【篇六:SecureElement安全硬件】
针对本系列前面几篇有提到安全硬件,但是这块接触的比较少,唯一接触到的场景有SecureElement,本篇主要就是围绕SecureElement的使用和相关案例进行解说。
2026-03-13 20:27:38
482
原创 Android SystemServer 系列专题【篇五:SystemConfig系统功能配置】
本篇主要针对SystemConfig的流程进行一个梳理,SystemConfig翻译过来就是系统配置,对应于xxx/etc/目录下面的一些配置。systemserver进程在启动的时候从etc目录下读取这些配置文件,加载到系统中,供fw+app层进行调用判断对应的功能是否启用。
2026-02-14 12:52:21
188
原创 Android Safety 系列专题【篇二:Android AVB机制】
AVB 是 Google 为 Android 系统设计的一套安全机制,用于确保设备在启动过程中加载的系统软件(如 bootloader、内核、system 分区等)是经过授权且未被篡改的。其核心目标是,并支持保护。
2026-01-30 17:41:11
221
原创 Android OTA 之 升级包编译机制
前面介绍了OTA的一些基本概念和常用的两种OTA升级方式(recovery和update_engine),基于之上本篇继续介绍一下OTA包的编译生成机制。
2026-01-23 19:42:24
1104
原创 Android Safety 系列专题【篇一:Secure Boot机制】
Secure Boot从字面上面来讲,是安全启动,就是为了保证设备里刷入的镜像是安全的,这里安全的意思是,这些刷入的镜像是由厂商编译生成的,而不是刷入的别的厂商或者恶意破坏后的镜像。Secure boot主要是保证BP 侧镜像,在加载kernel 之前的镜像的安全,防止刷入设备的镜像,不是由厂商自己编译生成,使设备遭受到恶意攻击。
2026-01-06 16:41:19
1315
原创 Android Safety 系列专题【篇三:Android安全架构】
Android安全架构与密钥管理机制解析 摘要:本文系统介绍了Android安全架构中的密钥管理机制。Android Keystore通过将密钥保留在应用程序进程空间之外,并利用TEE安全硬件提供保护,有效防止密钥泄露。文章详细分析了Keystore的发展历程、架构设计(包括TEE、Keymaster HAL等组件),以及Google KEY和Widevine KEY这两种关键密钥的功能与实现原理。通过多个实际案例(如XTS测试失败、身份认证异常等),展示了密钥管理在实际应用中的重要性。特别指出,密钥认证和
2026-01-06 16:38:17
479
原创 Android Safety 系列专题【篇四:应用签名】
Android应用签名是系统构建时对应用包进行的数字签名验证机制,涉及/build/target/product/security/目录下的密钥文件
2025-12-27 10:11:46
268
原创 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
1327
原创 Android Qualcomm USB 专题系列【篇二:UsbGadget模式配置】
Android设备的主流调试方式还得是通过usb线进行连接,通过adb或者serial进行调试,除此之外高通项目还可以通过diag进行诊断。本篇先围绕usbd进程,引申出后续的adb和diag。
2025-12-19 20:57:42
1270
原创 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
1472
4
原创 Android Init 系列专题【篇四:Init RC Language解析】
摘要: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
287
原创 Android Init 系列专题【篇五:reboot & shutdown】
在android系统中,init进程不仅仅作为第一个进程,涉及设备的开机流程,其实android系统的关机和重启流程,也都离不开init。本篇以android系统的关机/重启流程为切入点,重点来介绍一下init进程在这个过程中是如何举足轻重。如上每一行日志的都是非常关键,这个案例是autotesttool自动化测试工具在压测过程中通过设置属性sys.powerctl='reboot,autotesttool'方式来对系统进行重启。
2025-11-05 22:11:38
494
原创 Android Build系列专题【篇五:构建系统build.prop生成机制】
这里我们主要介绍一下android构建系统的主入口文件build/core/makefile,它承担着整个编译的启动和调度工作。该文件作为构建系统的起点,负责初始化编译环境并包含所有必要的子模块文件。Android构建系统采用模块化设计,位于build/core/目录下,由makefile和多个mk文件组成。makefile作为启动入口,main.mk作为核心流程文件,通过包含关系组织起整个构建框架。由于整个流程过于复杂,这里只记录我跟读过的一些模块。
2025-11-01 15:00:40
1129
2
原创 Android Build系列专题【篇四:编译文件相关语法】
本文介绍了Android Build系统的核心组件,包括Makefile、mk文件和bp文件等。重点针对相关语法进行解析
2025-10-14 11:57:05
368
原创 Android Build系列专题【篇三:平台编译流程】
本文基于AOSP的编译流程,重点介绍了MTK LD2架构和高通NON-HLOS架构的基本原理和相关差异
2025-10-14 11:55:13
827
原创 Android SystemServer 系列专题【篇六:UserController用户状态控制】
本篇接着SystemServer的启动流程,围绕SystemServer最后阶段关于主用户的启动和解锁的流程,作为切入点,来看看SystemServer是如何讲用户状态同步到所有的系统级服务中。本篇先介绍UserController是如何管理用户状态,SystemServiceManager是如何把用户状态通知到所有的系统级服务,如上三个场景的触发条件来分别介绍。
2025-09-12 23:43:58
1185
3
原创 Android SystemServer 系列专题【篇八:AttentionManagerService】
AttentionManagerService是framework中用来实现屏幕感知的一个系统级服务,他继承于systemserver。我们可以通过dumpsys attention来获取他的一些信息。如下针对屏幕感知的功能的引入来针对这个服务进行一个介绍。
2025-09-04 15:16:53
370
原创 Android SystemServer 系列专题【篇四:SystemServerInitThreadPool线程池管理】
本篇重点介绍一下SystemServerInitThreadPool,顾名思义此类针对SystemServer进程的提供了一套ThreadPool线程池的统一标准方案,下面从源码和日志的角度来剖析一个这个类。
2025-08-26 19:40:59
655
原创 Android Input 系列专题【inputflinger事件的读取与分发】
文章摘要: ServiceManager是Android Binder机制的核心管理组件,负责服务注册与查询。作为独立进程,它通过Binder驱动与其他进程通信。启动时完成三个关键步骤:1)打开并映射Binder驱动设备;2)注册为上下文管理者;3)进入循环处理服务请求。服务进程注册时,ServiceManager将句柄保存到链表并通知Binder驱动创建内核对象;客户端查询时,通过句柄查找服务。Binder驱动在内核空间维护红黑树管理服务引用,实现跨进程通信。整个过程体现了观察者模式的设计思想,通过用户空
2025-07-05 15:29:33
1996
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
419
原创 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
886
原创 Android Init 系列专题【篇三:property_service】
摘要:本文详细分析了Android系统中init进程初始化系统属性的机制。首先介绍了属性系统的本质是通过创建/dev/__properties__目录及文件来存储键值对。然后解析了kernel参数转换为系统属性的四种流程:设备树、cmdline、bootconfig处理和默认值设置,并对比了不同平台自定义kernel参数的方法。接着阐述了属性监听机制,包括PropertyServiceThread后台任务、属性设置流程和变更通知机制。最后通过两个实际案例,展示了ro属性的修改限制和PRODUCT_PRODU
2025-06-16 23:11:50
1314
原创 Android 进程查杀机制 之ams & lmkd & kswapd
lwkd进程属于native层启动的一个守护进程,他的作用贯穿android世界的始终。他的另外一个大家都属于的名字lowmemorykiller。
2025-06-09 20:02:11
1159
原创 Android Qualcomm USB 专题系列【篇三:AOSP ADB】
adb源码的架构,其实在根据下面一段文字的介绍,android设备的adb主要靠守护进程adbd来实现,具体代码实现是在Daemon里面。
2025-05-30 10:03:54
2118
原创 Android SystemServer 系列专题【篇三:SystemServer新增服务】
AIDL接口是android通用跨进程通信的工具之一,在Binder死磕到底(三):浅析AIDL-CSDN博客这篇文档中,我们深度解析了AIDL如何实现跨进程通信,以及它如何与binder架构进行对接。因此任何JAVA进程(包括三方应用),都可以通过AIDL接口的方式来实现进程间通信。但是这里使用到AIDL的目的虽然也是跨进程通信,但是为什么会出现跨进程通信呢?
2025-05-26 20:40:12
581
原创 Android Init 系列专题【篇六:native进程自定义】
在Android五层架构中,native层基本上全是c++的世界,这些c++进程基本上靠android世界的第一个进程init进程创建,init通过rc配置文件,创建了众多的c++子进程,也是这众多的c++进程,构建了整个android世界的native层。这里介绍一下如何自定义一个native进程,或者c++进程,或者init服务。在阅读本篇之前,可以先看看。
2025-05-13 22:50:30
618
原创 Android Binder 系列专题【篇五:自定义HIDL HAL进程】
本文详细介绍了Android HAL服务的开发流程,主要包括以下内容: HAL服务端开发 定义HIDL软件包根目录结构 创建子模块和接口文件(types.hal/IXXX.hal) 使用hidl-gen工具生成代码和配置文件 封装为native进程并配置init.rc启动 兼容性矩阵配置(VINTF) SELinux权限配置 客户端实现 Java层调用方式 C++层调用方式 Framework Service集成 App客户端集成 Binder通信优化 客户端死亡监听与重连机制 服务端对客户端死亡的监听处理
2025-04-18 22:31:57
1856
原创 Android Init 系列专题【篇一:fstab分区表挂载】
众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的,这个过程需要在android世界的前面。Init进程的通过FirstStageMount::Create()来拿到一个fsm对象,然后依次调用fsm的DoCreateDevices和DoFirstStageMount来初始化挂载文件系统。
2025-03-07 20:58:13
1322
原创 Android 经验总结【存储相关调试技能汇总】
df 命令主要用于需要检查文件系统上已使用和可用的磁盘空间的数量。如果没有指定文件名,则显示在当前所有挂载的文件系统上可用的空间。其原理是从proc/mounts 或 /etc/mtab 中检索磁盘信息。df -a能够打印当前所有文件系统,包括伪的(具有0块的伪文件系统(没有直接绑定到物理设备))、重复的、不可访问的文件系统。注意:df命令并不是来打印当前磁盘各个文件的大小,而是打印当前挂载的文件系统和块设备之间的关系。df命令平时使用的多的参数是df -h和df -a。字段Filesystem。
2025-02-25 12:00:57
1120
原创 Android SystemServer 系列专题【篇七:DeviceStorageMonitorService】
DeviceStorageMonitorService是framework中实时检查当前设备是否存在底存储空间状态的服务,他继承于systemserver。我们可以通过dumpsys devicestoragemonitor来获取他的一些信息。
2025-02-20 16:15:48
1050
原创 Android 经验总结【Battery Historian调试技能汇总】
Batterystats是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用adb bugreport命令抓取日志,将收集的电池数据转储到开发机器,并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的 HTML 可视化内容。
2025-02-05 17:52:58
3828
原创 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
1692
原创 Android Safety 系列专题【总篇:安全机制汇总】
Android中涉及到KEY和秘钥相关的地方有好几处,而且还比较容易混淆。这里记录一下我们常用的一些KEY以及他们的目的和作用
2024-12-03 22:27:09
5789
原创 学习笔记之UCOS-II
功能描述:一系列判断待挂起的任务是这个函数的任务本身,如果是本身必须删除该任务在任务就绪表中的就绪标识,并在任务控制块成员OSTCBStart中做了挂起记录之后引发一次任务调度,如果带挂起任务不是调用函数的任务本身,那么只需要删除任务就绪表中被挂起任务的就绪标志,并在任务控制块成员OSTCBStart做了挂起记录即可。这个函数首先为被创建任务从任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各成员赋值,最后把这个任务控制块链入到任务控制块链表的头部。所谓挂起一个任务就是停止这个任务的运行。
2024-11-30 22:22:45
1281
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅