Linux系统下的图形显示实现方法与流程

文档序号:17585911发布日期:2019-05-03 21:18阅读:1616来源:国知局
Linux系统下的图形显示实现方法与流程

本发明涉及采用在屏幕上跟踪或扫描光束的目视指示器连接的控制装置和电路,尤指一种linux系统下的图形显示实现方法。



背景技术:

linux系统是一个开源受欢迎的系统,由于linux的内核小易于剪裁,性能稳定、效率高等优点,其在嵌入式系统领域有了长足的发展,然而众所周知早期的linux系统仅仅是一个内核,其相关操作都是在字符界面下通过命令来实现的,经过多年的发展linux也产生了许多图形库来开发用户操作界面,目前主流常见的比如qt、minigui等,这些图形库可以实现相当美观、复杂的界面效果,然而对于资源有限,flash空间有限的嵌入式系统需要显示一些简单的操作界面时,移植上述图形库就要有大量的工作量,而且还需要占用大量宝贵的flash空间来存储相关静态库,同时其界面运行时要占用相当多的系统资源。

minigui作为嵌入式系统领域常见的图形库,其使用开发时首先要将minigui的代码在对应的嵌入式平台上进行编译,编译完成即可得到相关的库文件,然而编译minigui核心库时还要编译相关的依赖库,比如zlib,libpng、jpeg库、libttf库等,整个过程比较发杂且可能会遇到很多问题。编译完的库文件还有资源文件这些文件会在资源有限的嵌入式设备中占用大量存储空间,这个过程只是简单的安装编译过程,之后还需要熟悉相关接口函数才可进行图形界面设计。

移植操作复杂,工作量大,移植完成后需要浪费大量的存储空间来存放静态库和资源文件,对于存储容量较小的嵌入式设备,可能就需要更大的硬件成本去增加存储容量,界面运行时浪费大量的系统资源,对简单的显示界面来说大材小用。



技术实现要素:

针对现有技术的缺点,本发明的目的在于提供一种linux系统下的图形显示实现方法。旨在采用linux相关驱动接口再次封装,无需其他图形库的相关静态库,能有效减少嵌入式设备的存储空间占用,而且无需进行图形库的移植工作,减少软件的开发量。图象显示时直接操作底层提高运行效率,减少系统资源的消耗。

本发明解决其技术问题所采用的技术方案是:提供一种linux系统下的图形显示实现方法,其特征在于包括如下步骤:

(1)打开/dev/fbn设备文件;

(2)用ioctl()操作取得当前显示屏幕的参数,包括屏幕分辨率、每个像素点的比特数;根据屏幕参数计算出屏幕缓冲区的大小;

(3)用mmap()函数,将屏幕缓冲区映射到用户空间;

(4)映射后直接读/写屏幕缓冲区,进行绘图和图片显示;

(5)使用完帧缓冲设备将其释放;

(6)关闭设备文件,完成。

本发明的有益效果是:直接采用linux相关驱动接口直接操作显示设备,无需进行相关图形库的移植工作,减少软件开发工作量,也无相关图形库的静态库,可以有效减少嵌入式设备的存储空间占用,图象显示时由于直接操作底层设备驱动能够提高运行效率,减少系统资源的消耗。

附图说明

下面结合附图对本发明作进一步的描述。

图1是本发明的硬件显示机制示意图。

图2是本发明的实现过程示意图。

图3是本发明的显示界面示意图。

具体实施方式

参见附图2,本发明流程操作可以获得linux系统上的显示设备参数,如分辨率、bpp、显存大小以及显存映射到用户空间的地址,为了快速更新屏幕动态信息和切换各个界面,而且不需要移植任何的gui图形引擎库也能高效实现嵌入式ui交互界面开发,节省了60%到80%的系统资源。本示例实现了两类绘制ui界面的接口,分别是绘制显存和绘制缓冲区。

绘制显存接口:

intfb_device_init(void);

intfb_device_exit(void);

intfb_show_pixel(intx,inty,unsignedintcolor);

voidfb_clear_area(intx1,inty1,intx2,inty2,unsignedintcolor);

intfb_show_text(intx1,inty1,intx2,inty2,unsignedchar*text,intalign,

unsignedintforeground_color,unsignedintbackground_color);

intfb_show_image(intx,inty,unsignedchar*image_filename);

intfb_clean_screen(unsignedintcolor);

intfb_show_page(videomem_t*videomem);

绘制缓冲区接口:

intvideomem_init(videomem_t*videomem);

intvideomem_free(videomem_t*videomem);

intvideomem_draw_pixel(videomem_t*videomem,intx,inty,unsignedintcolor);

intvideomem_draw_area(videomem_t*videomem,intx1,inty1,intx2,inty2,unsignedintcolor);

intvideomem_draw_horizontal_line(videomem_t*videomem,intx,inty,unsignedintwidth,unsignedintcolor);

intvideomem_draw_vertical_line(videomem_t*videomem,intx,inty,unsignedintheight,unsignedintcolor);

intvideomem_draw_rectangle(videomem_t*videomem,intx1,inty1,intx2,inty2,unsignedintcolor);

intvideomem_draw_circle(videomem_t*videomem,intx,inty,intr,unsignedintcolor);

intvideomem_draw_text(videomem_t*videomem,intx1,inty1,intx2,inty2,unsignedchar*strtext,unsignedintstyle,unsignedintforeground_color,unsignedintbackground_color);

intvideomem_draw_icon(videomem_t*videomem,intx,inty,unsignedchar*iconfilename);

intvideomem_clear_screen(videomem_t*videomem,unsignedintcolor);

调用绘制显存接口函数实现界面动态信息更新功能,调用绘制缓冲区接口函数实现多界面之间的快速切换功能。动态信息更新采用绘制显存接口直接操作framebuffer显存可以高效实时的更新动态信息,而切换界面采用绘制缓冲区,如图3所示,把每个界面分配一块和显存一样大小的缓冲区放入链表中,把每一个界面显示的数据先写入到相应缓冲区,切换到哪个界面时就可以直接把相应的缓冲区拷贝到显存,以快速的显示出下一个界面。

典型的显示机制如图1所示,都是通过(app->opengl库->gpu驱动->gpu寄存器->fb显存->lcd控制器)的过程显示界面,而本示例中采用直接操作fb显存把数据刷到lcd控制器中显示出来,此方案不需要移植图形引擎库,缩小软件代码体积,占用存储资源少,减少开发成本,执行效率高等优点。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1