嵌入式Linux系统Qt/Embedded的GUI开发研究

(整期优先)网络出版时间:2021-08-02
/ 2

嵌入式 Linux系统 Qt/Embedded的 GUI开发研究

李大伟

珠海格力电器股份有限公司 519070

摘要:本文主要介绍了在嵌入式Linux系统下Qt/Embedded的GUI开发流程,通过对Qt/Embedded显示原理和机制的介绍及分析建立linux系统下TI公司Cortex-A8内核芯片AM335X的Qt/Embedded开发环境,并对嵌入式Linux系统下Qt/Embedded的图形用户界面编程方法进行介绍。

关键词:嵌入式Linux、Qt/Embedded


引言 Qt/Embedded是针对嵌入式开发环境进行设计的,因其取代Qt桌面系统开发中的Xserver、XLibara将其功能整合在一起,不需底层库支持提高了开发效率,并对嵌入式环境开发了模块化的窗口设计、以及源代码开放得到广泛应用,目前市面上上市的Linux PDA大都采用Qt作为图形接口的函数库。Qt/Embedded的特性是可以直接在 Framebuffer上显示图形,反应速度快,这对硬件与容量都有限制的嵌入式环境来说非常重要。

  1. 硬件平台

使用ARM Cortex-A8内核的AM3354处理器,该处理器定位为工业控制MCU,性价比高且运算能力强大,支持2D/3D图像引擎,集成LCD及触摸控制,在工业控制、智能交通等恶劣场合广泛应用。硬件平台外部使用24MHz晶振,CPU内部倍频至800MHz,512MB的SDRAM,4G的MMC,配备1个USB,1个10M以太网,2个CAN,2个UART,1个SPI和2个I2C接口。

  1. Qt/Embedded体系结构

6107a3e776887_html_12d39a7387b1d987.png

图1 Qt/Embedded体系结构

Qt/Embedded的软件体系结构自上而下可分为三层:

  1. 上层控件层:Qt库提供给用户直接使用的GUI控件,通过Qt Creator工具可便捷开发基于widget的GUI图形界面应用程序。

  2. 上层图形层:该层提供了低级别的绘图操作,可以对帧缓冲的绘图进行操作。在这层中下一层驱动需要获得帧缓冲驱动体系所需的具体硬件信息,同时对底层Linux的帧缓冲驱动图形操作进行抽象,供上一层控件使用。

  3. 图形引擎和事件驱动层:这一层中主要是将下层输入设备的输入信息抽象为具体的事件,并直接对底层的缓冲驱动进行访问。

  1. Qt/Embedded底层支持分析

Qt/Embedded以原始Qt为基础,并做了许多调整以适用于嵌入式环境。Qt/Embedded通过Qt API与Linux I/O设施直接交互成为嵌入式Linux端口。Qt/Embedded的底层图形引擎是基于帧缓冲(Frame Buffer)设计的,帧缓冲是内核版本当中的一种驱动程序接口,这种接口采用mmap系统调用,将显示设备抽象为帧缓冲区。可以将它看成是显示内存的一个映像,将其映射到进程地址空间以后就可以直接进行读写操作了,而写操作可以立即反映在屏幕上。帧缓冲驱动程序是最重要的驱动程序之一,正是这个驱动程序才能使系统屏显示内容,其实现分为两个方面:一是对LCD及其相关部件的初始化,包括画面缓冲区的创建和对DMA通道的设置;二是对画面缓冲区的读写,具体到代码为read,write等系统调用接口。

  1. 安装tslib和移植Qt/Embedded

  1. 编译和安装

tslib是触摸屏用于校准的一个软件库,能够为触摸屏驱动获得的采样提供去抖、校准等功能,作为触摸屏驱动的适配层为上层的应用提供统一的接口。 使用configure进行环境侦测找到编译所需的函数库及编译器,使用make进行编译,最终 make install完成安装。

# tar -zxvf tslib-1.4.tar.gz

# cd tslib

# ./autogen.sh

#./configure-host=arm-linuxac_cv_func_malloc_0_nonnull=yes-cache-file

=arm-linux.cache -prefix=/usr/local/tslib

# make

# make install

安装完成后将tslib拷贝到目标板文件系统中,将usr/local/tslib/lib文件下除去目录外其他所有文件拷贝到目标板lib目录中,将usr/local/tslib/etc下的ts.config拷贝到开发板的etc目录下,进行系统环境变量设置。

  1. 交叉编译和安装QT

使用交叉编译器需配置autoconfig.sh文件。这里有几个命令需注意:

# -embedded arm:表示将编译针对arm平台的embedded;

# -xplatform qws/linux-arm-g++:表示使用arm-linux交叉编译器进行编译;

# -qt-mouse-tslib:表示将使用tslib来驱动触摸屏;

运行./autoconfig.sh生成makefile链接各个文件make进行编译,最后make install执行安装,安装完成后将PC中的/usr/local/Trolltech/QtEmbedded-4.

8.4-arm拷贝到目标板的/usr/local/目录下。

  1. 目标板配置

连接目标板配置/etc/profile文件中环境变量,输入命令source/etc/profile生效环境变量移植完成。

  1. 图形界面开发流程

使用桌面Linux下的Qt Creator工具来开发目标板的图形界面程序,包含以下步骤: 1)创建Qt GUI应用工程项目文件指定创建路径。

  1. 新建一个主窗体,类名为MainWindow,基类为QMainWindow。

  2. 设置窗体背景、显示样式、标题栏等,添加窗体所需控件。

  3. 设置窗体中的所需控件属性及发送信号。

  4. 设置信号与槽函数之间的映射。

  5. 编写main函数。

  6. 使用qmake工具,交叉编译、链接整个工程,make完成程序编译生成可执行文件,将可执行文件拷贝至目标板,通过PC端发送命令–qws启动目标板程序。



结束语

在人机交互、智能工业控制等领域上会有越来越多可视化的图形界面开发需求,嵌入式Linux系统的应用也会逐渐增多,Qt/Embedded延续了Qt桌面系统的所有功能,丰富的API接口、完全模块化编程设计,这些特性都使得Qt/Embedded非常适合应用与嵌入式环境。其专门针对嵌入式操作系统设计进行的优化,可以使设计出的程序占用更少的内存,这对嵌入式硬件与容量都有限制的环境来说非常重要。同时完备的开发工具和帮助文档,也将使得在嵌入式系统中开发图形界面更加高效便捷。



参考文献

  1. 王凯.基于Qt/Embedded的嵌入式GUI显示架构实现[J] 计算机技术与发展,2017,05