当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]嵌入式Linux下基于MiniGUI的信息终端软件开发

摘要:嵌入式系统的开发已成为新的行业热点。本文首先概述嵌入式Linux系统开发的特点及其工具,然后具体描述MiniGUI图形系统的移植、使用方法,并举例说明在该系统上开始信息终端软件的过程。该方案有很大的应用前景。

    关键词:嵌入式操作系统 Linux MiniGUI 信息终端

引言

近年来,随着软硬件资源的成熟与完善,嵌入式技术越来越和人们的生活紧密相关,功能单一的公用电话也开始向嵌入式多媒体信息终端转型。对嵌入式系统的研究,在全球激起了人们极大的兴趣。

选择开放源码的Linux操作系统开发新一代嵌入式产品已经成为其中新的技术热点。在本系统中,采用了MontaVista Linux系统。它提供了很多处理器、目标板和主机环境的组合,有一套完整的辅助开发工具,便于嵌入式系统专用人员设计、开发和发布应用程序。

与此同时,配备一个优秀的图形用户界面,使产品和用户能进行友善可靠的交互也已成为开发工作中非常紧迫的要求。本系统中使用的MiniGUI就是嵌入式Linux系统下一个轻量级的图形用户界面支持系统,目前已比较成熟,并已被用到很多项目的实际开发中。

1 嵌入式Linux系统

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁减。适用于用户系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。从20世纪80年代末开始,陆续出现了一些嵌入式操作系统,如VxWorks、pSOS、WindowsCE、Linux等。其中免费源代码的Linux操作系统因其内核小、支持多种硬件平台、可裁减性好等显著优点,得到了广泛的关注,为嵌入式系统开发提供了一个极有力的选择。

(2)MontaVista Linux

目前,已有多家公司推出了嵌入式Linux发行版本。本系统中采用的是应用全球三大嵌入式Linux供应商之一MontaVista Software公司的最新版MontaVista Linux3.0。它使用的是最标准Linux内核2.4.2,是针对嵌入式设备度身定制的实时的、专业的嵌入式操作系统。考虑到嵌入式设备处理器、存储器资源有限的情况,在不减少新内核对嵌入设备有利特性的基础上,MontaVista公司对内核部分进行了高度裁减、配置,使MontaVista Linux 3.0。它使用的是标准Linux内核2.4.2,是针对嵌入式设备度身定制的实时的、专业的嵌入式操作系统。考虑到嵌入式设备处理器、存储器资源有限的情况,在不减少新内核对嵌入设备有利特性的基础上,MontaVista公司对内核部分进行了高度裁减、配置,使MontaVista Linux 3.0系统性能具备稳定、突出等特点,同时还为MontaVista Linux 3.0配备了一个由优先级驱动的实时调度器(RealTime Scheduler),从而使客户对实时性的要求得到更大的满足。

2 软件开发平台

MontaVista Software公司在嵌入式Linux发行版中已提供了系统开发所需的环境:

a)内核和文件系统工具——目标配置工具(TCT)、库优化工具(LOT);

b)交叉开发工具——GNU GCC/C++编译器、GDB源码调试器、DDD图形界面调试器等;

c)实时性能工具和分析工具。

系统内核则通过Abatron公司的BDI2000调试器进行测试,内核运行于PowerPC体系的CPU上。该目标系统已实现以太网接口、串口、USB接口,LCD也能正常显示。

3 系统框架结构

应用程序是最上层的开发,其交互界面直接通过MiniGUI图形系统的API接口函数实现。MiniGUI屏蔽了对底层显示、输入设备编程的细节,使程序员更能专注于信息终端界面的特色上,从而缩短了编程投入时间。MiniGUI图形率编译安装后一般以库的形式存放在操作系统/usr/lib文件目录下。

该嵌入式系统的框架结构如图1所示。

4 MiniGUI的移植

(1)MiniGUI特点

MiniGUI是由魏永明主挂的一个自由软件项目,现完全遵循GPL(General Public License)条款的纯自由软件,可以运行在任何一种具有POSIX线程支持的POSIX兼容系统上。MiniGUI在体系结构上有许多独特之处。它的主要特色有:

a)提供了完备的多窗口机制;

b)对话框和预定义的控件类;

c)消息传递机制;

d)多字符集和多字体支持;

e)全拼、五笔等汉字输入法支持;

f)BMP、GIF、JPEG等常见图像文件的支持;

g)小巧,包含全部功能的库文件大小为300KB左右;

h)可配置,可根据项目需求进行定制配置和编译;

i)可移植性好。

(2)MiniGUI的移植过程

要使MiniGUI运行在入式目标板PPC上,需在MontaVista Linux 3.0的交叉开发环境下移植该图形包。

MiniGUI 1.2.6版发布时含资源文件压缩包minigui-res1.2.6.tar.gz、库文件压缩包libminigui-1.2.6.tar.gz和一个综合示范程序mde-1.2.6.tar.gz。

在开发主机上安装好MontaVista Linux 3.0后,把主机NFS服务的输出目录配置为硬盘路径/opt/hardhat/devkit/ppc/8xx/target。目标板运行起来后,会自动挂载到该目录下。

将该目标作为当前路径安装MiniGUI。

打开资源文件压缩包,执行如下命令

tar-xvf minigui-res-1.2.6.tar.gz

会自动在当前路径下生成minigui-res目录。在该目录下可以看到config.linux文件,修改其中TOPDIR=NONE一项,使TOPDIR=/opt/hardhat/devkit/ppc/8xx/target,此处的路径对应的就是前面设置的NFS输出目录。运行安装命令make install即可。

编译库文件压缩包libminigui-1.2.6.tar.gz时,解压步骤如上。不同的是须在当前目录下运行configure命令对库文件进行移植的配置。命令行如下:

CC=ppc_8xx-gcc./configure

--build=i386-linux

--target=ppc-unknown-linux

--prefix=/opt/hardhat/devkit/ppc/8xx/target

--libdir=/opt/hardhat/devkit/ppc/8xx/target/usr/lib

--includedir=/opt/hardhat/devkit/ppc/8xx/target/usr/include

--enable-debug

其中,ppc_8xx-gcc是针对PowerPC体系结构目标的编译器,是MontaVista Linux提供的;build是指执行编译的机器,这里是x86的开发主机;target是运行该编译器所产生目标文件的机器;prefix是所有安装路径的前缀;libdir是库文件安装路径;includedir是头文件安装路径;enable-debub指编译时需包含调试信息。

配置完,运行编译安装命令。

综合示范程序mde-1.2.6.tar.gz的安装方法和库文件类似的。

此时,启动目标板,在MontaVisa Linux的控制程序下,进入/mde-1.2.6/mginit目录,输入命令行./③mginit运行MiniGUI的这个后台服务器程序,出现一个有小企图片的窗口管理器,并在左上角弱出一个控制台程序的子窗口。在该控制台下,可以运行mde中其它的示范例子。至此,MiniGUI图形包在目标板上移植安装完成。

5 信息终端软件开发

本系统中采用了MiniGUI专为嵌入式系统开发的Lite版本。它基于客户/服务器(C/S)体系,在服务器和客户之间传递输入设备数据,以及客户和服务器之间的某些语法 和响应数据。

在该信息终端软件中,就根据这种结构特点,设计了一个服务器程序和两个客户进程。服务器始终运行后台,记录有关系统信息,如系统计时、用户刷卡余额等,通过MiniGUI提供的Socket机制通信将数据传给下面的客户程序。主界面客户进程给用户提供了完整的操作体验,用户可以通过菜单选择打电话、浏览信息等功能。另一客户进程则是广告屏保,在无人使用的间隙时间里,可以动态显示一些精彩的画面,实现商业价值或公益宣传。下面分别进行介绍。

(1)信息终端客户程序

该信息终端主体界面客户程序在MiniGUI服务器的控制台程序下打开,弹出的是信息终端的主菜单,显示了电话、信息查询、城市交通、新闻专栏等板块。

程序实现时,开始是包含的头文件。

MiniGUI图形包的头文件有:common.h(MiniGUI常用的宏及数据类型的定义)、minigui.h(全局的和通用的接口函数及杂项函数的定义)、window.h(定义了和窗口有关的宏、数据类型、数据结构和窗口函数)。使用GDI函数和控件还需包括gdi.h、control.h两个头文件。

编程实现时,MiniGUI的程序入口点是MiniGUIMain函数,系统初始化后就会自动找到该函数。在该函数中先设置主窗口一些基本属性,建立每个客户程序唯一的一个消息队列。当程序结束时,调用MainWindow ThreadCleanup函数,清除主窗口所使用的消息队列系统资源,退回服务器程序中。

其,各个功能子函数是在MiniGUI程序的另一主体部分——主界面窗口的过程函数中调用打开的。在主窗口建立时,其中有一项属性MainWindowProc,即是注明了对应该窗口的过程函数。各个功能模块的消息也都是通过主窗口中的消息循环进行触发的。

窗口过程函数主体上都是switch和case结构的选择语句,针对不同的消息产生不同的响应。一般MSG_CREATE消息在窗口生成时被发送,因而控件往往在这里调用CreateWindow函数生成。MSG_PAINT则是在移动窗口或调用UpdateWindow重绘时发生,可根据需要定义相应的操作。MSG_CLOSE即是关闭窗口时的动作,一般调用DestroyMainWindow销毁主窗口,调用PostQuitMessage退出消息循环。

此外,在窗口过程函数MiniGUI提供的GDI,即图形设备接口(graphics device interface),可以方便地将BMP、GIF、JPEG等图片用LoadBitmap函数输出到界面,并通过设备上下文(DC)的逻辑字体(logfont)实现多字体和多字符集支持。

广告进程的制作也类似,不再说明。

(2)信息终端软件服务器程序

因为服务器和客户程序需要交换数据,所以我们使用了经MiniGUI包装过的Socket通信机制。

在服务器中,建立一个监听套接字:

#define LISTEN_SOCKET "/var/tmp/socket1"

static int listen_fd;

BOOL listen_socket(HWND hwnd)

{ if((listen_fd=serv_listen(LISTEN_SOCKET))<0)

return FALSH;

return RegisterListenFD(listen_fd,POLLIN,hwnd,NULL);

}

服务器监听该套接字listen_fd。当客户有连接请求时,服务器的过程函数中就会收到MSG_FDEVENT消息,服务器就可以接受该请求以进行相应处理:

static int MainFunProc(HWND hWnd,

{ switch(message)

{case MSG_FDEVENT:

if(LOWORD(wParam)= =listen_fd){

……

conn_fd=serv_accept(listen_fd,&uid);

if(conn_fd>0){

sock_read(conn_fd,buff[20],40);

……

sock_write(conn_fd,buff[20],40);

}}

break;

}}

在主界面进程中,需要连接到服务器时,可以通过cli_conn(LISTEN_SOCKET,'b')来提出请求。

这样,服务器和客户程序之间即可相互交流数据了。

广告进程实现时,需要在服务器中设置事件钩子函数SetServerEventHook(my_event_hook)。因为广告屏保是在没有键盘鼠标输入的一段时间后自动打开的,有任意键时又自动关闭,所以只有始终运行在后台的服务器才能判断广告是否要打开关闭。

可以在消息循环时进行判断:

while(GetMessage(&Msg,HWND_DESKTOP))

{if (pid_scrnsaver= =0&&GetTickCount()>

old_tick_count+1000){

ShowCursor(FLASE);

pid_scrnsaver=exec_app("./scrnsaver","crnsaver");

}

DispatchMessage(&Msg);

}

dld_tick_count是前一次消息的时间。当从GetTickCount()得到的当前时间大于设定值时,还没有任何消息的话,广告屏保scrnsaver程序就启动,同时隐蔽鼠标光标。

当系统又接收到事件时,会自动执行前面注册过的事件钩子函数。在该函数中,使用kill(pid_scrnsaver,SIGINT)命令关闭广告程序,并显示鼠标即可。

软件系统的示意如图2所示。

将完成的C语言程序文件用交叉编译工具编译,并链接MiniGUI库文件,即可生成所需的可执行文件。

结语

将嵌入式Linux应用至信息家电类产品中,并开发出优秀的人机交互界面,是嵌入式发展的趋势,拥有广阔的市场前景。本系统开发的嵌入式信息终端也已初见成效,相信这种方案必将得到越来越多的应用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭