**
jz2440 4.3寸屏学习 framebuffer架构调试记录
**
static struct fb_info *brooke_frambuff;
1.brooke_frambuff = framebuffer_alloc(0, NULL);//fb_info空间分配
2.fb_info 中var,fix 相关结构体填充
strcpy(brooke_frambuff->fix.id, “brookelcd”);
brooke_frambuff->fix.smem_len = 48027216/8;//像素大小
brooke_frambuff->fix.type = FB_TYPE_PACKED_PIXELS;
brooke_frambuff->fix.visual = FB_VISUAL_TRUECOLOR;//FB_VISUAL_TRUECOLOR
brooke_frambuff->fix.line_length = 480*2;//行像素
brooke_frambuff->var.xres = 480;//分辨率
brooke_frambuff->var.yres = 272;
brooke_frambuff->var.xres_virtual = 480;//虚拟分辨率
brooke_frambuff->var.yres_virtual = 272;
brooke_frambuff->var.bits_per_pixel = 16;
/RGB 565 /
brooke_frambuff->var.red.offset = 11;//偏移
brooke_frambuff->var.red.length = 5;//大小
brooke_frambuff->var.green.offset = 5;
brooke_frambuff->var.green.length = 6;
brooke_frambuff->var.blue.offset = 0;
brooke_frambuff->var.blue.length = 5;
brooke_frambuff->var.activate = FB_ACTIVATE_NOW;
3.buffer 空间分配返回虚拟地址
dma_alloc_writecombine(NULL,
brooke_frambuff->fix.smem_len,&brooke_frambuff->fix.smem_start, GFP_KERNEL);
brooke_frambuff->screen_size = 48027216/8;
4.brooke_frambuff->fbops = &s3c2440fb_ops;//操作函数
static struct fb_ops s3c2440fb_ops = {
.owner = THIS_MODULE,
.fb_setcolreg = s3c2440fb_setcolreg,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
};
brooke_frambuff->pseudo_palette = pseudo_palette;
5.注册fb_info结构体,register_framebuffer(brooke_frambuff);
相关命令:
mount -t nfs -o nolock,vers=2 192.168.1.21:/work/drivers /mnt
insmod cfbfillrect.ko && insmod cfbcopyarea.ko && insmod cfbimgblt.ko && insmod lcd.ko
echo hello > /dev/tty1
cat lcd.ko > /dev/fb0
相关参数计算:
vbpd ,vfpd
hbpd ,hfpd
hsync,vsync