一、Framebuffer子系统简介
        Framebuffer(帧缓冲)时Linux系统位显示设备提供的一个接口。属于偏底层的显示接口。它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。对于帧缓冲设备而言,只要在缓冲区对应位置写入颜色值,对应的屏幕位置则显示响应的颜色。
         Framebuffer子系统的主要结构如下图(借图展示,侵删)。

从中可以看到,Framebuffer子系统主要通过fb_ops中的成员函数操作LCD显示器。多数的LCD操作规范,可以按照像素点格式的要求按顺序写入帧缓冲区。但是也有一些LCD操作不是很规范,这时,可以使用fb_ops中的fb_write()函数重写。例如spi接口或i2c的0.96寸、分辨率位128×64的oled屏幕,可以使用fb_write()重写。

二、i2c接口的oled屏幕驱动

1. 重要结构体

使用Framebuffer子系统,主要需要配置如下几个重要的结构体:

fb_var_screeninfo代表可修改的LCD显示参数,如分辨率和像素比特数。

fb_fix_screeninfo 代表不可修改的LCD属性参数,如显示内存的物理地址和长度等。

fb_ops,其是LCD底层硬件操作接口集。

fb_cmap,颜色映射表。

fb_info,   Framebuffer子系统主要注册结构体。

fb_info具体如下:

#define OLED_WIDTH     128
#define OLED_HEIGHT    64static struct fb_info oled_info = {.var ={.xres = OLED_WIDTH,       .yres = OLED_HEIGHT,.xres_virtual = OLED_WIDTH,       .yres_virtual = OLED_HEIGHT,.bits_per_pixel = 1,},.fix={.smem_len = OLED_HEIGHT * OLED_WIDTH / 8,           .line_length = 128,},.fbops = &oled_fbops,
};

从上述配置fb_info结构体可以看到,主要配置屏幕的长(xres)、宽(yres)、一个像素显示需要多少位(bits_per_pixel)、显示一帧需要多少字节(smem_len)、一行多少字节(line_length)和一个fb_ops结构体。

其中oled_fbops结构体如下:

static struct fb_ops oled_fbops = {.fb_open      = oled_fb_open,.fb_release   = oled_fb_release,.fb_write     = oled_fb_write,.fb_mmap      = oled_fb_mmap,
}

fb_open、release是打开关闭设备,fb_mmap则是对设备进行抽象的函数,开辟显存的地方,使显存和屏幕显示对应。fb_write则是oled显示是i2c接口的显示屏,故需要对其进行重写。

2. 注册、卸载Framebuffer子系统

注册和卸载需要两个函数:

int register_framebuffer(struct fb_info *fb_info);  //用于注册显示设备

int unregister_framebuffer(struct fb_info *fb_info);  //卸载

三、总结

Framebuffer子系统是Linux系统对显示相关的硬件的一个软件抽象层,其最终是挂载到platform总线上,在probe函数中会调用相关操作。Linux显示目前有两种方式,一种是Framebuffer子系统,另一种则是DRM/KMS,前者比较简单,通过的功能也不多,后者现在是更主流的方式,也复杂很多,等学习了之后再更新。

参考书:Linux设备驱动开发详解(基于最新的Linux4.0内核) 宋宝华著

linux驱动系列学习之Framebuffer子系统(三)相关推荐

  1. linux驱动系列学习之input子系统(二)

    一.input子系统简介 linux系统支持的输入设备众多,例如键盘.鼠标.按键.触摸屏等,linux系统通过抽象出一个input子系统去支持众多的输入设备.input子系统分为三层:上层:输入事件处 ...

  2. linux驱动系列学习之i2c子系统(四)

    一.i2c子系统简介 1. i2c总线 i2c总线因为只用SCL.SDA两根线就实现了设备之间的数据互传,极大的简化PCB布线,因此,2c总线在EEPROM.小型LCD等设备中应用极光.i2c的相关时 ...

  3. linux驱动系列学习之OLED(i2c接口)(八)

    一.OLED简介 本次使用的开发板正点原子Linux阿波罗.屏幕是i2c接口的四针.分辨率为128×64的oled液晶屏.通信接口为i2c.具体的i2c框架使用请参考前面的文章.oled的详细简介请参 ...

  4. Linux驱动分析之MMC子系统框架

    前言 上一篇<一文搞懂SDIO>简单介绍了SDIO接口及相关的协议.接下来来看一下Linux提供的驱动框架. MMC子系统介绍 Linux内核中,MMC不仅是一个驱动,而是一个子系统.内核 ...

  5. Linux驱动分析——input输入子系统

    stm32mp157  盘古开发板  Linux内核版本4.19 目录 1.朱有鹏老师的视频课程笔记和应用测试代码: 2.input子系统架构分析 2.1.输入核心层源码分析 2.1.1.首先是核心模 ...

  6. linux驱动系列学习之DRM(十)

    一.DRM简介 DRM,全称Direct Rending Manger.是目前Linux主流的图形显示框架.相比较传统的Framebuffer,DRM更能适应现代硬件.支持GPU.3D渲染显示等.DR ...

  7. ⑭tiny4412 Linux驱动开发之cpufreq子系统驱动程序

    本次我们来说一下CPU动态调频子系统. 首先来看一下三星Exynos 4412的datasheet,如下: 上图就是Exynos 4412的时钟分布图,可以看到CPU的频率可以在1.4GHz~200M ...

  8. Linux驱动BSP (pinctrlgpio子系统)

    文章目录 一.pinctrl 子系统 1.简介 2. iomuxc 3.怎么看设备树里面pinctrl子系统每个外设的PIN 配置 4.添加设备树中 pinctrl 节点模板 二. gpio 子系统 ...

  9. Linux驱动框架之framebuffer驱动框架

    1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...

最新文章

  1. flexnet licensing 启动多个服务_又小又灵巧,浪潮边缘计算服务器获深度评测高分...
  2. PostSharp的AOP设计在.NET Remoting中的应用
  3. 北京/上海/杭州 | 蚂蚁金服智能引擎技术事业部招聘知识图谱算法工程师
  4. Windows下编译openssl库
  5. 脑洞大开的插画师,每幅都戳到我诡异的笑点
  6. python调用c++动态库_Python应用:调用C/C++动态链接库的方法详解
  7. 【毕业答辩】毕业设计答辩前期准备
  8. 二相漏电断路器接线图_怎么看配电柜接线图?配电柜接线图读图技巧
  9. linux安装windows常用中文字体库
  10. 威纶触摸屏485轮询通讯_威纶触摸屏Modbus TCP\RTU\ASCII通信视频教程
  11. Android状态栏添加QS快捷开关
  12. Android青翼蝠王之ContentProvider
  13. c语言eval函数,百行代码轻便实现C#中的Eval函数
  14. The client-side rendered virtual DOM tree is not matching server-rendered content.
  15. 如何进行产品运营数据分析?
  16. 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)
  17. Android 听筒模式和扬声器模式切换的 实现
  18. FP6276兼容芯片可过EMI认证测试
  19. android inactive InputConnection
  20. docker- health check

热门文章

  1. 家具行业销售人员销售提成管理系统
  2. 乔布斯传阅读体会【持续更新】
  3. SQL SERVER 2005数据导入导出报“错误 0xc00470fe 数据流任务 产品级别对于 组件“源 - TestDB01$”(1) 而言不足”
  4. 错误 0xc00470fe: 数据流任务: 产品级别对于 组件“源 - TestDB01$”(1) 而言不足
  5. mx解析和邮件服务器,邮件交换记录(MX)解析和查询
  6. Linux锁定账号,禁止登录系统设置
  7. 关于AJAX的知识点详解
  8. 转】Dolby TrueHD 、DTS-HD MA和LPCM比较解析!!
  9. 顺应数字化转型趋势化解“上云”风险,擎天Enclave保障数据安全
  10. [附源码]计算机毕业设计JAVA高校资源共享平台