基于Qt/Embedded的GUI移植及无线网络功能的开发

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
 

基于Qt/EmbeddedGUI移植及无线网络功能的开发

 

具有友好用户界面的嵌入式系统已成为当今嵌入式相关研究的的热点。本文介绍了系统平台构建,分别叙述了嵌入式Linux内核的配置与编译,Qt/Embedded图形界面系统的移植与开发,以及基于嵌入式Linux的无线网络功能模块的开发与实现。运行结果表明,方案合理,运行可靠。

 

关键词

嵌入式LinuxQt/EmbeddedQtopiaGPRS;无线网络

 

1 引言

    随着信息技术的发展和数字化产品的普及,嵌入式设备被广泛应用。主流的嵌入式操作系统有WinCELinuxVxWorks, pSOS, PalmOS等等。Linux的优势在于其完全开放的操作系统,可以给开发者一定的独立性和自由度,允许它们自己掌控自己的产品。另外,是否具有良好的人机图形界面,方便用户操作,是衡量嵌入式设备性能的重要标准。Qt/Embedded是著名的Qt库开发商Trolltech公司开发的基于嵌入式Linux系统的Qt版本,广泛应用的KDE等项目即使用Qt作为支持库,它以良好的代码结构、强大的可定制功能以及统一的API都给用户提供了极高的便利性,QT/Embedded已经逐渐成为GUI的事实标准。

2 嵌入式Linux系统的移植和开发 2.1 硬件开发环境

    硬件系统采用的是Embest EduKit-III开发平台, 采用了SAMSUNG 公司的以ARM9 为内核的处理器S3C2410, 该处理器核心频率可达到200M,具有低功耗、低成本等卓越性能和显著优点,同时具有JTAG 调试等功能;针对掌上智能设备的功能比较复杂,消耗资源较多,选取了64MSDRAM128MNand Flash,针对此项目的开发,摒弃了一些不必要的模块,保留了USB接口模块,标准串行口模块,显示屏(触摸屏)模块,基于无线通讯功能的实现,选取了Siemens MC35为核心的GPRS无线模块,整个硬件环境如图1所示。

2.2 嵌入式Linux系统内核的配置与移植

    首先,嵌入式系统在运行的初期即在操作系统内核运行之前,需要一段程序初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,这就是Boot Loader程序[1],这里我们选用了韩国Mizi公司的Vivi引导程序。

     然后是Linux内核的移植,出于实际功能的需要,我们采用了普遍应用于嵌入式系统的2.4.18版的内核。这里有一个相当重要的概念——交叉编译[2]:由于宿主机与目标机的CPU一般不相同,宿主机也就是我们常用的PC机是以X86为核心的,而目标板则是ARM体系结构的,因此需要在宿主机机上建立一个用于目标机的交叉编译环境,也就是将各种二进制工具程序集成为工具链,其中包括如GNU的链接器(ld)、GNU的汇编器(as)、ar(产生修改和解开一个存档文件)、C编译器(gcc)以及C链接库(glibc)等等。这里宿主机采用Redhat9.0,工具链选择了cross-2.95.3交叉编译工具包。下列是工具和内核源文件列表及说明:

--------------------------------------------

  binutils-2.11.2  包含有ldaras等一些产生或者处理二进制文件的工具。

     gcc-core-2.95.3 包含GCC的主体部分。

     gcc-g++2.95.3   使GCC编译C++程序。

     glibc-2.2.4     libc是很多用户层应用都要用到的库,即C链接库。

  glibc-linuxthreads-2.2.4  libc用于支持Posix线程单独发布的压缩包。

     inux-2.4.18+rmk7  Linux的内核及其支持ARM的补丁包。

-----------------------------------------

    在交叉编译环境建立好以后,可以对内核进行配置并制作映像文件。这里需要注意的是,针对不同开发商提供的硬件要进行不同的配置,并打上相应的补丁程序。

2.3  Qtopia图形用户界面文件系统的移植

    在建立好内核的基础上,要完成根文件系统(root filesystem)的创建。在Linux系统启动时,首先完成内核安装及环境初始化,最后会寻找一个文件系统作为根文件系统被加载,它是Linux系统的核心部分,包含系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。这里我们选择嵌入式系统常用的CRAMFS文件系统,它是Linux创始人Linus开发的一个适用于嵌入式系统经压缩以及只读的小型文件系统[3]

    在完成无图形界面的CRAMFS文件系统的建立后,这里重点阐述一下带Qtopia图形界面文件系统开发环境的建立和移植。

    Qt/EmbeddedTrolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded的实现结构如表1所示。

1 Qt/Embedded的实现结构

    Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序[3]

    整个GUI系统的构建需要对Qt/EmbeddedQtopia依次分别编译,然后有机地整合在一起。Qt/EmbeddedQtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。以下构建过程所需工具文件和源码包列表及说明:

----------------------------------------------

    Tmake1.11        生成和管理Makefile文件

    Qt/Embedded2.3.7 QT的库文件

    Qt2.3.2 for X11  为了生成相应的QtDesignerqvfb以便在宿主机上开发和调试应用程序

    Qtopia 1.7.0     图形用户界面开发包

    e2fsprogs-1.35   ext2 文件系统工具包

    tslib            触摸屏工具包

    pegsrc v6b      jpeg 解码包

----------------------------------------------

    将上述开发包依次解压,然后编译。这里需要注意的是根据运行环境的不同,需要建立两个程序开发环境:一种是针对X86pc机上运行使用虚拟缓冲帧qvfb(Qt/Embedded Virtual Framebuffer )的开发环境,这样我们就可以先在RedHat9环境下虚拟嵌入式程序的运行,从而节约开发时间。另外一种是针对能够在ARM开发板上运行的程序的开发环境。不同的开发对象要使用不同的编译器,这里就引出了环境变量的设置问题,例如针对ARM板开发时需要定义:

TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++

而对能够运行在X86体系结构上的程序则为:

TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++

2 图形界面文件列表

 

     当开发环境建好之后,在无图形界面的CRAMFS的基础上,新建qt目录,拷贝编译过的Qtopia必需目录及相关文件到此目录下;从编译Qtopia时使用的编译器还书库目录中,拷贝程序运行时所需的函数库到lib目录下,并替换原无Qt文件系统的lib目录。然后拷贝基于Qt/Embedded的动态函数库及字库文件,并建立一个作为Qtopia图形界面运行时的工作目录,用于存放运行时产生的中间文件。已加入编译Qtopia图形界面文件系统后的目录如图2所示。

    最后,修改CRAMFS文件系统的运行参数,主要修改两个文件,即存放于/usr/etc/目录下的运行环境配置文件profile和运行QPE图形界面启动的rc.local,设定系统运行的环境变量。

以上为整个嵌入式系统的移植,经过映像打包后就可以烧录并运行在在开发板上了。

3  GPRS无线网络功能的实现

3.1 模块说明

    嵌入式系统一般应用于小型便携式设备上,传统的有线上网方式往往无法适应现场的需要,无线网络接入以其方便、快捷的优点正被广泛应用远程监控、数据采集和各种娱乐电子产品中。这里选取了Siemens MC35无线模块,支持GRPS Class 8/Class B和标准AT指令,并预留了话筒接口,支持GSM900GSM1800双频网络。

    当插入一般GSM网络的SIM卡后,嵌入式操作系统即可通过串口发送AT指令控制电话的拨打和接通;当开通GPRS网络服务后,就可以采用拨号上网的方式实现Internet网络的接入。

3.2 协议基础

    Linux下通过GPRS上网必须使用PPP协议进行拨号, PPPPoint-to-Point Protocol点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据包。设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案[4]

建立一个PPP连接需要以下过程:

    PPP的两端建立一条物理连接,通常为电话连接,但也有直接电缆连接或虚拟的tunnel连接的形式。具体如何建立连接,例如拨号等,并不属于PPP协议本身的任务。

    PPP的服务器端对客户端进行验证,可以有最简单登录的验证方式、PAPCHAP等验证方式。由于PAPCHAP并不在线路上传输口令本身,因此更为安全,不必担心口令会泄露出去。

    验证完毕之后,PPP服务器将按照配置,分配给客户IP地址,并将网关地址和其他的一些配置信息传送给客户。如果是Microsoft客户,还可以按照MS的扩展协议分配给客户NetBIOS名字服务器的地址。这样就建立了一条PPP连接。

    LinuxPPP提供了两种不同方式的支持,一种为内核级PPP,它将PPP协议代码编译进内核,并运行一个PPP守护进程pppd,提供对PPP的支持,这是一种传统的方法,但配置起来较困难。另一种为用户级PPP,它使用一个应用程序ppp,通过通用tunnel设备传递PPP数据,配置较为容易。针对此开发项目这里使用用户级PPP 来建立拨号方式的Internet连接。

3.3 模块配置与实现

    首先在编译Linux内核时需要配置kernel使它支持如下PPP选项:

PPP(point-to-point) support

PPP multilink support(EXPERIMENTAL)

PPP support for async serial prots

PPP support for sync tty ports

PPP Deflate compression

PPP BSD-Compress compression

    然后采用最新的pppd源码包ppp-2.4.3,经过交叉编译后拷贝到嵌入式文件系统的/usr/sbin目录下,同时在嵌入式文件系统/dev下建立一个ppp设备,并经行相关配置。这里最重要的是配置在Linux下拨号采用的脚本文件ppp-onchat-script和配置文件options,还有其实内容为空的两个验证文件pap-secretschap-secrets

最主要的ppp-on脚本如下:

#/bin/sh

pppd -d -detach lock /dev/ttyS0 57600 kdebug 4   file /etc/ppp/options

nocrtscts noipdefault netmask 255.255.255.0

defaultroute connect /etc/ppp/chat-script

这里调用了pppd拨号命令,并对拨号端口进行了配置,最后调用了chat-script脚本文件:

#! /bin/sh

exec chat -v /

TIMEOUT 5 /

'' AT /

OK /

AT+CGDCONT=1,/"IP/",/"CMNET/" /

OK /

ATD*99***1# /

CONNECT ''

    文件中使用AT指令对串口进行控制,因为目前中国GPRS用户拨号上网并没有采用用户帐号和密码进行登陆,所以帐号密码都为空。在完成以上配置后,直接运行ppp-on程序即可实现GPRS拨号上网。

    以上拨号程序是通过Shell脚本编程完成的,可以修改/usr/etc/rc.local配置文件,设置ppp-on程序在开机时自动加载;也可以把脚本程序封装起来,直接放在桌面应用程序中去,由用户自由控制。在丰富的第三方软件的支持下,用户即可以实现WEB页浏览、电子邮件的发送和实时的聊天功能。结束语

    本文介绍了图形化的嵌入式Linux操作系统的移植和无线网络功能的实现,通过软、硬件的优化设计,整个嵌入式系统已经测试并运行正常,具有良好的稳定性;同时在GPRS无线上网的基础下,已成功实现网页浏览和收发文件的功能,可以用于智能手机、远距离监控、车载导航等方面。通过预留的USB接口还可以实现摄像头的图像采集功能。如今,嵌入式Linux系统还正处在不断发展的阶段,随着功能的不断增加,还有许多问题需要进一步的开发和研究。

参考文献

[1]       孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南. 基于ARM9处理器 [M].北京:电子工业出版社,2005.

[2]        []Craig Hollabaugh嵌入式Linux--硬件、软件与接口[M].陈雷,钟书毅等译. 北京:电子工业出版社,2003

[3]       Karim Yaghmour. 构建嵌入式Linux系统[M] 北京:中国电力出版社

[4]       倪继利.QtLinux操作系统窗口设计[M].北京:电子工业出版社,2006

[5]       王波.FreeBSD使用大全[M].北京:机械工业出版社,2002

 

SSD201/202嵌入式彩屏方案:从硬件选型到Linux系统开发与优化 嵌入式系统开发中,图形用户界面GUI)的实现与优化是提升产品交互体验的核心。其原理在于通过高效的图形渲染框架与硬件加速单元协同工作,将应用逻辑转化为流畅的视觉输出。这项技术的核心价值在于,它能够以较低的成本和开发门槛,为智能家居中控、工业HMI等设备带来媲美消费电子的流畅操作体验。具体到应用场景,开发者常需在资源有限的嵌入式平台上平衡性能、成本与开发效率。本文聚焦的SSD201/202芯片方案,正是针对这一痛点的典型解决方案。该方案集成了独立的2D图形加速引擎和视频解码单元,并内置DDR内存,构成了一个 阅读详情

相关推荐

基于QtEmbedded网络通信设计

基于QtEmbedded网络通信设计dfd adfa dfadf adfadadfasdfadfadfadfad

QtWIFI搜索、显示与连接

首先介绍一下我的环境,Linux环境下使用Qt,交叉编译到ARM板上调试,ARM板自带WIFI模块,大部分Linux命令我都可以自由地使用。 首先,需要通过控制台命令来获取WIFI信息,按照图片上画的,至少要得到WIFI名称、信号强度和加密方式。获取WIFI的命令有很多,但是简单地调用命令获取WIFI信息文件无法直接使用,还需要提取到其中的字符串信息。假定我们通过一些命令,获取到了这些内容,还要通过代码将它们传递给主程序。做到这一点,前期的准备工作才算做完。

阿清的随手记 1万+

Qt基于networkmanager嵌入式linuxwifi网络连接

嵌入式linux管理网络的工具主要有wpa_supplicant 和networkmanager两种方式,它们都各自的工具来管理wifi网络,具体实现细节网上都有很详细的介绍。接下来要介绍的主要是嵌入式linux下使用networkmanager工具来实现wifi网络连接,本人使用的是友善之臂的nanopi S2开发板,已经移植好networkmanager工具。 关于NetworkManage...

清心永恒的博客 9216

Qt/Embedded 简介

2006-03-07, by netflyingQt/Embedded 1、 Qt/Embedded体系结构Qt/Embedded是基于Qt嵌入式GUI和应用程序开发的工具包,它可运行多种嵌入式设备上,主要运行在嵌入式Linux系统上,并且需要C++编译器的支持,并为嵌入式应用程序提供Qt的标准API。Qt/Embedded 的API是基于面向对象技术的。在应用程序开发上使用与Qt

聪明的解释器 6183

QTQT-embedded的配置选项_裁剪(简易翻译)

前阶段没少编译QTQTembedded,这是我的工作文档中的部分。 This is the Qt for Embedded Linux Open Source Edition. Usage: configure [-prefix ] [-prefix-install] [-bindir ] [-libdir ] [-docdir ] [-headerdir ] [-plu

u010402372的专栏 3458

嵌入式浏览器Konqueror/E的实现

 原文地址:http://www.21ic.com/news/n16702c63.aspx [日期:2006-12-14] 来源:电子产品世界  作者:陆云昆 余健 赵力 邹采荣 [字体:大 中 小] ADFHOST171

luocolor(ォ全微分) 1398

Qt开发Qt GUI模块——简介

Qt GUI模块为窗口系统集成,事件处理,OpenGL和OpenGL ES集成,2D图形,基本图像,字体和文本提供类。 这些类由Qt的用户界面技术内部使用,也可以直接使用,例如使用低级别的OpenGL ES图形API编写应用程序。对于编写用户界面的应用程序开发人员来说,Qt提供了更高层次的API,比如Qt Quick,比Qt GUI模块中的启动器更合适。一、概述要包含模块类的定义,请使用以下指令:...

一世豁然的专栏 1万+

QT Embedded之QWSClient

http://blog.sina.com.cn/s/blog_4da8de1e01012uet.html http://blog.sina.com.cn/s/articlelist_1302912542_4_1.html 在前面QWSServer文章中,已经提到QWSClient代表QApplication或QWSDisplay。QWSClient保存了QT Cli

mamori的专栏 936

MFC下DirectX DirectInput的实现

 一般来说DirectX技术总是应用在游戏上的,而在DirectX天生就能与Win32很好的结合。看看市面上的图书,凡是用到DirectX技术的大多是使用Win32编程的,因为DirectDraw或者DirectXGraphics需要自己控制屏幕上的每一个象素,MFC等类库显然不适合太多自定义的东西。而另一方面,对于DirectInput里的内容,因为并不需要控制窗体,仅仅需要发送控制消息,则

bisword的专栏 3031

MSDL调测心得

 今天开始调测msdl,这个软件的简单说明如下:msdl(media stream downloader) is a multi-protocol downloader for downloading via various streaming protocol such as mmst (mms://) , mmsh , rtsp-real , rtsp-wms , http ,ftp. Tes

bisword的专栏 1781

Framebuffer驱动程序模型

 Framebuffer驱动程序模型下图会向你展示目前的framebuffer设备驱动的结构,最常用的是非标准驱动。很明显他所处的层次最高,程序编写是最容易的。理解了这个图的,你已经很轻松的去完成一个fb驱动,比如给sa1100,s2410,s2440系列的ARM的LCD控制器写驱动。 Color Map 剖析在framebuffer驱动程序设计中,cmap这个东东太晕了。现在我要把他赤裸裸的

bisword的专栏 1772

代码优化之优化除法

 [转帖]代码优化-之-优化除法                                                 >                                                  HouSisong@GMail.comtag:代码优化,除法,牛顿迭代,减法代替除法,除法优化   说明:文章中的很多数据可能在不同的C

bisword的专栏 1647

JPEG 编解码在 Cell 上的优化

 JPEG 编解码在 Cell 上的优化JPEG编解码是比较常用的图像处理过程,本文主要介绍如何充分利用 Cell 的特性,优化 JPEG 的编解码过程,使其达到最佳性能。本文虽然主要是说明 JPEG 编解码的优化过程,但是其中使用到的优化方法,也是 Cell 上常用的优化手段,对于其他应用程序在 Cell 上的优化也很有借鉴作用。简介本文使用的 JPEG 编解码源代码属于 IBM

bisword的专栏 1503

windows下的线程的同步

   虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线

bisword的专栏 1009

共享内存

/*要运行程序,需要在当前目录下建立一个share文件,share是一个空文件,没有任何意义,只是函数ftok需要一个文件名作参数,ftok另一个参数可以为任何数字。程序运行后,分为父子进程,子进程申请共享内存,然后等待父进程继续执行,父进程首先等待子进程申请到共享内存标识,然后输出共享内存中的内容,为了演示共享内存可以随时更新,程序中在子进程里产生随机数写入共享内存供父进程读取。代码如下:*

bisword的专栏 653

QSFP/QSFP-DD/OSFP 通用管理接口规范(CMIS)解读:11 Page 13h II

本文主要关注光模块CMIS协议文档的 8.11 节关于 Page 13h 的内容。不仅是对文档的简单翻译,还会剖析协议规定背后的深层含义。为了方便与协议文档内容对应,本文的章节编号与协议文档保持一致。

a653952216的博客 286

Natapp 内网穿透完整实操:从注册到远程桌面公网访问全流程

内网穿透并不缺方案。自己搭建 FRP 的自由度很高,但要先有一台带公网 IP 的服务器,再部署服务端、配置客户端、开放端口,后续还要处理升级、安全和日常维护。如果只是想尽快把本地网页、远程桌面或者其他服务接到公网,这些准备工作很容易把人挡在第一步。我用 Natapp 一段时间后,最直观的感受就是省事:不用准备公网服务器,也不用维护一套服务端。注册账号、创建隧道、下载,再用authtoken启动,公网入口就有了。

2301_80863610的博客 1万+
上一篇: H.264压缩算法详解
下一篇: 嵌入式GUI与Qt/Embedded
bisword
博客等级 码龄25年 96粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值