歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 嵌入式Linux環境下MiniGUI的研究與移植

嵌入式Linux環境下MiniGUI的研究與移植

日期:2017/3/2 10:07:02   编辑:關於Linux

近年來隨著嵌入式設備與市場需求的廣泛結合,手機、PDA等產品的應用對可視化操作界面的簡潔和方便提出了更高的要求,這都需要一個穩定可靠的高性能GUI系統來提供支持。圖形用戶界面(Graphic User ?Interface,簡稱GUI)的廣泛流行是當今計算機技術的重要成就之一,它極大地方便了非專業用戶的使用,人們可以通過窗口、菜單方便地進行操作。嵌入式系統對GUI的基本要求包括有輕型、占用資源少、高性能、高可靠性以及可配置等。MiniGUI是目前比較常用的幾種GUI系統之一,與其他的GUI相比,MiniGUI最顯著的特點就是輕型、占用資源少,而且在這幾年的發展裡,MiniGUI已經非常成熟和穩定了,在許多產品和項目中都已得到了實際應用。

1 MiniGUI的特點和體系結構

1. 1 MiniGUI的特點

MiniGUI是由原清華大學教師魏永明主持開發的輕量級圖形系統,是一種面向嵌入式或實時系統的圖形用戶界面支持系統。它遵循GPL公約,是基於SVGALib及LinuxThread庫的多窗口GUI支持系統。能跨多種操作系統,主要運行於linux及一切具有POSIX線程支持的POSIX兼容系統,包括普通嵌入式Linux、eCos、uC/OS-II、VxWorks等系統,是國內最早的自由軟件之一。

MiniGUI的主要特點有:(1) 遵循GPL條款的純自由軟件;(2) 提供了完備的多窗口機制;(3) 多字符集和多字體支持,目前支持ISO8859-1、GB2312及Big5等字符集,並且支持各種光柵字體和TrueType、Type1等矢量字體;(4) 全拼和五筆等漢字輸入法支持;(5) BMP、GIF、JPEG及PCX等常見圖像文件的支持;(6) Windows的資源文件支持,如位圖、圖標、光標、插入符、定時器及加速鍵等;(7) 可移植性好。

1.2 MiniGUI的體系結構

1.2.1 多線程的分層設計

從整體結構上看,MiniGUI是分層設計的,結構如圖1所示。在最底層,GAL(圖形抽象層)和IAL(輸入抽象層)及鼠標和鍵盤的驅動;中間層是MiniGUI的核心層,包括窗口系統必不可少的各個模塊;最頂層是API,即編程接口。GAL和IAL為MiniGUI提供了底層的Linux控制台或者X Window上的圖形接口以及輸入接口,而Pthread用於提供內核級線程支持的C函數庫。利用GAL和IAL,大大提高了MiniGUI的可移植性,並且使程序的開發和調試變得更加容易。

MiniGUI本身運行在多線程模式下,它的許多模塊都以單獨的線程運行,同時,MiniGUI還利用線程來支持多窗口。從本質上講,每個線程有一個消息隊列,消息隊列是實現線程數據交換和同步的關鍵數據結構。一個線程向消息隊列中發送消息,而另一個線程從這個消息隊列中獲取消息,同一個線程中創建的窗口可共享同一個消息隊列。一個線程向消息隊列中發送消息,而另一個線程從這個消息隊列中獲取消息,同一個線程中創建的窗口可共享同一個消息隊列。利用消息隊列和多線程之間的同步機制,可以實現下面要講到的微客戶/服務器機制。

1.2.2 微客戶/服務器結構

在多線程環境中,與多進程間的通訊機制類似,線程之間也有交互和同步的需求。比如, 用來管理窗口的線程維持全局的窗口列表, 而其他線程不能直接修改這些全局的數據結構, 而必須依據“先來先服務”的原則,依次處理每個線程的請求,這就是一般性的客戶/服務器模式。MiniGUI利用線程之間的同步操作實現了客戶線程和服務器線程之間的微客戶/服務器機制。

2 開發環境

H2410EB開發板由北京恆頤高科技術有限公司設計開發,它基於Samsung公司的S3C2410A20嵌入式ARM處理器。S3C2410A20內嵌 ARM920T 核,帶有全性能的MMU,具有高性能、低功耗、低成本、小體積等優點,適用於手持設備、汽車等領域。

H2410EB除帶有大容量的SDRAM和Flash以外,還擴展了RS-232C串行接口、10Mbps以太網接口、觸摸屏接口、音頻輸入/輸出接口、USB Host、USB Slave、UART接口、IIC接口、用戶自定義鍵盤、LCD顯示器,方便用戶使用和進行參考設計。它支持嵌入式Linux操作系統的運行,支持MP3/MPEG播放、GUI、Web 服務及其它服務,同時可根據用戶需求開發特定軟件與設備驅動程序。

操作系統采用裁減後的Linux,Linux Kernel版本為v2.4.18,系統使用的交叉編譯器是arm-Linux-gcc。另外,還有驅動程序源碼和測試程序源碼等代碼模塊。

3 MiniGUI的移植

本文中使用的主機系統為Red Hat Linux 9.0,移植目標系統為Linux2.4.18,MiniGUI的版本是1.6.9。在主機上交叉編譯MiniGUI鏈接庫,然後將針對目標機編譯的庫文件,與根文件系統一起燒寫到目標板的RAM空間,以後將運行在目標板上的圖形用戶界面直接鏈接到該庫,脫離主機獨立運行。

3.1 Linux交叉編譯環境的構建

GUI的編譯通常都是在PC機上執行的,也就是說,編譯器本身能夠在PC機上執行,同時編譯源代碼生成的二進制文件必須能在目標機上執行,這類編譯器通常稱為交叉編譯器。對於ARM平台,我們安裝了cross-arm-binutils-2.10-1.i386.rpm、cross-arm-gcc-2.95.3-2.i386.rpm、cross-arm-glibc-2.1.3-2.i386.rpm這三個包。這些包都可以從網上免費獲取。arm-binutils這個包一般包含了一些針對ARM平台的二進制工具,比如arm-strip、arm-ar等命令;arm-glibc這個包包含的是標准C的函數庫的ARM的版本以及對應的頭文件;arm-gcc中包含的則是生成ARM平台代碼的x86上的交叉編譯器。執行rpm命令將這些包安裝到PC機上,若不在系統默認搜索目錄下,則必須將安裝目錄加到系統的PATH環境變量中,這樣在每次編譯時系統才能找得到編譯器。

以root用戶登陸Linux系統,在主機上用rpm指令安裝交叉編譯工具,arm-linux-gcc將被安裝到/usr/local/arm/2.95.3/下面。此時,gcc為 /usr/local/arm/2.95.3/bin/arm-linux-gcc,而它的include為 /usr/local/arm/2.95.3/arm-linux/include,對應的lib為 /usr/local/arm/2.95.3

-/arm-linux/lib。然後,在你的bashrc 中添加環境變量即可。執行vi .bashrc,最後一行加入:export PATH=$PATH:/usr/local/arm/2.95.3/bin路徑,保存退出後執行source .bashrc。

另外需要注意的是,編譯時所用的函數庫版本要與目標版上運行時所用的函數庫版本一致。經過上述步驟,就已經建立了交叉編譯環境,接下來的就是進行MiniGUI的選項配置和交叉編譯。

3.2 MiniGUI的配置和交叉編譯

我們可以從網上(http://www.minigui.com/download)免費得到MiniGUI-1.6.9的資源文件壓縮包,MiniGUI1.6.9的源程序包包括以下三個部分:libminigui-1.6.9.tar.gz-MiniGUI函數庫源代碼;miniguires-1.6.9.tar.gz-MiniGUI所使用的資源,包括基本字體、圖標、位圖、輸入法等;mde-1.6.9.tar.gz-MiniGUI的綜合演示程序。

Copyright © Linux教程網 All Rights Reserved