ITOP4412----基于4.19.99Linux内核的4.3寸显示屏驱动(二)

ITOP4412----基于4.19.99Linux内核的4.3寸显示屏驱动(一)

接上文,在ITOP4412开发板基于Linux4.19内核版本上,移植了4.3寸屏WXCAT43-TG6屏幕驱动,但是驱动的显示效果不正常。

异常表现为上电后打印的log信息、QT写的APP字体的显示异常,(这部分功能是调用系统API的)。使用自己编写的APP对屏幕缓冲区填充色彩却一切正常(这里使用的是内存映射,直接往显存写)。问题应该就出现在这了。为解决这个BUG,决定从FRAMEBUFFER框架开始研究,检查一下驱动哪部分出了问题。

FrameBuffer框架是Linux下的一个图形显示框架,比较经典,当然图形框架不止这一种,在Linux4.19内核中,三星已经使用了另一套DRM框架对图形驱动进行了替换。从我目前了解,DRM框架功能更为丰富,支持一些图形处理的功能例如3D,后面可以尝试使用DRM去适配一个新的驱动。

FrameBuffer简介

在内核代码文档中,

Documentation\fb\framebuffer.txt

描述了FrameBuffer的特点,它既是一个字符设备,也像一个普通的内存设备。这样抽象出来的LCD设备,就是一块内存,要让LCD显示内容,对“内存”读写就可以了。

一个FrameBuffer由一个fb_info结构体来描述,如下图,该结构体位于。

include\linux\fb.h

在这里插入图片描述
从图中可以看出fb_info结构体也是由一些结构体组成。

一般情况下,编写FrameBuffer框架下的LCD驱动,只需要在驱动中对三个结构体完成描述即可。

这个三个结构体,分别描述了LCD设备的参数,可变参数,操作函数。

  • struct fb_info
    • —>struct fb_var_screeninfo;
    • —>struct fb_fix_screeninfo;
    • —>struct fb_ops;

三个结构体内容:

前两个结构体位于:

include\uapi\linux\fb.h

fb_var_screeninfo
struct fb_var_screeninfo {
   
	__u32 xres;			/* visible resolution		*/
	__u32 yres;
	__u32 xres_virtual;		/* virtual resolution		*/
	__u32 yres_virtual;
	__u32 xoffset;			/* offset from virtual to visible */
	__u32 yoffset;			/* resolution			*/

	__u32 bits_per_pixel;		/* guess what			*/
	__u32 grayscale;		/* 0 = color, 1 = grayscale,	*/
					/* >1 = FOURCC			*/
	struct fb_bitfield red
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值