ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

Linux Framebuffer驱动剖析之一—软件需求(1/3)

来源:网络整理     时间:2015-12-26     关键词:

本篇文章主要介绍了"Linux Framebuffer驱动剖析之一—软件需求",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 嵌入式企鹅圈将以本文作为2015年的终结篇,以回应第一篇《Linux字符设备驱动剖析》。嵌入式企鹅圈一直专注于嵌入式Linux和物联网IOT两方面的原创技术分享...

嵌入式企鹅圈将以本文作为2015年的终结篇,以回应第一篇《Linux字符设备驱动剖析》。嵌入式企鹅圈一直专注于嵌入式Linux和物联网IOT两方面的原创技术分享,稍后会发布嵌入式企鹅圈的2015年的年终总结和2016年的分享计划。

       本系列文章将分析Linux Framebuffer驱动的作用(需求)、框架、接口实现和使用。按笔者一直倡导的Linux学习理念—从软件需求的角度去理解Linux,对于Linux各个子系统,我们首先要理解其软件需求,从中自然会清楚其存在的价值和作用;接下来是理解子系统在Linux整个驱动框架中的层次、角色和如何交互;最后是理解驱动的接口如何实现软件需求,明确接口如何在各种场景中使用。

一、Linux设备驱动和裸设备驱动的关系

理解framebuffer的软件需求之前,我们先理解Linux设备驱动和裸设备驱动的关系:

例如,对于LCD液晶屏,其可以由三星研发的SOC S5PV210(Cortex A8 arm核)的多媒体硬件模块所支持。而对于具体某种LCD液晶屏,涉及到分辨率、时延参数等不同,需要通过软件来设置相应的SOC多媒体硬件寄存器,以达到控制显示的目的。这个软件设置就是SOC编程,其不管是SOC上运行的是Linux,还是Windows,或者是IOS,软件设置的最终结果体现到寄存器上都是一样的。一般地,嵌入式都是C语言开发,而高级处理器的寄存器是统一编址的,因此裸设备驱动外围设备的C语言代码基本是一样的。

在带操作系统运行时,为了安全考虑,系统一般分为用户态和内核态。那么,SOC编程是硬件编程,只能在内核态完成,并且需要向用户态程序提供一个接口以进行调用。对于不同的操作系统而言,从用户态的接口开始到进行最终的SOC编程接口调用的过程中,会经过不同的软件层次。对于Linux操作系统,设备驱动的接口调用过程就是Linux设备驱动框架所决定的。详见《Linux字符设备驱动剖析》、《Linux 设备文件的创建和mdev》、《总线、设备和驱动》和《字符设备驱动、设备驱动模型、sysfs、平台设备驱动的关系》。

从上面分析可以看出,任何Linux设备驱动都有两个层次,一个是偏底层硬件的SOC寄存器编程,一个是偏上层应用的Linux子系统软件接口,前者负责和硬件的交互,后者负责跟上层应用交互。Linux为了给用户提供统一的编程接口,在所有的设备驱动之上再架设一层公共接口层,如所有驱动都可以通过open、read、write来进行操作,其是Linux设备驱动框架的组成部分。因此,一般地,Linux设备驱动都有三个层次。

当然,各个子系统内部还会通过分层来解耦内部的需求和实现。

二、LinuxFramebuffer的软件需求

Linux Framebuffer的需求就是驱动LCD屏显示。所以其自然也有两个层次,偏底层硬件的SOC寄存器编程和偏上层应用的写屏接口。本文的重点是为了分析Linux framebuffer驱动的偏上层应用的接口实现,而不是阐述如何进行SOC编程,因为SOC编程是针对某个具体的SOC寄存器来进行的。

1.     LCD屏的驱动需求

SOC和LCD屏的连接示意图如下:

Linux Framebuffer驱动剖析之一—软件需求

1) SOC编程是为了支持多种不同的LCD屏,以使该SOC的应用场景最大化。因此SOC的多媒体Display模块需要考虑不同的屏幕分辨率、位图深度、行切换和帧切换的时延等等。这些参数的设置最终使得LCD控制器(硬件引擎)产生匹配的时钟和数据输出到LCD引脚上。这些设置的编程方式和其他字符设备(如鼠标、串口等)都是差不多的。所以,LCD的驱动需求是通过寄存器设置支持各种不同的LCD屏。

相关图片

相关文章