Android HAL 介绍
一个硬件设备对应一个模块(动态库),可以各自独立更新,模块版本与设备版本需要保持兼容性,也就是特定版本的模块,只能加载与之兼容的设备。通常情况模块具有向后兼容性,支持最高版本及其以下版本的设备。
模块封装了该类型设备的通用操作,接口很少发生变动或者只是增加新接口,确保二进制兼容性,兼容低版本设备。
设备封装了特定版本的硬件设备,接口变化更频繁,类似 camera 从 HALv1, HALv2 到目前的 HALv3,封装成不同的设备子类,具体硬件根据其硬件特性选择实现不同版本的 device 接口。
hw_device_t 作为 device 的基类,放置于继承的具体设备类型 struct 子类的第一个位置,好处是首地址相同,可以直接做类型转换。子类型需要实现对应版本的接口函数,hw_module_t 作为 module 的基类,放置于继承的具体模块类型 struct 子类的第一个位置,好处是首地址相同,可以直接做类型转换。基类定义了唯一一个接口函数。
hw_module_methods_t.open, 打开硬件设备。所有模块都需要实现该接口。不同类型的模块可以定义自己的接口函数,比 ...