Linux驱动开发(十二)---树莓派framebuffer学习(改造OLED)

前文回顾

《Linux驱动开发(一)—环境搭建与hello world》
《Linux驱动开发(二)—驱动与设备的分离设计》
《Linux驱动开发(三)—设备树》
《Linux驱动开发(四)—树莓派内核编译》
《Linux驱动开发(五)—树莓派设备树配合驱动开发》
《Linux驱动开发(六)—树莓派配合硬件进行字符驱动开发》
《Linux驱动开发(七)—树莓派按键驱动开发》
《Linux驱动开发(八)—树莓派SR04驱动开发》
《Linux驱动开发(九)—树莓派I2C设备驱动开发(BME280)》
《Linux驱动开发(十)—树莓派输入子系统学习(红外接收)》
《Linux驱动开发(十一)—树莓派SPI驱动学习(OLED)》

继续宣传一下韦老师的视频

70天30节Linux驱动开发快速入门系列课程【实战教学、技术讨论、直播答疑】

在这里插入图片描述

framebuffer介绍

framebuffer从字面上理解是“帧缓冲”,一般有如下理解:

  • 单纯的把framebuffer看作一块内存,这部分内存包含了将要scan out显示的数据。
  • 等价于framebuffer driver。通常作为LCD控制器或者其他显示设备的驱动,FrameBuffer驱动是一个字符设备,设备节点是/dev/fbX,主设备号为29,次设备号递增,用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。Framebuffer设备为上层应用程序提供系统调用,也为下一层的特定硬件驱动提供接口;那些底层硬件驱动需要用到这儿的接口来向系统内核注册它们自己。所以可以看成是一个graphic hardware-independent抽象层,上面对接应用层,下面对接LCD等硬件的驱动。
  • 有一种说法是操纵lcd显示就是操纵framebuffer,表面上来看是这样的。实际上是frambuffer就是linux内核驱动申请的一片内存空间,然后lcd内有一片sram,cpu内部有个lcd控制器,它有个单独的dma用来将frambuffer中的数据拷贝到lcd的sram中去 拷贝到lcd的sram中的数据就会显示在lcd上,LCD驱动和framebuffer驱动没有必然的联系,它只是驱动LCD正常工作的,比如有信号传过来,那么LCD驱动负责把信号转成显示屏上的内容,至于什么内容这就是应用层要处理的。

我理解的就是它对应一个设备/dev/fbx,通过它就可以直接写屏幕。后面的操作不需要我们操心,系统自动完成。
在这里插入图片描述

OLED

其实我们的oled并不具备这种控制器,所以它没有提供显存的地址,这里用oled测试,也只是注册好fb之后,手动将fb的数据通过SPI驱动,更新到屏幕上去。
在这里插入图片描述

驱动中的核心步骤

其中最关键重点步骤,就是分配,设置,注册fb_info结构体

static int oled_probe(struct spi_device *spi)
{
   	
	
	printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
	oled_dev = spi;

	/* 分配/设置/注册 fb_info */
	oled_fb_info = framebuffer_alloc(0, &spi->dev);


	/* 1.2 设置fb_info */
	/* a. var : LCD分辨率、颜色格式 */
	oled_fb_info->var.xres_virtual = oled_fb_info->var.xres = 128;//宽度
	oled_fb_info->var.yres_virtual = oled_fb_info->var.yres = 64;//高度
	
	oled_fb_info->var.bits_per_pixel = 1;  //1位表示一个像素
	
	/* b. fix */
	strcpy(oled_fb_info->fix.id, "pgg_oled");
	oled_fb_info->fix.smem_len = oled_fb_info->var.xres * oled_fb_info->var.yres * oled_fb_info->var.bits_per_pixel 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值