LCD与FrameBuffer驱动程序的研究与实现
2017-05-17沈学银
沈学银
摘要:Framebuffer驱动程序在Linux显示器上面具有抽象的特点。当前科学技术的持续性发展,使得很多MCU-LCD嵌入式的设备在支持上要应用更好的UI界面来实现其良好的视觉效果呈现。但由于MCU-LCD常使用在早期的单片机内,若仍旧使用Framebuffer架构将会对内核产生较差的影响。通过分析Framebuffer自身的结构能更好的比对出RGB以及MCU的不足之处,然后设计对应的linux帧缓冲设备驱动程序,满足内核中Framebuffer对MCU-LCD的支持。
关键词:LCD;FrameBuffer驱动;研究与实现
中图分类号:TP311.11 文献标识码:A 文章编号:1007-9416(2017)03-0063-02
嵌入式的LCD屏幕中能支持的兩大硬件接口,其中一种接口是较为常见的RGB接口,另外一种是MCU接口。MCU-LCD早期是针对单片机领域使用而得名的,所以在使用的时候就多在低端的手机中获得较大的应用,特点是整体价格低廉。MCU——LCSD接口标准的术语是interfac80,所以在文档中就要使用I80代替MCU-LCD屏。
1 linux下FramBuffer
1.1 FrameBuffer机制研究
FrameBuffer可以被翻译为帧缓冲,这是一种基础类的图形设备,经常出现在linux2.2的版本内核中,它作为一种驱动型的程序接口而存在的,主要是其他程序的函数数据模式。这类接口多显示为抽象或者帧缓冲区,作为用户使用该应用程序不需要对底层的驱动程序有着细致的了解,可以将其看成是内存的一种映像反映,无需做深入了解,更无需关注其物理显存的位置或者换页的机制等细节内容,只有将所有的映射引入到空间内,然后再开展读和写的操作,并且所有的操作细则都能在屏幕上直观的呈现出来。
1.2 FramBuffer设备驱动研究
FramBuffer主要是实现不同的功能平台控制图,且在控制的时候要让两者能更好的绑定在一起。FramBuffer的优点是能支持不同类型的硬件,并能支持新设备开发过程中产生的巨大工作量。它们的关系如图1示。
FrameBUffer的驱动主要是是现在重点文件接口处,要求所有的层次机构都要讲数据寄存在I/O内存层。
1.2.1 文件层次接口层
使用帧缓冲设备的时候能实现不同的数据处理,处理中设备的不同操作流程也有所不同。比如进行内存映射的时候,文件的开关以及底层文件的函数都可以作为基础内容而封存,这样就能满足对文件的内存控制,并能合理的调用接触口的读写函数,这些函数的提取能满足其内核的使用需求。
1.2.2 驱动层次接口层
受到现实设备的特殊性影响,驱动层接口处保护的内容有底层函数、记录设备状态数据。linux最为缓冲的帧设备,主要是在驱动层的出口处进行结构定义,通过定义现实当前的显示卡的具体工作情况,从而反应出内核的情况。但由于嵌入式系统整体操作比较简单,能够涉及到的结构成员很少。
2 驱动程序设计
2.1 驱动程序初始化函数设计
函数的设计中要先创建FramBuffer设备的结构体然后使用函数获取对应的LCD屏来匹配初始化的数据源,其中初始化的内容主要是对其固定的信息、可变的信息和显示的模式开展初始化处理。然后可以在s3c2410fbs info结构中映射出有关s3c2410fbs ops的指针,并在内核中申请连续空间,将这部分空间看成是缓存的处理阶段,把显示器的地址直接添加到s3c2410fbs infl中的DMA传输地质中,这样就能直接显示出显示器的物理地址。
2.2 位图显示API设计
BMP主要的文件构成形式是:文件头、位图信息、颜色信息和图形数据这些内容。BMP文件头主要是显示BMP的文件类型,所有的文件其起始位置和大小等信息都可以在BMP文件类型中可查;BMP的位图信息主要的工作内容是通过说明图片的大小和性质,对图片的信息有简单的了解,颜色表直接表明图片的颜色,其实图片颜色的表项较多,任何一个表项都有着独有的类型结构,可以定义其中的一种颜色。位图数据图与传统数据库有着异曲同工之处,即能收录每个像素值,然后所有的记录顺序是按照从左到右的顺序排列,所有的扫描行排列则是按照从下到上的顺序排列。
2.3 位位图函数设计
载入的位图,主要的目的是为进行正确的图位分化,先要从信息头角度考虑问题,从图中我们能熟悉要分配多少给内存的位图,这样就能将位图全部加载进来,然后为位图创设调色板。
(1)读取位图文件头结构信息。检测不同的文件类型是不是“BM”,如若不是,就说明一点即文件不是位图文件或者位图的文件已经遭到了破坏。若位图标示为“BM”那么文件大小的读取以及位图阵列的排列相对于文件而言有很多的偏移量,这样就方便位图数据开辟缓冲区域。
(2)读取位图信息头位置。通过读取位图的信息头结构能够获悉到位图的宽度、高度和每一个像素所处的位数,其中包括于图像中数据的大小等相关信息,这样能让位图的读图信息和颜色更加鲜亮,进而就能将其使用在位图的数据内。
(3)读取位图颜色表。通过对位图的大小和结构进行了解能清晰的认识到位图信息头结构位置,然后在计算颜色后了解到位图的文件起始位置出现偏移,借此判断位图的文件指针方向。结合位图的大小或者位图的宽度和高度等数据变化,我们能看到开辟缓冲区域位图的颜色表内容对提升位图的颜色表信息有着积极的影响。
(4)读取位图数据信息。根据位图的图阵列以及文件头的偏移量或者位图的颜色以及大小能清晰的计算出位图数据信息,也能根据现有的数据信息了解到位图能出现的偏移量,以及地址上的量偏移,这样就能定位文件的指针方向,通过开辟缓冲区来读取位图的现有数据信息。
2.3.1 汉字及字符现实的API设计
16*16点阵汉字设计:第一步,汉字读取的时候要将汉字串成一串,能读取汉字从内码进入到内缓存区域中,可以将汉字对应的内码对应的3个字符直接转换为两个字符,创建完汉字直字串缓冲区域。第二步,打开16*16的点阵字库,目的是要通过读取汉字的字模数据库,了解到汉字进行转换以后内码是否要依次的进行计算,了解每个汉字在字库中的偏移量,这将汉字的字模直接在缓冲区内显示出来。第三步,使用扫描法可以将汉字的字摸点进行点阵,若该点不为零,就要通过画点的方式结合汉字的颜色和坐标位置在LCD上画出该点,完成后可以持续到汉字扫描完毕在进行汉字下一个坐标的横坐标标注,然后在进行扫描再次画出下一个汉字。其中需要注意一点,若汉字的坐标在横坐标的范围以外,那么就要改变汉字的横竖坐标值,换行画出汉字。
2.3.2 Framebuffer设备的应用
无线的网络视频监控系统中,人机接口是视频的关键部位。其实在本实验中,就要从人机界面的角度考虑问题,我们在人机界面开设期间先使用MiniGUi,这其实是一种嵌入式的设备,该设备能支持整个界面的轻视量级操作,通过具体的页面操心系统我们能清晰的了解到设备应用的环境。使用MinIGUI的图形口主要支持的是framebuffet设备的具体应用。
由于MiniGUI主要是使用独有的体系化结构,在原理使用上通过分层设计的方法,在不同的层次上开展其他针对性的措施,也通过不同应用措施的改造或者重新改写,做好基础设施建设,顶层的API主要是给用户提供编程接口,中间的MiniGUI主要是涉及不同的系统模块,在最底层GAL和lAL主要是为MInIGUI提供底层图形支持系统,这样可以方便这些系统机型设备的输入和输出,然后进行鼠标的具体驱动。
GAL主要的作用是将不同的图形设备抽象为一个逻辑的设备,然后提供绘图的功能导向,为上层模块提供统一接口,在建立FrameBuffer上,盡量避免修改上层的所属模块系统。这样能再次更改或者显示对应屏的驱动程序中,让MiniGUI移植到ADSP-BF561。移植过程可以从从三个阶段出发:第一个阶段,开发和调试阶段,这一阶段主要是以ADSP-BF561平台的精简系统为具体的Framebuffet驱动性程序,其中调试阶段就要使用图形进行引擎调试。这应该是整个过程的关键性实施阶段。第二,制定或者调试设备引擎的时候,先要做好设备引擎的输入和输出,然后通过使用开放程序,做好交叉的编译和配置,让整个MiniGUI的使用效果达到最优,从而实现图形的界面设定。
3 结语
在FrameBuffer的机制基础上,先要以MCU-LCD为基础设立单片机,由于这个时代主要是使用通用显示器的时代,在通用显示器使用时要借助于嵌入式的平台进行Linu驱动程序的设计,这样能较好的解决有关通用MCU接口处LCD的驱动现实。该设计主要是嵌入流行的QT和MINIGUI移植工作,并为其提供基础,使开发的二次界面能取得较好的效果。
参考文献
[1]封岸松,杨柳,王庆辉.基于Framebuffer的DSP平台LCD驱动程序的实现与应用[J].计算机系统应用,2011,(09):12-13.
[2]程杰,方攀,张黎明.基于SEP4020的嵌入式Linux Framebuffer驱动程序[J].电子技术,2015,(02):17-19.
[3]苏哲欣,刘鸿飞,薛晓.嵌入式Linux下的LCD驱动程序设计与实现[J].工业控制计算机,2011,(09):12-13.
[4]陈渝,康烁,杨晔,曾益.SkyEye模拟器的LCD及TouchScreen模拟模块的设计、实现与验证[J].电脑编程技巧与维护,2011,(09):12-13.
[5]刘文飞,李燕燕,廖迎春,苏兵强.基于嵌入式Linux变压器监测终端LCD驱动程序的设计 [J].南京信息工程大学学报(自然科学版),2015,(02):17-19.