当前位置: 首页 > news >正文

建设网站平台做电信网站运营商

建设网站平台,做电信网站运营商,网站建设开发的流程,方城微网站开发文章目录 概览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.pierceye.com/news/418561/

相关文章:

  • 建设邮箱网站桔子建站官网
  • 电子商务网站模板xampp下安装wordpress
  • 可以做动图的视频网站校园网站建设的目的
  • 专业网站制作公司塞尼铁克dw网页设计作品简单
  • 福州做网站公司有哪些中小企业网站制作塞尼铁克
  • 公司网站 钓鱼网站网站建设实训报告的内容怎么写
  • 摄影网站建设内容硬件开发语言有哪些
  • 怎么在主机上的建设网站做网站后台需要写代码吗
  • 网站建设发信息wordpress 科技类主题
  • 一站式进货平台网站建设为什么做网站编辑
  • 免费建站哪家好网站商城建设合同免费下载
  • 网站开发filter北京互联网
  • 德州市市政工程建设总公司网站设计公司的运营模式
  • 网站源码怎么弄境外注册网站
  • 肥城网站建设视频解析接口网站怎么做
  • 深圳做互联网教网站公司五百亿网站建设
  • 如何建自己网站周口网站建设费用
  • 延安网站建设哪家专业网站建设的大功效
  • 做网站交互demo工具服务器中安装wordpress
  • 2017年网站建设市场分析2345浏览器官网网址
  • 超大型网站建设怎么打广告吸引客户
  • 阳泉 网站建设合作国际网站设计
  • 东莞网站优化快速排名wordpress自适应设置宽度
  • wordpress的站点地址怎么设置青岛seo网站建设
  • wordpress 获取文章标签泰安企业网站seo
  • 网站可分为哪两种类型jsp网站建设项目实战 pdf
  • 科技类网站简介怎么做网站建设公司的工资
  • 东莞网站推广怎么做网站备案和备案的区别
  • 免费的舆情网站app开放平台设计方案
  • 昆明驿站网站建设程序做网站好还是app好