您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

嵌入式Linux下基于MiniGUI的信息终端软件开辟

发布日期:2011-05-25

  嵌入式体系的开辟已成为新的行业热门。本文起首概述嵌入式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文件目次下。

  
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)下令封闭告白步调,并表现鼠标即可。

  将完成的C语言步调文件用交错编译东西编译,并链接MiniGUI库文件,即可天生所需的可实行文件。

 
 结语

  将嵌入式Linux应用至信息家电类产品中,并开辟出精良的人机交互界面,是嵌入式生长的趋势,拥有广阔的市场远景。本体系开辟的嵌入式信息终端也已初见结果,信托这种方案必将得到越来越多的应用。