安卓驱动面试后对framework的思考
今天去面试安卓驱动工程师的岗位首先他问了我安卓hwui当时有点懵以下是常见的framework总结--------------------------------------------------------------------------- | Java Framework | | | | -------------------- -------------------- -------------------- | | | UI 体系 | | 四大组件 | | 系统服务 | | | | View / ViewGroup | | Activity | | AMS (Activity Mgr) | | | | Canvas / Paint | | Service | | WMS (Window Mgr) | | | | Layout | | BroadcastReceiver | | PMS (Package Mgr) | | | | Resource | | ContentProvider | | NotificationMgr | | | ------------------- ------------------- ------------------- | | | | | | ------------|-----------------------|-----------------------|-------------- | HardwareRenderer | Binder IPC (JNI ↓) | v v v --------------------------------------------------------------------------- | Native Framework C/C Libraries / Daemons | | | | -------------------- -------------------- -------------------- | | | 图形 (Graphics) | | IPC / 系统基础 | | 多媒体 (Media) | | | | HWUI | | libbinder | | AudioFlinger | | | | SurfaceFlinger | | servicemanager | | MediaPlayerService | | | | Skia | | init | | MediaCodec | | | | EGL / GLES / Vulkan| | ueventd / logd | | CameraService | | | -------------------- -------------------- -------------------- | | | | -------------------- -------------------- -------------------- | | | 存储 (Storage) | | 网络 (Network) | | 安全 (Security) | | | | vold | | netd | | keystore | | | | installd | | mdnsd | | gatekeeperd | | | | sdcard | | wificond | | fingerprintd | | | -------------------- -------------------- -------------------- | | | | -------------------- -------------------- | | | 输入 (Input) | | 其他 (Others) | | | | inputflinger | | healthd | | | | EventHub | | lmkd | | | | InputReader | | statsd | | | -------------------- -------------------- | --------------------------------------------------------------------------- | HAL ↓ | ---------------------------------------------------------------------------事后复盘我试着想办法理解framework的复杂对照图 → 实际目录映射 Android Framework 核心模块源码路径解析 [1] UI 体系 (UI System) -------------------------------------------------------------------------------- ▪ 架构说明Android 的 UI 源码是按“功能”进行分包的而不是把所有 UI 放到一个模块目录下。 ▪ 源码路径 ├─ frameworks/base/core/java/android/view/ │ └─ 核心类View, ViewGroup, ViewRootImpl (负责视图层级与事件分发) │ ├─ frameworks/base/core/java/android/graphics/ │ └─ 核心类Canvas, Paint, Bitmap (负责底层 2D 图形绘制与渲染) │ └─ frameworks/base/core/java/android/widget/ └─ 核心类Button, TextView, LinearLayout 等 (开发者常用的具体 UI 控件) [2] 四大组件 (App Components) -------------------------------------------------------------------------------- ▪ 架构说明应用层的四大核心组件定义统一归置在 app 目录下。 ▪ 源码路径 └─ frameworks/base/core/java/android/app/ ├─ Activity (界面容器) ├─ Service (后台服务) ├─ BroadcastReceiver (广播接收器) └─ ContentProvider (内容提供者) [3] 系统服务 (System Services) -------------------------------------------------------------------------------- ▪ 架构说明系统核心服务的具体实现代码独立于 core 库统一在 services 目录下管理。 ▪ 源码路径 ├─ frameworks/base/services/core/java/com/android/server/am/ │ └─ 模块AMS (ActivityManagerService) - 负责四大组件的启动、切换与进程管理 │ ├─ frameworks/base/services/core/java/com/android/server/wm/ │ └─ 模块WMS (WindowManagerService) - 负责窗口管理与 Z 轴排序 (内部包含 219 个类) │ ├─ frameworks/base/services/core/java/com/android/server/pm/ │ └─ 模块PMS (PackageManagerService) - 负责 APK 的解析、安装与权限管理 │ └─ frameworks/base/services/core/java/com/android/server/notification/ └─ 模块NMS (NotificationManagerService) - 负责全局通知的分发与管理为什么会觉得乱——每块代码被 binder 劈成三段以 WMS窗口管理 为例一个服务在代码里有 3 份① 公开 APIApp 能调的 core/java/android/view/WindowManager.java ← 接口定义 ② AIDL 接口binder 契约 core/java/android/view/IWindowManager.aidl ← 跨进程用 ③ 真正的实现跑在 system_serverservices/core/java/com/android/server/wm/ WindowManagerService.java ← 你想看逻辑就找它App 进程调用 WindowManager 时其实是通过 binder 飞到 system_server 里执行WindowManagerService。所以你找实现永远要去 services/ 目录找接口/类去 core/java/android/。另外两个容易迷路的点1. 隐藏 APIcore/java/com/android/internal/如 PhoneWindow——对外不可见但框架内部用的类也在 core 下包名是com.android.internal 而不是 android。2. 系统服务不止一个目录老版本还有 services/java/新版统一在 services/core/java/com/android/server/按服务名分am/wm/pm/notification/input 等子目录。一句话规律core/java/android/ 看是什么类、接口services/.../server/ 看怎么干活实现com.android.internal 藏着干活的辅助类。此外还问了我vop和drm之间了解的深度有多少第一层能精准映射软硬模型入门级DRM 为了兼容天下所有的显示硬件抽象出了一套标准的软件模型KMS你要能把它和 VOP 的物理构造一一对应起来Plane图层- 对应 VOP 里的硬件 Overlay 模块比如视频层、UI层。CRTC控制器- 对应 VOP 里的时序发生器控制分辨率、刷新率。Encoder / Connector输出- 对应底层的PHY 物理接口HDMI、MIPI DSI 等芯片引脚。第二层讲透数据流转与零拷贝进阶级不要只说“DRM 控制 VOP”要说清楚数据是怎么流动的。 你要点出dma-buf的核心地位。GPU 把 3D 画面渲染完放在内存里DRM 不需要让 CPU 把这块内存复制给 VOP。DRM 只需要把这块内存的物理地址句柄丢给 VOP 的寄存器VOP 就会通过硬件总线AXI直接去内存里“吸”数据。这就是零拷贝Zero-copy极大地节省了系统带宽。第三层掌握时序与同步机制硬核级这是最体现底层功底的环节。你要解释清楚它们是如何协同“卡点”的 当 GPU 还在画图时VOP 已经在扫上一帧的画面了。GPU 画完后会发一个fence信号给 DRM告诉它“我这块 Buffer 画完了”。但 DRM 不会立刻让 VOP 去拿数据而是会一直等到屏幕发出下一个Vsync垂直同步信号。 此时DRM 触发page flip翻页把新 Buffer 的地址写入 VOP 寄存器VOP 在下一个扫描周期完美地把新画面送上屏幕从而避免了画面撕裂Tearing。这种从高层抽象到物理寄存器再穿插异步同步机制的解释逻辑足以证明你对显示链路有着非常通透的理解。在你后续梳理这套显示控制逻辑时你打算重点从哪个角度比如驱动代码层面的初始化还是 Buffer 的流转链路切入去深入探讨呢--------------------------------------------------------------------------- | Native Framework (User Space) | | | | -------------------------------------------------------------------- | | | 图形 (Graphics) | | | | -------------------- | | | | | SurfaceFlinger | -- 收集所有 App 画面进行合成管理 | | | | | OpenGL / Vulkan | -- 3D 渲染 API | | | | ------------------- | | | ------------|------------------------------------------------------- | | | (通过 HWC API 交接) | ---------------|----------------------------------------------------------- v --------------------------------------------------------------------------- | HAL (Hardware Abstraction Layer) | | | | -------------------- -------------------- | | | HWC (HWComposer) | | Gralloc (内存分配) | | | | 决定图层合成策略: | | 分配图形缓冲区 | | | | 谁用 GPU(Client) | | (dma-buf) | | | | 谁用 VOP(Device) | -------------------- | | ------------------- | | | (通过 libdrm 库调用 ioctl) | ------------|-------------------------------------------------------------- v --------------------------------------------------------------------------- | Linux Kernel (Kernel Space) | | | | -------------------------------------------------------------------- | | | DRM (Direct Rendering Manager) | | | | | | | | -------------------- ------------------------------------ | | | | | GEM (内存管理) | | KMS (模式设置与显示控制) | | | | | | 显存分配, dma-buf | | CRTC (对应硬件 VOP) | Plane (图层) | | | | | -------------------- | Encoder(信号编码) | Connector | | | | | | | | | -------------------- ------------------------------------ | | | | | GPU Driver (Mali) | | Display Driver (如 rockchip_drm) | | | | | | 负责画什么 | | 负责什么时候送、送到哪 (Vsync) | | | | -------------------------------------------------------------- | | | fence 同步机制 (GPU 画完通知 DRM)| | ---------------|----------------------------------|-------------------- v v --------------------------------------------------------------------------- | SoC Hardware | | | | -------------------- ------------------------------------ | | | GPU | | VOP (Video Output Processor) | | | | 渲染 3D / 合成图层 | | 硬件图层叠加 (Overlay) | | | | (结果输出到内存) | | 产生时序信号 (Vsync, page flip) | | | -------------------- ----------------------------------- | | | | | ------------------v----------------- | | | PHY (物理接口层: MIPI/eDP) | | | ----------------------------------- | | | | | ------------------v----------------- | | | LCD Panel | | -------------------------------------------------------------------------

相关新闻

WebPShop 插件完整使用指南:Photoshop 导出 WebP 与制作动画的免费教程

WebPShop 插件完整使用指南:Photoshop 导出 WebP 与制作动画的免费教程

WebPShop 插件完整使用指南:Photoshop 导出 WebP 与制作动画的免费教程 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop 做网页图片优化时,你大概率听说…

2026/10/14 0:48:01 阅读更多 →
人工智能基础课-03:数学基础-窥一斑而知全豹数理统计

人工智能基础课-03:数学基础-窥一斑而知全豹数理统计

在人工智能的研究中,数理统计同样不可或缺。基础的统计理论有助于对机器学习的算法和数据挖掘的结果做出解释,只有做出合理的解读,数据的价值才能够体现。数理统计(mathematical statistics)根据观察或实验得到的数据来研究随机现象,并对研究对象的客观规律做出合理的估计…

2026/10/6 4:59:22 阅读更多 →
nacos集群安装

nacos集群安装

架构: 部署三个节点的nacos集群,用nginx做反向代理和负载均衡,并且使用MySQL5.7数据库做存储,数据库架构为一主一从 同时部署prometheus和grafana监控nacos容器集群 nacos 客户端与服务端通信需要开放8848和9848两个端口&#xff…

2026/10/4 23:36:18 阅读更多 →

最新新闻

金融时间序列建模全流程:从平稳性检验到GARCH波动率预测

金融时间序列建模全流程:从平稳性检验到GARCH波动率预测

1. 从第一节课到第四章:金融时间序列到底在研究什么如果你正在啃金融相关的课程,大概率会在一门叫《金融时间序列分析》或类似名字的课上卡住。这门课和传统统计学、计量经济学都不一样,它研究的是股票收益率、汇率波动、债券利差这类有“先后…

2026/10/14 0:48:55 阅读更多 →
AgenticOps工程:企业自动化运维的自主决策革命

AgenticOps工程:企业自动化运维的自主决策革命

1. AgenticOps Engineering 的本质与价值AgenticOps Engineering 正在重新定义企业自动化运维的边界。与传统自动化工具不同,这种新型工程范式通过赋予系统自主决策能力,使企业IT基础设施能够像拥有"数字员工"一样主动感知环境变化、预测问题并…

2026/10/14 0:48:55 阅读更多 →
用插件重构知识工作流:浏览器、编辑器与知识库的自动化实践

用插件重构知识工作流:浏览器、编辑器与知识库的自动化实践

知识工作者这个词听起来有点抽象,但落到日常就非常具体:你可能天天在写方案、查资料、写代码、记笔记、做汇报,一天结束回头一看,真正用在"思考"上的时间反而不多,大量时间被复制粘贴、切换窗口、找文件、重…

2026/10/14 0:48:55 阅读更多 →
ABAP单元测试效率提升:ADT工具链实战

ABAP单元测试效率提升:ADT工具链实战

1. 项目概述:当ABAP单元测试遇上效率革命在SAP开发领域,ABAP Unit作为核心测试框架已经存在多年,但真正能将其融入日常开发的团队却不多见。问题不在于框架本身,而在于传统测试流程中存在太多效率断层——从编写测试用例到执行测试…

2026/10/14 0:48:55 阅读更多 →
Python远程批量关机实战:WinRM/WMI/SMB三路径选型与避坑

Python远程批量关机实战:WinRM/WMI/SMB三路径选型与避坑

简介:本资源是一份面向Windows系统管理员与IT运维人员的Python自动化脚本工具包,解决多台设备集中管理场景下的远程批量关机需求,适用于机房巡检、课室终端维护、故障应急处置等实际运维任务。压缩包共3个文件(923B)&a…

2026/10/14 0:48:55 阅读更多 →
尖叫声音样本数据集eva:从包结构到训练基线的完整实践

尖叫声音样本数据集eva:从包结构到训练基线的完整实践

简介:EVA尖叫声音样本数据集是一份面向音乐信息检索(MIR)与音频分类研究的人声尖叫样本库,由台湾清华大学MIR课程项目整理,旨在为尖叫检测、异常声音识别、SVM分类等实验提供稀缺的领域数据。压缩包共63个文件&#xf…

2026/10/14 0:47:55 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →