1.由3个模块组成
gralloc_module: 负责吧buffer 映射到进程空间 以及lock 操作alloc_device_t :负责分配 buffer ( ashmem ) or framebuffer
framebuffer_device_t: 负责和 /dev/fb 直接打交道
2. module 和 device 的code结构
module 的基本结构是 hw_moudle_tdevce 的基本结构是 hw_device_t
都是struct 结构,其实就相当于一个类(有成员变量和指针)
通过"包裹"实现了"继承"
如:
struct gralloc_module_t{
struct hw_module_t common; ( 父类的东西 )
...
... gralloc_module_t 自己的方法与变量
...
}
同样:private_module_t 实际上上 gralloc_module_t 的子类
struct private_module_t {
gralloc_module_t base( 父类的东西 )
...
... private_module_t 自己的方法与变量
...
}
3.如何 Load module 和 device
a) 全局变量
/hardware/libhardware/modules/gralloc/gralloc.cpp (jelly bean)
78struct private_module_t HAL_MODULE_INFO_SYM = {
79 base: {
80 common: {
81 tag: HARDWARE_MODULE_TAG,
82 version_major: 1,
83 version_minor: 0,
84 id: GRALLOC_HARDWARE_MODULE_ID,
85 name: "Graphics Memory Allocator Module",
86 author: "The Android Open Source Project",
87 methods: &gralloc_module_methods
88 },
89 registerBuffer: gralloc_register_buffer,
90 unregisterBuffer: gralloc_unregister_buffer,
91 lock: gralloc_lock,
92 unlock: gralloc_unlock,
93 },
94 framebuffer: 0,
95 flags: 0,
96 numBuffers: 0,
97 bufferMask: 0,
98 lock: PTHREAD_MUTEX_INITIALIZER,
99 currentBuffer: 0,
100};
b) 用 hw_get_module 打开
frameworks/native/libs/ui/FramebufferNativeWindow.cpp
78: hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module)
返回指针 hw_module_t const* ,但实际就是 private_module_t const *
而后再通过 private_module_t 的open 方法(可以带参数),分别打开 alloc_device_t 和 framebuffer_device_t
3273



被折叠的 条评论
为什么被折叠?



