基於嵌入式Linux的MapInfo格式地圖顯示

2020-12-20 電子產品世界

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是更新新的顯示包的地方,第一次調用時構造顯示包或者包的隊列,之後可以根據一定的算法計算需要重繪的區域。並在MiniGUI.cfg中需要指定使用新構造的Dummy引擎。

3.MapInfo格式地圖的顯示

MapInfo是面向應用的桌面地圖信息系統,數據組織方式靈活,查詢、統計、分析及專題製圖功能較強,其格式的地圖較豐富。在一些農田採集平臺,城市交通GPS引導中往往使用一些MapInfo格式的地圖。由於在Linux平臺下,沒有控制項的支持,但是可以通過分析 MapInfo格式,使用MiniGUI實現簡單的地圖顯示。

MapInfo的數據格式主要分為TAB和MIF(MID)兩種格式,TAB格式是MapInfo唯一的數據存儲格式, 所有基於該軟體上的應用系統都要以這種格式為依託。MapInfo數據採用雙資料庫存儲模式,屬性數據存儲在屬性數據的表結構文件(.tab)與屬性數據文件(.dat)中,空間數據保存在空間數據文件(.map) 中,兩者通過交叉索引文件(.id)聯繫(如圖1所示)。通常TAB格式的文件主要由以下幾個文件組成:.tab文件描述表結構,.dat或.dbf文件包含表的數據,.map文件表的圖形對象,.id文件包含表的地理索引,.ind文件包含表的列索引。

MIF(MID)是MapInfo的外部數據交換文件。MapInfo主要通過MIF、MID兩個文件與其他GIS軟體建立數據接口,其中MIF數據文件主要保存空間數據的圖形信息,MID 數據文件主要保存空間數據的屬性信息。MIF由文件頭和數據段組成,數據段包含MapInfo定義的點、線、面、多義線、區域、圓弧、文本、矩形、圓角矩形和橢圓等實體。MID文件為對應實體的屬性。IND文件不是必需的,它對應於每個索引欄位都有一個索引表。它們之間關係如圖1所示。

MIF文件包括MIF File Header和MIF Data Section兩個部分。在MIF File Header部分中我們通過格式分析可以得到該圖層使用的坐標系是何種格式,使用的橢球標準(如WGS84,International 1924),轉換坐標系使用的七參數等等。具體可以針對將要顯示的地圖的坐標系格式實現一種,如WGS84這種坐標系。而在MIF Data Section部分中地理對象被描述為point、line、polyline、region、arc、text、rectangle、rounded rectangle、ellipse、multipoint、collection這幾種類型,並按照一定的格式存儲。

相關焦點

  • 基於S3C2440的嵌入式Linux根文件系統構建
    3 busybox的編譯和安裝  3.1 開發環境  基於S3C2440 ARM920T的硬體平臺,該系統的硬體平臺上主要使用三星S3C2440,外圍還包括64 M SDRAM和64 M NAND Flash,2 M NOR Flash,系統採用宿主機加目標板的模式,宿主機是PC機,其作業系統是RedHat linux,目標板是基於S3C2440微控制器的開發板
  • 嵌入式Linux NFS 根文件系統的構建及研究
    在此基礎上,進一步構建出基於NFS的嵌入式Linux根文件系統,並給出了啟動腳本和配置文件。這種根文件系統可以方便地在線更改、調試程序,降低了嵌入式系統的開發門檻。關鍵詞:NFS;Busybox;根文件系統;S3C2440;Linux 隨著信息技術的發展,嵌入式系統技術已經廣泛應用於國防、通信、工業控制、消費電子等諸多領域。
  • 基於busybox的嵌入式Linux根文件系統的的製作方法
    根文件系統一直是Linux系統不可或缺的組件,在嵌入式Lin-ux中,內核在啟動期間進行的最後操作之一就是安裝根文件系統。Busybox是構建嵌入式Linux根文件系統的軟體,用它製作根文件系統簡單、方便,而且設置靈活。
  • 推薦一款兼容GSM/WCDMA/LTE網的mapinfo工具
    小區信息顯示和更新,顯示小區圖形化QOS,計算天線下傾角 6. 輸出頻率規劃文件7. 輸出鄰區規劃文件8. 輸出image格式的地圖9.安裝方法:把整個MY-RF-GSM目錄copy到C:\打開C:\MY-RF-GSM\Application,雙擊MY-RF-GSM.MBX下載地址:http://pan.baidu.com/s/1mgIBQOS裡面包含兩個壓縮文件,一個是mapinfo9版本的,一個是mapinfo11或以上版本的。
  • 吉時利發布基於LINUX的參數測試系統
    其最主要升級是在每套測試系統中的嵌入式控制電腦上移植Linux作業系統(OS)。本項升級為其控制電腦提供更穩定的OS和更長的服務壽命,減少了用戶升級新工作站和軟硬體資源的開銷。此外,此次固件升級相比原來基於UNIX的系統具有更高的測試產能。新軟體授權(license)方法採用USB棒作為每套測試器的硬體鑰匙,通過在不同工作站間的遷移縮短維護時間。
  • linux系統工控機-ubuntu烏班圖嵌入式工業電腦
    不過在工控領域,最為常見的系統只有三種,即微軟系統(Windows XP/7/8/10),安卓系統(Android5.0/5.1等)以及嵌入式的烏班圖Ubuntu Linux系統。linux系統工控機-807A正面Linux是自由的免費開源的,它是以unix為原型改造的,一個多用戶多任務的作業系統,任何人都可以修改其代碼和頁面,其中主要的目的就是為了不收商業化的限制,而我們將伺服器部署在linux系統上會更加高效穩定、安全(註:UNIX作業系統(尤尼斯),是一個強大的多用戶、多任務作業系統,支持多種處理器架構
  • 嵌入式Linux下中文字體顯示
    打開APP 嵌入式Linux下中文字體顯示 發表於 2019-04-29 15:11:52 1).
  • 基於CPCI的嵌入式系統的電源設計
    1 引言 嵌入式系統廣泛應用於控制和通信領域。這裡介紹一種基於CPCI的嵌入式單板計算機電源的設計方案。該設計主要應用於航空設備和軍用車載設備。本文引用地址:http://www.eepw.com.cn/article/181203.htm2 系統電源需求分析與器件造型 圖1為系統整體結構框圖。
  • 基於Yocto Project的定製嵌入式Linux產品設計淺析
    基於Yocto Project的定製嵌入式Linux產品設計淺析 電子發燒友 發表於 2019-05-30 15:42:07 引言 Linux作為嵌入式系統的主要工具
  • 工程師嵌入式Linux自學筆記及體會
    在設計嵌入式應用的時候,可以不按照這種層次,應用程式越過 C 庫直接和內核會話,或者把應用和內核捆綁在一起,甚至可以把應用寫為內核的一個線程,在內核中運行,雖然這樣在移植上帶來了困難,但考慮嵌入式系統對尺寸要求小的特點,是完全可行的。不過我們使用三層軟體結構的模式來學習嵌入式 linux將會是我們認識更清晰,簡單可行並使應用具有彈性。
  • 基於模型的嵌入式C代碼的實現與驗證
    摘要:以51晶片為例,講述了模型的建立、調試與驗證,以及基於模型的嵌入式C代碼的自動生成及軟硬體在環測試1 基於模型的設計優點 傳統開發模式利用手工編寫代碼,即把控制策略翻譯成高級語言代碼,然後用斷點調試的方式測試和修改控制程序。其存在很多弊病: ①對軟體工程師在嵌入式軟體代碼編寫方面要求較高,雖然軟體工程師對被控對象的特性和控制方法有深入了解,但往往並不擅長編寫MCU的底層代碼。這迫使軟體工程師花費大量精力去仔細閱讀MCU相關說明書。
  • 採用busybox的嵌入式Linux根文件系統的的製作方法
    根文件系統一直是Linux系統不可或缺的組件,在嵌入式Lin-ux中,內核在啟動期間進行的最後操作之一就是安裝根文件系統。Busybox是構建嵌入式Linux根文件系統的軟體,用它製作根文件系統簡單、方便,而且設置靈活。
  • 基於Qtopia的嵌入式Linux俄文環境解決方案
    Qtopia是Trollteeh面向嵌入式Linux的綜合應用平臺,它是基於Qt的嵌入式版本Qt/Embedded庫的基礎上,專門針對PDA,SmartPhone這類運行嵌入式Linux的移動計算設備和手持設備所開發的一套開放源碼的應用程式包和開發庫。
  • 嵌入式MIDI文件格式解析設計與實現
    摘要:建立在嵌入式系統平臺上的電子樂譜閱讀器可以代替傳統紙質樂譜和譜架的組合成為樂譜閱讀的理想方式,因此在嵌入式系統上閱讀MIDI等文件格式的數字樂譜具有重要的意義。當前可以獲得的電子版的樂譜可以分為兩種,一種是基於圖片格式的,另一種是基於數位音樂格式的。前一種主要包括jpg圖,gif圖等圖片格式,以及主要由圖片構成的pdf,chm等文檔格式,在此本文不作為重點;後一種主要包括MIDI文件格式和一些打譜軟體所使用的專用格式。
  • 用OpenEmbedded構建嵌入式Linux系統
    本篇文章主要是教大家如何用OpenEmbedded構建嵌入式的Linux系統,不過它做得太複雜,如果不出問題,用起來很方便,但是一旦出點問題,就不知道該怎樣去弄了。作者是用Embedded-LFS構建的,它非常簡單,當然功能也要弱一些,對於只想玩玩的初學者還是有幫助的。
  • 基於Qt/E的嵌入式Linux中文輸入法的設計與實現
    Qt/E是Nokia公司發布的面向嵌人式系統的Qt版本,正日益成為嵌入式GUI開發的主流,被越來越多的國內外廠商用於可攜式電子設備的開發,然而它並沒有提供中文輸入法。目前國內在Qt/E平臺下開發的中文輸入法主要有2種方式:  1)移植現有的PC機系統下的基於Qt/X1 1的中文輸人法,移植了基於X Window下的XIM輸入協議的中文輸入法,但其需要X Window下Xlib庫的支持,這將增大系統開銷,減慢顯示的速度。
  • 嵌入式linux內核的編譯步驟
    嵌入式linux內核的編譯步驟 華清遠見 發表於 2020-06-19 09:30:24   編譯嵌入式Linux內核都是通過make的不同命令來實現的,它的執行配置文件是
  • 嵌入式系統課程的教與學
    學習在linux下的編程和編譯過程,在linux上運行。實驗二  「hello world!」嵌入式linux程序                               (2學時)(1)目的要求進行最簡單的嵌入式linux程序開發,熟悉linux下嵌入式開發模式以及在板上運行的嵌入式程序的方法。
  • 物聯網和嵌入式有什麼關係?嵌入式什麼意思?
    物聯網和嵌入式有什麼關係?嵌入式什麼意思?那麼先來了解下嵌入式設備的本質吧,其本質是一臺專用的、微型計算機,嵌入式設備也由三個層次的相關內容組成:1)硬體,包括cpu(如ARM)、存儲(如flash)、I/O(顯示模塊、通訊模塊、視音頻模塊、I/O控制電路等)。
  • 嵌入式Linux開發必懂:基於ARM64的init用戶進程究竟如何啟動?
    [導讀] 前面的文章有提到linux啟動的第一個進程為init,那麼該進程究竟是如何從內核啟動入口一步一步運行起來的,而該進程又有些什麼作用呢?做嵌入式Linux開發,有必要對這些概念了解清楚。本文基於ARM體系的內核啟動做出解析。