Android图形系统的分析与移植 -- 六、双缓冲framebuffer的实现

1 实现原理

在基本的FrameBuffer已经实现的基础上,需要实现的是与Android原本模拟器所使用的goldfish FrameBuffer之间的区别。比较一下不难发现,从以下及方面着手:

1.修改初始化FrameBuffer信息;

2.分配FrameBuffer内存

3.实现双缓冲操作函数

下面简单介绍一下实现过程。

2 初始化FrameBuffer信息

FrameBuffer信息主要保存在fb_info这个数据结构中,修改如下:

struct fb_info*fbinfo;

...

fbinfo->fix.ypanstep = 1;

fbinfo->var.yres_virtual= gm->lcd.yres * 2;

fbinfo->fix.smem_len = (gm->lcd.xres*gm->lcd.yres *gm->lcd.bpp / 8) * 2;

3 分配FrameBuffer内存

内存大小控制主要mvfb_info这个数据结构中,修改如下:

struct mvfb_info*fbi;

...

fbi->map_size= PAGE_ALIGN(fbi->fb->fix.smem_len + PAGE_SIZE);

fbi->map_cpu =dma_alloc_writecombine(fbi->dev, fbi->map_size,

&fbi->map_dma, GFP_KERNEL);

4 实现双缓冲操作函数fb_pan_display

首先,实现双缓冲操作函数:

static intmvfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *fb)

{

...

}

FrameBuffer所有的操作函数都保存在fb_ops数据结构中,所以,将上述操作函数添加到此数据结构中:

static structfb_ops mvfb_ops = {

.owner =THIS_MODULE,

.fb_check_var = mvfb_check_var,

.fb_set_par = mvfb_set_par,

.fb_setcolreg = mvfb_setcolreg,

.fb_blank = mvfb_blank,

.fb_pan_display = mvfb_pan_display,

.fb_fillrect = cfb_fillrect,

.fb_copyarea = cfb_copyarea,

.fb_imageblit = cfb_imageblit,

.fb_mmap = mvfb_mmap,

};




经过以上四步,双缓冲FrameBuffer就可以移植成功了,当然,上述只是简单地描述了一下移植的步骤,具体细节没有展开。

更多相关文章

  1. Android菜单操作之创建并响应菜单
  2. JAVA数据结构及算法--Android中Activity的四种启动模式
  3. Android 操作SQLite数据库(初步)-在程序中删除数据库
  4. android操作XML的几种方式
  5. Android手势操作(双击,长按,滑动,滚动,多点触控)
  6. android数据库操作(二)
  7. android的数据库API操作
  8. Android对IO进行读写操作实例
  9. Android中SeekBar进度条操作

随机推荐

  1. eclipse 中设置android emulator 选项
  2. js 引擎 JavaScriptCore
  3. Android下实现injectso
  4. 解析android中的帮助、about、关于作者、
  5. 安卓进阶第五篇之常见动画的使用
  6. Android下Button实现图文混排效果
  7. Android4.0 battery架构和管理
  8. 重拾Android之路之Android签名及打包
  9. 配置ionic+Android开发环境
  10. Android(安卓)Wifi BT的工作流程和portin