- 博客(64)
- 收藏
- 关注
原创 创建简单可 start/stop 的 init 服务
本文介绍了如何创建一个支持 start/stop 操作的简单 init 服务。项目结构包含构建配置文件、服务实现代码和 init 启动配置。服务实现代码展示了信号处理、控制 socket 监听、命令处理等功能,支持通过信号或 socket 进行控制。服务主循环采用 select 机制实现事件驱动,包含周期性任务执行和资源清理逻辑。该示例可作为基础框架,扩展实现更复杂的系统服务功能。
2025-12-29 21:50:07
157
原创 为什么有些服务可以用 start/stop,有些不行
Android服务启动机制解析 Android系统中服务的启动控制存在显著差异,主要分为两类: init管理的原生服务: 定义在/system/etc/init/或/vendor/etc/init/目录的.rc文件中 作为独立进程运行(C/C++/Rust实现) 可通过start/stop命令控制(如gatekeeperd、netd) 具有独立生命周期,可按需启停 SystemServer管理的Java服务: 运行在SystemServer进程内(Java实现) 包括AMS、PMS等核心服务 无法单独启停,
2025-12-29 11:03:41
718
原创 gatekeeperd.rc 文件详细分析
本文详细分析了Android系统中的gatekeeperd服务,包括其启动配置、运行机制和功能实现。主要内容包括: 服务配置:通过gatekeeperd.rc文件定义服务属性,包括以system用户身份运行、late_start启动类别和资源限制配置。 系统架构:详细描述了服务启动流程、数据存储结构(位于/data/misc/gatekeeper)以及与SELinux的安全上下文关系。 构建与运行:分析了从Android.bp构建到系统部署的完整流程,包括启动时机选择、资源限制策略和数据存储安全设计。 监控
2025-12-29 11:01:15
507
原创 Android.bp 配置文件详解---gatekeeperd
这篇文档详细解析了Android系统中gatekeeperd守护进程的构建配置文件Android.bp。该文件采用Apache 2.0许可证,定义了gatekeeperd及其相关组件的构建规则,包括: 构建配置:详细说明了编译标志、源文件、依赖库等配置项,使用最新的KeyMint HAL AIDL NDK,并依赖多个安全相关库如libbinder、libgatekeeper、libcrypto等。 组件定义: 可执行文件gatekeeperd的主程序入口 AIDL接口文件组及其共享库实现 模糊测试目标用于安
2025-12-29 10:59:15
341
原创 Android.bp 实例运行结果及详细解释 2
Android.bp构建系统解析与应用构建过程 本文详细阐述了Android.bp构建配置文件在Android系统中的应用,重点展示了三种典型构建场景: C++程序构建:通过cc_library_static和cc_binary模块构建静态库和可执行文件,生成可执行文件myapp及其依赖库 Android应用构建:使用android_app模块构建APK应用包,包含Java代码编译、资源处理和APK打包过程 复杂项目构建:演示多模块协同构建,包括静态库、动态库、可执行文件及配置文件的生成 构建过程在Andr
2025-12-26 22:21:56
954
原创 Android.bp 语法编程指南 1
Android.bp 是 Android 构建系统(Soong)使用的构建描述文件,采用声明式语法替代传统的 Android.mk。本文介绍了其基本语法规则、常用模块类型(cc_binary、cc_library、java_library等)及完整实例,包含变量定义、文件操作、条件编译等特性。指南还提供了调试技巧和最佳实践,如保持模块简洁、合理分组、添加注释等。通过示例代码展示了如何构建C++程序、Android应用和多模块项目,帮助开发者快速掌握这一构建系统的核心语法和使用方法。
2025-12-26 22:20:12
621
原创 MTK平台Android init.rc服务详解实例
本文详细介绍了MTK平台Android系统中的init.rc服务配置,重点分析了两个典型服务:perfservice性能服务和cameraserver相机服务。perfservice服务展示了MTK特有的性能优化配置,包括进程权限、CPU调度、OOM调整等细节;cameraserver服务则说明了MTK相机硬件适配层的特殊配置要求。文中提供了完整的服务定义示例,包含用户/组设置、能力控制、SELinux标签、socket创建等关键元素,并详细说明了各种触发条件(boot、property变化等)下的服务控制
2025-12-26 22:18:25
250
原创 MTK平台Android init.rc服务详解实例
本文详细介绍了MTK平台Android系统中的init.rc服务配置,重点分析了两个典型服务:perfservice性能服务和cameraserver相机服务。perfservice服务展示了MTK特有的性能优化配置,包括进程权限、CPU调度、OOM调整等细节;cameraserver服务则说明了MTK相机硬件适配层的特殊配置要求。文中提供了完整的服务定义示例,包含用户/组设置、能力控制、SELinux标签、socket创建等关键元素,并详细说明了各种触发条件(boot、property变化等)下的服务控制
2025-12-25 21:17:56
284
原创 实战项目:设计一个智能温控服务
本文设计了一个完整的Android智能温控服务thermal_guardian的.rc配置文件。该服务监控设备温度并动态调整性能策略,包含以下核心设计:1) 服务定义部分采用最小权限原则,设置用户权限、资源限制和日志记录;2) 事件触发机制包括系统启动完成、充电状态、游戏模式、省电模式等多种场景;3) 提供温度阈值动态调整功能,根据不同使用场景自动切换温控策略;4) 包含安全设计如SELinux上下文、进程间通信权限控制等。整个设计体现了模块化、可配置性和安全性原则,确保温控服务高效稳定运行。
2025-12-25 21:16:24
479
原创 安卓rc-属性触发Hello World服务设计
本文设计了一个基于属性触发的Hello World服务系统,通过设置不同属性实现日志打印功能。系统包含一个简单的shell脚本服务,采用最小权限原则设计,支持多种触发方式:标准init控制属性、自定义属性、系统启动时自动触发、物理按键组合触发以及定时触发。服务执行后立即退出(oneshot),并包含详细的错误处理和日志记录机制,包括触发时间记录、状态属性设置和重启次数统计。所有日志通过logcat输出,同时将触发信息写入临时文件便于调试。系统设计注重安全性、灵活性和可调试性,适用于Android平台的基础服
2025-12-25 21:14:10
1200
原创 Android init服务.rc文件,支持开机自启动和手动控制
本文介绍了Android init服务配置文件的编写方法,包括基础模板和高级功能示例。主要内容涵盖服务定义(用户/组权限、能力配置、重启策略)、触发条件(系统事件、属性控制)、多实例服务实现以及编译安装方式。文章提供了完整的守护进程示例和最佳实践建议,强调权限最小化、资源限制和错误处理。还包含通过adb命令手动控制服务的方法,以及日志查看技巧,帮助开发者正确配置和管理Android系统服务。
2025-12-25 20:53:07
303
原创 安卓手机驱动工程师的发展
安卓手机驱动工程师成长路径:3年关键期进阶指南 摘要:安卓手机驱动工程师需要经历0-1年基础开发、1-3年模块专精、3-5年系统设计三个阶段。3年经验是成为技术骨干的关键期,需完成三大转变:技术上从使用到掌控核心模块(如Camera/显示),项目上从参与到主导全流程,视野上从单一模块到系统理解。该岗位技术壁垒高,3-5年经验工程师月薪可达2.5-4万。建议选择重点模块深耕,构建知识体系并主动发起优化项目,完成从执行到设计的思维转变。行业需关注AOSP闭源化趋势和AI整合带来的新挑战。
2025-12-23 09:37:47
818
原创 3年驱动工程师发展路径与建议
驱动工程师是嵌入式开发的核心岗位,3年经验是关键转折期。发展路径分为入门期(0-1年)、上升期(1-3年)、资深期(3-5年)和架构期(5-8年),薪资随经验增长而提升。核心能力需从技术深度、工程协作到领域专长逐步进阶。行业选择影响职业发展,建议关注芯片、汽车电子等高价值领域。突破瓶颈需主动深入底层逻辑,构建系统认知。长期规划可向技术专家或管理方向发展,关键要保持学习主动性,关注行业前沿趋势。
2025-12-23 09:35:00
482
原创 安卓休眠与唤醒流程
摘要:本文深入解析Android休眠唤醒机制的三层架构(应用层、框架层、内核层),通过流程图展示各层级的协作关系。重点剖析了休眠流程的逐层关停机制(应用请求→框架协调→内核执行)和唤醒流程的硬件中断响应过程(中断触发→内核恢复→应用通知),结合代码片段解释了唤醒锁检查、中断记录等核心机制。最后指出eMMC访问违例问题的本质是休眠时序竞争,并提供了进一步分析的建议方向,如唤醒锁类型、Doze模式等深度优化策略。全文揭示了Android电源管理的多层级状态机协作本质。
2025-12-19 17:43:58
362
原创 安卓/MTK平台日志关键词详解
本文详解了安卓/MTK平台的关键系统模块及其日志含义,包括: 多媒体处理模块(MDP、DIP、VCP)负责图像/视频处理流水线 硬件加速架构(CMDQ)实现任务卸载和并行处理 电源管理(PM、SPM)控制休眠/唤醒流程及电压调节 无线子系统(WLAN、BT、WMT)管理网络连接状态 存储控制器(MSDC)处理eMMC/SD卡操作 安全模块(TEE)提供可信执行环境 文中详细解析了各模块日志关键词、状态转换流程以及典型错误场景,为系统调试提供参考依据。
2025-12-17 10:01:20
708
原创 Android设备日志分析与电源管理问题
Android设备休眠异常分析 日志显示设备在唤醒后快速进入休眠时出现两个关键错误:1)eMMC控制器通信超时(命令6切换模式失败,错误码-110);2)设备访问权限违规(MCU在MSDC0电源/时钟未开启时尝试写操作)。问题发生在系统休眠过程中,TEE安全环境进行RPMB操作与eMMC控制器挂起流程产生竞争,导致访问冲突。根本原因是电源管理时序不同步,建议检查TEE驱动完整性、调整模块挂起顺序,并在安全操作与控制器电源管理间增加同步机制,防止低功耗状态下非法访问。
2025-12-17 09:47:20
726
原创 bash语法与init.rc语法对比
本文对比了bash脚本与Android init.rc脚本的核心差异。bash作为通用Unix shell脚本,支持变量、条件判断、循环和函数等完整编程结构,适用于复杂脚本编写。而init.rc是Android专用的声明式初始化语言,主要用于系统启动时配置服务、执行命令和设置属性,语法简单直接。两者在执行环境上也有本质区别:bash脚本由shell解释执行,init.rc则由Android的init进程解析。文章通过详细代码示例展示了两种语法的具体用法和特点。
2025-12-11 10:05:38
852
原创 完整bash语法教程:从零到专家
本文摘要介绍了bash脚本编程的基础知识,包括基础概念、变量和数据类型、字符串操作以及运算符等核心内容。bash是Unix/Linux系统的命令行解释器,支持变量定义(普通变量、只读变量、数组)、特殊变量($0、$1、$#等)、字符串操作(拼接、截取、替换、大小写转换)以及算术运算(使用$(( ))和let)。这些基础语法是编写shell脚本的必备知识,为后续学习流程控制、函数和高级特性奠定基础。
2025-12-11 10:03:39
862
原创 Java入门基础概念实例详解(彻底入门)
《Java入门完全指南》提供了系统的Java核心概念学习,包含详细代码示例、注释和运行结果。主要内容包括:1) Java基础:从HelloWorld程序入手,讲解变量、数据类型和运算符;2) 控制流语句:介绍if-else条件判断结构。每个知识点都配有完整代码实例,如数据类型示例展示了8种基本类型及其转换,运算符示例演示了算术、关系、逻辑等运算。所有代码均附有详细注释说明语法规则,并展示预期运行结果,帮助初学者快速掌握Java编程基础。
2025-12-08 09:26:52
523
原创 30天Shell脚本编程实战(彻底逆袭续)
本文展示了两个Shell脚本编程实战案例:Day 15网络操作脚本和Day 16系统监控脚本。网络操作脚本涵盖了网络连接测试、信息获取、端口扫描、HTTP请求和网络监控等功能,包括ping测试、DNS解析、路由追踪、IP地址查询、端口检测和HTTP服务器创建等实用操作。系统监控脚本则提供了CPU、内存、磁盘和网络等系统资源的实时监控功能,通过彩色输出直观显示系统状态。这两个脚本展示了Shell脚本在网络管理和系统监控方面的强大能力,适合用于日常运维和故障排查工作。
2025-12-08 09:15:22
936
原创 30天Shell脚本编程实战(14天逆袭)
本文摘要:本文记录了30天Shell脚本编程实战的前6天内容,涵盖基础语法到实用技巧。Day1介绍"Hello World"脚本;Day2讲解变量和用户输入;Day3展示数学运算;Day4演示条件判断;Day5解析逻辑运算符;Day6说明case语句应用。每个主题都包含详细代码示例和运行结果,循序渐进地帮助读者掌握Shell脚本编程基础。
2025-12-05 21:13:14
615
原创 Shell 脚本编程全面教程 (彻底学会系列)
本文提供了Shell脚本编程的全面教程,从基础语法到高级特性。主要内容包括:Shell脚本基本结构(#!/bin/bash开头)、变量定义与使用(注意等号两边无空格)、字符串操作(长度、子串、替换等)、数组操作(定义、访问、修改、遍历)、各种运算符(算术、关系、字符串、文件测试)以及控制结构(if-else条件判断)。教程通过大量代码示例演示了Shell脚本的核心概念,每个示例都配有详细注释和预期运行结果,适合从入门到进阶的学习需求。
2025-12-05 21:01:19
838
原创 面向对象编程(OOP)超详细白话教程(实例加运行结果)
面向对象编程(OOP)是一种以对象为核心的编程范式,主要包含类与对象、封装、继承和多态四大核心概念。类作为对象的蓝图,定义了属性和行为;对象则是类的具体实例。封装通过隐藏内部实现细节,提供安全的数据访问。继承实现代码复用,建立类之间的层次关系。多态则允许同一方法在不同对象中有不同实现。通过银行账户等实例代码,展示了如何将这些概念应用于实际编程,体现了OOP在代码组织、安全性和扩展性方面的优势。
2025-12-02 09:51:25
639
原创 C++ 语言全面教程 (基础入门)
本文全面介绍C++编程语言,从基础概念到实际应用。C++是一种多范式编程语言,支持面向对象、泛型等多种编程方式。教程首先通过经典的"Hello World"程序展示基本语法结构,然后详细讲解变量、数据类型、控制结构(条件语句和循环)以及函数定义与调用等核心概念。面向对象编程部分重点介绍了类和对象的创建、成员函数、构造函数等特性。所有概念都配有清晰的代码示例和注释说明,便于学习者理解C++的基本语法规则和编程范式。
2025-12-02 09:38:10
886
2
原创 2025-12-1最后一个月小记
回顾这一年,上半年参与了S项目和L项目,从中学习了编译版本的相关流程——从平台基线的各个模块编译,到最终打包成版本,都是通过Shell脚本完成。这一套流程值得深入掌握,如今有了AI工具的帮助,理解起来也更容易一些。眼下看来,短期内外部机会不多,但不管怎样,总得持续做点什么。进入最后一个月,我运营的个人博客已经积累了70个粉丝,下一步希望在这个月突破100关注。同时,也计划把各内容平台都搭建起来,保持有节奏的输出。至于写作,可以借助翻译工具,不必强求掌握每一个单词,但持续学习是必要的。
2025-12-01 09:29:50
154
原创 C++ 运算符详解 (彻底学会)
C++提供了丰富的运算符类型,包括算术、关系、逻辑、位运算、赋值等。算术运算符(+-*/%)用于基本数学运算,关系运算符(== != > < >= <=)用于比较值,逻辑运算符(&& || !)组合多个条件。每种运算符都有特定功能和使用场景,通过代码示例可清晰展示其运算规则和结果。理解这些运算符是掌握C++编程的基础。
2025-11-29 15:56:07
1054
原创 C++ 中的 break、continue 和 goto 详解 (彻底学会)
C++中的break、continue和goto是控制程序流程的关键语句。break用于立即终止当前循环或switch语句;continue跳过当前循环迭代的剩余代码,进入下一次循环;goto无条件跳转到指定标签位置,常用于跳出多层嵌套循环或错误处理。虽然goto灵活但应谨慎使用,以避免代码结构混乱。每个语句都有特定适用场景,合理使用可以优化程序逻辑和控制流程。
2025-11-29 15:28:33
546
原创 进程编程深度解析:5个实例彻底掌握
进程编程深度解析摘要 本文通过5个递进实例系统讲解Linux进程编程: 基础进程创建:演示fork()创建单子进程和wait()回收机制 多子进程管理:展示循环创建多个并发子进程,处理僵尸进程问题 管道通信:实现父子进程间通过管道进行数据传递 进程替换:使用exec族函数执行外部程序如ls命令 信号控制:通过信号实现父子进程间异步通信与控制 每个实例包含完整代码、详细注释和预期输出,从简单fork到复杂的进程间通信与控制,循序渐进地掌握进程创建、管理、通信和替换等核心概念。通过这组实例可全面理解Linux进
2025-11-25 10:27:53
493
原创 进程中PID值详解
本文介绍了Unix/Linux系统中使用fork()系统调用创建子进程的机制。fork()调用一次会返回两次,在父进程中返回子进程ID,在子进程中返回0。代码通过判断fork()的返回值区分父子进程:pid==0时执行子进程代码块,pid>0时执行父进程代码块,pid==-1表示创建失败。文中通过示例演示了父子进程的不同执行路径,并解释了fork()的并发执行特性。关键点在于pid==0专门标识子进程,使父子进程能执行不同代码逻辑。
2025-11-25 10:23:39
240
原创 父进程与子进程(wait的详解)
摘要:该C程序演示了父子进程的创建与同步机制。程序通过fork()创建子进程,父进程使用wait()阻塞等待子进程结束。子进程执行计数循环后退出,父进程获取并显示子进程的退出状态。wait()具有三个关键功能:1)实现进程同步,确保父进程等待子进程完成;2)回收子进程资源,避免僵尸进程;3)获取子进程退出状态信息。程序展示了父子进程的执行顺序及wait()的阻塞特性,同时说明了应使用WIFEXITED等宏正确解析子进程状态。该示例是多进程编程中进程管理和同步的典型实现。
2025-11-25 10:21:40
544
原创 Binder机制详解与编程实例
本文详细介绍了Android系统中的Binder进程间通信机制,包含服务端和客户端的完整实现代码。Binder作为Android核心IPC机制,具有高性能、安全性和面向对象特性。文章首先阐述了Binder的基本架构和组件,包括Binder驱动、Service Manager等核心元素。随后提供了两个编程实例:第一个展示了Binder服务端的完整实现框架,包含接口定义、服务实现和注册流程;第二个实例演示了Binder客户端的代理类实现,说明如何进行远程方法调用。这些代码示例覆盖了Binder通信的关键环节,如
2025-11-24 09:45:03
793
原创 进程学习(子进程与父进程)
进程创建与父子进程关系摘要 进程是程序执行的实例,作为系统资源分配的基本单位。在Unix/Linux系统中,fork()系统调用用于创建新进程,生成父进程的副本作为子进程。关键特性包括: 父子进程共享代码段但拥有独立的数据空间副本 fork()返回值区分父子进程:父进程获得子进程PID,子进程获得0 父子进程执行顺序由调度器决定 典型应用模式:父进程通过wait()等待子进程结束 示例代码展示了基本的fork()使用、多子进程管理、fork-exec组合模式以及简单的进程间通信实现。Windows系统使用C
2025-11-24 09:29:09
428
原创 Android Binder C/C++ 层详解与实践
本文详细介绍了Android Binder在C/C++层的实现架构与实践。内容覆盖Binder驱动层架构(用户空间到内核空间的完整调用链)和一个完整的Binder服务端实现示例。代码展示了如何定义Binder接口(IBinderDemoService)、实现服务逻辑(BinderDemoService类)、处理事务(onTransact方法)以及启动和注册服务。实现示例包含了add、greet和getVersion三个典型方法,演示了参数传递、结果返回等关键操作,并配有详细的日志记录,方便开发者理解Bind
2025-11-20 09:57:23
645
原创 Android Binder 详解与实践指南
本文介绍了Android Binder进程间通信(IPC)机制的基础概念和实现方法。Binder是一种高性能、安全的IPC机制,基于C/S架构实现。文章详细展示了如何构建Binder服务端,包括定义AIDL接口(ISimpleService.aidl)和数据模型(DataModel.java),以及实现SimpleBinderService服务类。同时提供了客户端(MainActivity.java)的连接实现,通过ServiceConnection与远程服务交互。这些代码示例展示了Binder的基本使用方
2025-11-20 09:45:40
1308
原创 linux 进程与线程(实例详解)
本文介绍了进程与线程的基本概念及C语言实现方法。进程是独立的执行单元,拥有独立地址空间,而线程是进程内的轻量级执行单元,共享进程资源。文中提供了C语言实现示例:(1)进程创建(fork)演示父子进程执行流程;(2)进程间通信(管道)展示数据传输;(3)基本线程创建展示多线程并发执行;(4)线程数据竞争演示共享变量访问问题。这些实例通过代码运行结果直观展示了进程/线程的运行机制和通信方式,帮助理解操作系统中并发编程的核心概念。
2025-11-20 09:37:03
423
原创 谷歌XTS测试介绍
谷歌XTS测试是确保Android设备兼容性、安全性和用户体验的关键认证体系,主要包括CTS、GTS、VTS、STS和CTS Verifier五大核心测试套件。该测试要求设备制造商完成环境准备、测试执行和结果分析等步骤,通过认证后才能在设备预装GMS服务并使用Android商标。XTS测试不仅为开发者提供一致的开发环境,也为用户带来更稳定的使用体验,是Android生态质量保障的重要环节。
2025-11-19 20:15:48
521
原创 keystore问题梳理
摘要:本文分析了系统服务中出现的NullPointerException问题,该问题发生在调用IKeystoreOperation.asBinder()时对象为null。日志显示keystore2服务成功创建操作但返回null值,可能是Binder资源耗尽或传输异常导致。建议检查Binder状态(/proc/binder/stats)、内存使用情况,优化密钥操作频率,增加Binder内存配置,并添加资源监控。临时措施可重启相关服务,长期方案需解决潜在资源泄漏问题。
2025-11-19 09:34:28
851
原创 Linux系统压缩解压指令详解与实例
本文介绍了Linux系统中常用的压缩工具及其基本用法。主要内容包括单文件压缩工具(gzip、bzip2、xz)、归档工具(tar)以及与压缩工具的组合使用,还包括跨平台工具(zip)和高压缩率工具(7z、rar)。 单文件压缩工具部分演示了如何压缩/解压文件、保留原文件、设置最大压缩率以及查看压缩文件内容。归档工具tar展示了如何创建/解压归档文件,并与gzip、bzip2、xz等压缩工具配合使用。zip和7z部分介绍了跨平台压缩、分卷压缩、加密压缩等高级功能。 每种工具都提供了基本命令示例,包括压缩、解压
2025-11-05 21:30:03
446
原创 理解widevine密钥写入
Widevine密钥写入流程涉及Google DRM方案的核心概念与MTK平台实现。Widevine通过L1-L3三级安全方案保护媒体内容,其中L1密钥存储在TEE安全区域。MTK平台写入流程包括:Google提供Keybox→OEM转换格式→通过Bootloader或系统工具写入TEE。关键环节包含密钥完整性校验、TEE安全存储及硬件隔离保护。调试时可分析MediaDrm、WVDrmEngine等日志标签,成功时显示"Keybox stored successfully",失败可能因格
2025-11-05 21:04:54
1007
原创 MTK平台详解`ro.boot.serialno` 的实现流程 adb devices输出序列号
本文详细解析了Android系统中ro.boot.serialno属性的全链路传递流程。从Bootloader阶段获取序列号开始,通过内核命令行参数传递给Android系统,并由Init进程进行关键属性转换,最终映射为ro.serialno系统属性。文章提供了各阶段的代码路径、关键函数调用和日志追踪方法,特别是针对MTK平台的专用调试技巧,包括工程模式使用方法、日志抓取路径以及常见问题的解决方案。该解析为开发者理解设备序列号传递机制和排查相关问题提供了全面的技术参考。
2025-11-04 09:31:28
1460
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅