Level 8:App 点一下控制板子上的 LED
Level 8:App 点一下控制板子上的 LED 我想做 在手机上装一个自己写的 App,点一下按钮,板子上的物理 LED 亮或灭。打通从 App 到 GPIO 寄存器的完整链路。 先回答三个问题 App 是怎么跟硬件通信的? App (Java) ↓ Binder IPC Native Service (C++) ↓ hw_get_module() HAL (xxx_module_t) ↓ open("/dev/xxx") Kernel Driver ↓ writel() GPIO 寄存器 每一层都是独立的模块,层与层之间有标准接口。替换其中任何一层不影响其他层。 HAL 解决了什么问题? 没有 HAL 之前:App 直接 open/ioctl 设备节点 问题:驱动接口变了,所有 App 都得改 HAL 的解决:给上层提供稳定的抽象接口,驱动变化只改 HAL 实现,不涉及 Framework 和 App 在 Treble 架构中,HAL 更是 vendor 和 system 的契约边界 Binder 是什么? Android 特有的 IPC(进程间通信)机制 App 和 Native Service 是不同进程,不能直接函数调用 Binder 让它们像调用本地函数一样跨进程通信 Binder 还负责权限校验——ServiceManager 检查调用方有没有权限访问某个服务 需要懂的知识 ioctl 驱动的写法(在 Level 4 驱动基础上扩展) ...