发布时间:2026/8/14 16:02:54
安卓驱动面试后对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 | | -------------------------------------------------------------------------

相关新闻

2026/8/14 15:57:54

windows 驱动实例分析系列: wintun驱动分析-SetupApiHost篇(下)

二、代码逐层深度解析 2.2 host_win7.h —— Windows 7 专属的“无中生有” 2.2.2 CreateInstanceWin7 的完整流程 VOID __stdcall CreateInstanceWin7(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) {/* 1. 创建设备信息 */SetupDiCreateDeviceInfoW(DevInfo…

2026/8/14 15:57:54

windows 驱动实例分析系列: wintun驱动分析-SetupApiHost篇(上)

Wintun 之 SetupApiHost 模块深度解析 这个模块主要编译为window驱动的安装工具。 一、模块定位:为什么需要“主机代理”? 1.1 问题的根源 在 Windows 平台上,驱动相关的 Setup API(如 SetupDiCreateDeviceInfoListExW、SetupDiCa…

2026/8/14 17:13:13

stm32GPIO复用功能与重映射

本文系统讲解 STM32 的 AFIO 复用功能与重映射机制,覆盖术语、数据手册 8.3/8.4 节解读、寄存器位域详解及六步配置流程。 目录1. 术语解释2.参考数据手册8.3节,复用功能I/O和调试配置8.3 开篇总览8.3.1 把 OSC32_IN/OSC32_OUT 作为 GPIO 端口 PC14/PC15…

2026/8/14 17:13:13

用 ASP.NET 搭一个地方特产商城:54125 大理特色产品销售平台实战梳理

项目概览项目项内容开发语言C#开发框架ASP.NET数据库SQL Server系统模式B/S 架构核心业务产品展示、购物车、订单、配送、售后、公共信息管理项目定位:把地方特色产品搬到线上大理具有普洱茶、手工艺品、旅游纪念品等特色产品资源,但传统线下销售渠道受地…

2026/8/14 17:13:13

AI 诊断工具普及,普通维修师傅还有饭吃吗?

这段时间刷短视频,天天刷到那种AI电路板诊断仪,什么一键定位短路、拍个照就识别芯片型号、热成像秒找故障点,评论区一堆人跟着瞎嚷嚷,说再过两年维修师傅都得失业。同行群里也吵得厉害,不少干了十来年的老伙计都发慌&a…

2026/8/14 17:13:13

ACTH (1-39) (rat);SYSMEHFRWGKPVGKKRRPVKVYPNVAENESAEAFPLEF

一、基础信息中文名称:大鼠促肾上腺皮质激素 (1-39)三字母序列:Ser-Tyr-Ser-Met-Glu-His-Phe-Arg-Trp-Gly-Lys-Pro-Val-Gly-Lys-Lys-Arg-Arg-Pro-Val-Lys-Val-Tyr-Pro-Asn-Val-Ala-Glu-Asn-Glu-Ser-Ala-Glu-Ala-Phe-Pro-Leu-Glu-Phe单字母序列&#xff1…

2026/8/14 17:08:12

经典配准算法一:ICP算法

1.定义:ICP算法的基本原理是:迭代最近点(Iterative Closest Point,ICP)算法是一种经典的三维点云配准算法,其核心思想是通过不断建立源点云与目标点云之间的对应点关系,并迭代求解两组点云之间的…

2026/8/14 4:27:24

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/14 4:27:24

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/14 0:00:09

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:09

VSCode高效Git管理:从入门到实战技巧

1. 为什么选择VSCode进行Git代码管理作为微软推出的轻量级代码编辑器,Visual Studio Code(简称VSCode)已经成为全球开发者使用率最高的编辑器之一。根据2023年Stack Overflow开发者调查,VSCode的市场占有率高达74.48%。它内置的Gi…

2026/8/14 4:27:24

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/14 4:27:24

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/14 4:27:24

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…