微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式Linux的MapInfo格式地图显示

基于嵌入式Linux的MapInfo格式地图显示

时间:05-21 来源:互联网 点击:

1. 引言

农田信息采集装置,车载导航仪和PDA等机载和手持式小型设备都需要GPS定位和地图显示功能的支持。而市场上实现这种功能的大部分平台都是基于WINCE这种操作系统,可以采用EVC开发,开发流程明确,驱动支持较丰富,但总体开发成本较高。由于Linux其免费,可配置,网络性能,MiniGUI也是轻型、高性能、高可靠性、可配置的GUI,本文采用MiniGUI在ARM-linux平台上实现了简单的地图显示功能。

在硬件环境上,使用一块AT91rm9200为核心的开发板,32M SDRAM,16M FLASH, LCD显示,选取嵌入式Linux作为操作系统,为了实现地图显示的功能,首先在宿主机上建立交叉编译环境,移植MiniGUI到开发平台上,使平台支持图形显示,接着根据MapInfo格式的一系列文件的内部结构和相互关系编程分析,得到基础图元数据和类型,再通过一系列坐标转换,最后在LCD上显示出地图。最终使平台支持了MapInfo这种主流的地图,并为以后的地图匹配,农田信息采集、分布图生成打下了基础。

2. MiniGUI的移植

对嵌入式平台的开发首先都要建立交叉编译环境和最终的运行环境。针对笔者所采用的ARM-Linux平台,交叉编译是为了在采用linux的宿主PC机上生成最终在ARM处理器上linux操作系统下可运行的代码。而建立运行环境是将一些必要的资源文件安装到程序运行的 ARM-Linux平台上。接下来以MiniGUI1.3.3版为例,介绍在它该ARM板上的移植过程。该版本可在飞漫软件的网站上免费下载,并需要遵守 GPL协议。

2.1 PC机上交叉编译环境的建立

主要是安装交叉编译器,并交叉编译MiniGUI库的源代码,生成应用程序需要的链接的动态和静态的库文件。

首先需要安装和板载linux相同版本的arm-linux-gcc编译器到采用linux操作系统的宿主机的某个路径下(如:/usr/local/arm/bin,若编译器有特殊要求,则一定要安装到它指定的路径下),并将该路径添加到宿主机的PATH环境变量中,如果此时在字符终端中命令行下输入arm-linux-gcc有使用格式提示,则说明PATH变量添加成功。

第二步解压libminigui-1.3.3.tar.gz软件包,进入该目录,运行./configure(产生 Makfile文件),需要指定一些选项,CC=arm-linux-gcc(指定编译器),target=arm-linux(指定目标平台),prefix=…(MiniGUI函数库的安装路径),host=i686-pc-linux-gnu(宿主机类型,本文的宿主机的版本是 RedHet9.0),然后使用make编译库,make install安装库、头文件、配置文件到prefix选项指定的地方。

最后,在编写或移植应用程序的时候,Makefile里面指定的编译器和链接的库的位置如上所述,所以需要注意的一般是CC项--指定编译器,LIBS项--指定库文件位置,DEFAULT_INCLUDES项--指定头文件位置。

2.2 平台运行环境的建立

运行环境建立在目标板的文件系统中。

下载并解压minigui-res-1.3.3.tar.gz压缩包,修改其中的configure.linux文件,prefix选项指定了以后make install命令安装资源文件的位置,默认是本机(宿主机)的/usr/local下,可以修改这个选项以符合系统要求。因为最终可执行文件运行在目标板上,所以prefix项一般指定到目标板文件系统的***/usr/local路径下,它会在目标板的文件系统的***/usr/local/lib /minigui/res目录下(***为目标板文件系统在宿主机上的位置)。

最后,还要保证嵌入式平台LINUX支持MiniGUI。在基于Linux的系统上,MiniGUI在LinuxFrameBuffer驱动程序的基础上建立图形引擎[6]。一般而言,基于Linux的嵌入式系统均会提供FrameBuffer支持,为了确定FrameBuffer驱动程序是否被激活,可以通过查看嵌入式平台运行时的/proc/devices目录下是否有fb设备,如果启动后存在fb设备,那么在平台的文件系统中/usr/local/etc下的 MiniGUI.cfg中指定使用fbcon的引擎。

如果显卡驱动支持FrameBuffer驱动,则可以在内核编译的时候加入FrameBuffer项。如果显卡的驱动不是FrameBuffer的,则使用其它的图形引擎或者编写一个,如修改MiniGUI库的源代码目录libminigui-1.3.3/src /newgal/dummy中的dummy引擎,把显示驱动加进来构造自己的显示引擎。在dummy文件夹下的nullvideo.c 中,DUMMY_CreateDevice函数初始化MiniGUI的负责显示的数据结构GAL_VideoDevice。 DUMMY_VideoInit函数处理硬件驱动中底层设备初始化,设置视频输出的格式(NTSC,PAL,DRGB,VGA)。 DUMMY_SetVideoMode函数重点处理缓存的分配,RGB的位数和透明效果。DUMMY_VideoQuit释放驱动的底层设备的数据结构和显示包的缓冲队列。DUMMY_UpdateRects是更新新的显示包的地方,第一次调用时构造显示

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top