炫酷个人网站php源码网站流量和带宽
web/
2025/10/2 21:15:41/
文章来源:
炫酷个人网站php源码,网站流量和带宽,购物模板网站建设,网站流量指的是什么意思文章目录 概览Android硬件接口HALGralloc与Framebuffer Gralloc模块的加载Gralloc提供的接口Android原生的Gralloc实现打开framebuffer设备打开gralloc设备 参考 概览 Linux内核提供了统一的framebuffer显示驱动。设备节点/dev/graphics/fb*或者/dev/fb*#xff0c;其中fb0表示… 文章目录 概览Android硬件接口HALGralloc与Framebuffer Gralloc模块的加载Gralloc提供的接口Android原生的Gralloc实现打开framebuffer设备打开gralloc设备 参考 概览 Linux内核提供了统一的framebuffer显示驱动。设备节点/dev/graphics/fb*或者/dev/fb*其中fb0表示第一个Monitor。 Android的HAL层提供了Gralloc包括fb和gralloc两个设备。fb负责打开内核的framebuffer、初始化配置。gralloc管理帧缓冲区的分配和释放。所以上层只需要通过Gralloc来间接访问帧缓冲区来保证对framebuffer的统一管理。 HAL层的composer为UI合成提供接口被surface flinger调用。 VSync是“Project Butter”加入的同步机制可以通过硬件产生也可以通过软件即VSyncThread模拟。 OpenGL ES 是一个通用函数库需要和具体平台建立关联才可以工作。 FramebufferNativeWindow负责OpenGL ES在Android平台本地化的中介之一 EGL为OpenGL ES配置本地窗口。
Android硬件接口HAL
HAL是Android很多子系统例如显示系统、音频系统等和Linux kernel驱动之间通信的统一接口。
Gralloc与Framebuffer
Framebuffer是内核系统提供的图形硬件的抽象描述它占用了系统存储空间的一部分是一块包含屏幕显示信息的缓冲区。 Android中Framebuffer提供的设备文件节点是/dev/graphics/fb*。
Android的显示系统借助于HAL层的Gralloc操作帧缓冲区。
Gralloc模块的加载
Gralloc对应的模块是由FramebufferNativeWindow在构造函数中加载的。
hw_get_module(GRALLOC_HARDWARE_MODULE_ID, module);#define GRALLOC_HARDWARE_MODULE_ID grallochw_get_module查找和ID值匹配的库
#define HAL_LIBRARY_PATH1 /system/lib/hw
#define HAL_LIBRARY_PATH2 /vendor/lib/hwlib库的命名形式
gralloc.[ro.hardware].so
gralloc.[ro.product.board].so
gralloc.[ro.board.platform].so
gralloc.[ro.arch].so默认的 gralloc.default.soGralloc提供的接口
/*hardware/libhardware/include/hardware/Hardware.h*/
typedef struct hw_module_t {…struct hw_module_methods_t* methods;//一个HAL库必须提供的方法…
} hw_module_t;typedef struct hw_module_methods_t {int (*open)(const struct hw_module_t* module, const char* id,struct hw_device_t** device);
} hw_module_methods_t;前面提供的架构图中open接口可以帮助上层打开“fb0”和“gpu0”。fb0就是主屏幕gpu0负责图形缓冲区的分配和释放。
/*frameworks/native/libs/ui/FramebufferNativeWindow.cpp*/
FramebufferNativeWindow::FramebufferNativeWindow()
: BASE(), fbDev(0), grDev(0), mUpdateOnDemand(false)
{…err framebuffer_open(module, fbDev); //打开fb设备err gralloc_open(module, grDev);//打开gralloc设备Android原生的Gralloc实现
Android原生态的Gralloc实现在hardware/libhardware/modules/gralloc中它open接口对应的是
/*hardware/libhardware/modules/gralloc/Gralloc.cpp*/
int gralloc_device_open(const hw_module_t* module, const char* name, hw_device_t** device)
{int status -EINVAL;if (!strcmp(name, GRALLOC_HARDWARE_GPU0)) {//打开gralloc设备…} else {status fb_device_open(module, name, device);//否则就是fb设备}return status;
}打开framebuffer设备
/*hardware/libhardware/modules/gralloc/Framebuffer.cpp*/
int fb_device_open(hw_module_t const* module, const char* name, hw_device_t** device)
{int status -EINVAL;if (!strcmp(name, GRALLOC_HARDWARE_FB0)) {//设备名是否正确fb_context_t *dev (fb_context_t*)malloc(sizeof(*dev));/分配hw_device_t空间 这是一个“壳”*/memset(dev, 0, sizeof(*dev));//初始化良好的编程习惯…dev-device.common.close fb_close;//这几个接口是fb设备的核心dev-device.setSwapInterval fb_setSwapInterval;dev-device.post fb_post;…private_module_t* m (private_module_t*)module;status mapFrameBuffer(m);//内存映射以及参数配置if (status 0) {…*device dev-device.common;//“壳”和“核心”的关系}}return status;
}标准的fb设备需要实现int (*post)(struct framebuffer_device_t* dev, buffer_handle_t buffer);,将buffer数据post到屏幕上 这样buffer内容在下一次VSYNC中被显示出来。 设置缓冲区swap的时间间隔int (*setSwapInterval)(struct framebuffer_device_t* window, int interval); 设置刷新区域int (*setUpdateRect)(struct framebuffer_device_t* window, int left, int top, int width, int height);
接着是打开kernel层的fb设备和对fb进行配置在mapFrameBuffer()中完成它会尝试打开
/dev/graphics/fb%u或者 /dev/fb%u打开后通过
ioctl(fd, FBIOGET_FSCREENINFO, finfo);
ioctl(fd, FBIOGET_VSCREENINFO, info)得到屏幕参数接着通过ioctl(fd, FBIOPUT_VSCREENINFO, info)对fb进行配置。
mapFrameBuffer()的另外一个任务是做为fb设备做内存映射 void* vaddr mmap(0, fbSize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); module-framebuffer-base intptr_t(vaddr);memset(vaddr, 0, fbSize);打开gralloc设备
/*hardware/libhardware/modules/gralloc/Gralloc.cpp*/
int gralloc_device_open(const hw_module_t* module, const char* name, hw_device_t** device)
{int status -EINVAL;if (!strcmp(name, GRALLOC_HARDWARE_GPU0)) {gralloc_context_t *dev;//做法和fb类似dev (gralloc_context_t*)malloc(sizeof(*dev));//分配空间/* initialize our state here */memset(dev, 0, sizeof(*dev));…dev-device.alloc gralloc_alloc; //从提供的接口来看gralloc主要负责“分配和释放”操作dev-device.free gralloc_free;…
}总结下Android原生的Gralloc
参考
《深入理解Android内核设计思想》
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85819.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!