Android hal开发
HalStub的框架比较简单,三个结构体、两个常量、一个函数,简称321架构,它的定义在:
alps/hardware/libhardware/include/hardware/hardware.h
alps/hardware/libhardware/hardware.c
下面我们先看下三个重要的结构体,其包含在hardware.h中
每个硬件对象都由hw_module_t来描述,只要我们拿到了这个硬件对象,就可以调用它的open方法,返回这个硬件对象的硬件操作接口,然后就可以通过这些硬件操作接口来间接操作硬件。只不过,open方法被hw_module_methods_t结构封装了一次,硬件操作接口被hw_device_t封装了一次而已。下面这张图可以反映出它们三者的关系:
接下来在看321架构中的:两个符号常量和一个函数:
1. //HAL Stub对象固定的名字
2. #define HAL_MODULE_INFO_SYM HMI
3.
4. /**
5. * Name of the hal_module_info as a string
6. */
7.
8. //字符串形式的名字
9. #define HAL_MODULE_INFO_SYM_AS_STR "HMI"
10.
11. /**
12. * Get the module info associated with a module by id.
13. *
14. * @return: 0 == success, <0 == error and *module == NULL
15. */
16. //通过硬件名来获得硬件HAL Stub对象
17. int hw_get_module(const char *id, const struct hw_module_t **module);