中文字幕第二一区_久久久久在线视频_精品国产自在现线看久久_亚洲精品一区二区三区电影网

產品分類

當前位置: 首頁 > 傳感測量產品 > 數據采集產品 > 工控機

類型分類:
科普知識
數據分類:
工控機

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

發布日期:2022-04-18 點擊率:38

                   摘 要:近幾年,嵌入式 Linux 系統已得到廣泛的應用,相應的圖形用戶界面的開發也日趨重要,MiniGUI正是其中的一個輕量級的圖形用戶界面支持系統。本文分析了嵌入式操作系統下圖形用戶界面MiniGUI 的結構和特點,描述了將MiniGUI在ARM Linux下的移植方法與過程,并對這種基于 MiniGUI的嵌入式系統開發做了展望。
關鍵詞:嵌入式Linux;圖形用戶界面;MiniGUI


Abstract:Recently, the embedded system on Linux has been used broadly. At the same time, the related development of graphic user interface is more and more important. MiniGUI is based on a lightweight GUI support system. This paper describes the structure and characteristics of MiniGUI, explains the method and process in porting of MiniGUI graphical system under the ARM Linux, and forecasts the embedded system based on MiniGUI.
Keywords: Embedded Linux; GUI; MiniGUI

0 前言
      近年來隨著嵌入式設備與市場需求的廣泛結合,手機、PDA、DVD播放機等產品的應用對可視化操作界面的簡潔和方便提出了更高的要求,這都需要一個穩定可靠的高性能GUI系統來提供支持。圖形用戶界面(Graphic User Interface,簡稱GUI)的廣泛流行是當今計算機技術的重要成就之一,它極大地方便了非專業用戶的使用,人們可以通過窗口、菜單方便地進行操作。由于嵌入式系統實時性要求高,同時嵌入式系統硬件配置又有限,所以對輕型GUI的需求更加突出。另外,嵌入式系統往往是一種訂制設備,它們對GUI的需求也各不相同,因此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的可移植性,并且使程序的開發和調試變得更加容易。可以在X Window上開發和調試自己的MiniGUI程序,通過重新編譯就可以讓 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的綜合演示程序。
    3.2.1 配置MiniGUI選項
  把函數庫文件包解壓:tar zxf libminigui-1.6.9.tar.gz,進入libminigui-1.6.9這個目錄,執行make menuconfig命令
-system wide options中選擇Build MiniGUI-Lite,并取消Use incore (built-in) resource選項;
-Gal engine options 圖形引擎,根據目標機的顯示方式確認,這里只勾選了 NEWGal engine on Linux frameBuffer console,其它的不選;
-Ial engine options輸入引擎,可用觸摸屏只選了SMDK2410 Touch Screen;
-Font Options 中取消選擇Var bitmap font,可能是因為Bug的原因,當選擇了該選項后,編譯測試例子的時候總是提示unreferenced vfb_Courier …之類的錯誤;
-Image options選擇了Includes SaveBitmap-related functions。GIF、JPG、PNG圖形格式也勾選上;
-Development environment options 里使用Linux平臺,arm-linux-gcc編譯器,安裝路徑設置在 /usr/local/arm/2.95.3/arm-linux/。
      其它的用缺省選項就可以了,保存退出。
    3.2.2 MiniGUI函數庫的安裝和編譯
      進入目錄libminigui-1.6.9,再運行./configure腳本:
CC= arm-linux-gcc./configure——prefix=/mnt/nfs/local——build=i386-linux—— host=arm-linux——target=arm-linux——disable-lite——disable-micemoveable—— disable-cursor在這里,CC是用來指定所使用的編譯器,arm-linux-gcc即為安裝到主機上的交叉編譯工具。另外,
--prefix為MiniGUI函數庫的安裝目標路徑
--build是指執行編譯的主機
--host交叉編譯后的程序將運行的系統
--target是運行該編譯器所產生的目標文件的平臺
--disable-lite建立MiniGUI-Threads版本的應用程序
--disable-micemoveable禁止窗口移動
--disable-cursor由于系統采用觸摸屏,所以用此選項用來關閉鼠標光標顯示
如果運行./configure腳本成功通過,就可繼續進行下面的編譯了,執行make和make install命令編譯安裝libminigui。這里要注意的是,執行make install命令時要切換到Root用戶權限下,不然安裝時沒法把文件裝到指定目錄下。安裝成功后,MiniGUI 的函數庫和頭文件以及配置文件等資源將被安裝到/usr/local/arm/2.95.3/arm-linux/目錄中,具體情況為:函數庫被裝在lib / 子目錄中;頭文件被裝在include/ 子目錄中;手冊被裝在man/ 子目錄中;配置文件被裝在etc/ 子目錄中。
    3.2.3 MiniGUI資源的編譯安裝
      主機上解壓資源文件:tar zxf miniguires-1.6.9.tar.gz,可生成miniguires-1.6.9目錄。在安裝之前先要修改目錄中的configure.linux文件,執行vi configure.linux打開文件,把prefix選項部分的默認值 /usr/local/ 改為 /usr/local/arm/2.95.3/arm-linux/,這樣運行make install安裝命令后 MiniGUI資源將被安裝到目標系統中的/usr/local/arm/2.95.3/arm-linux/lib/minigui-
/res的目錄下。
    3.2.4 實例程序的編譯安裝
      解壓mde-1.6.9.tar.gz并進入該目錄,修改目錄下配置文件configure.in,把其中的AC_CHECK_HEADERS(minigui/commmon.h, have_libminigui=yes, foo=bar)改為
AC_CHECK_HEADERS($prefix/include/minigui /common.h,have_libminigui=yes,foo=bar),來指定交叉編譯時搜minigui的頭文件路徑,防止編譯時系統找不到頭文件;在所有LIB="$LIB后加入–L{prefix}/lib來指定編譯時所需要庫文件的路徑。并將libpopt-dev-arm- cross-1.6.tgz解壓所生成的頭文件和庫文件分別放入目標目錄的include和lib中,用以支持mde中程序在ARM下的交叉編譯。
      然后執行./autogen.sh,重新生成configure腳本,使用上面配置的腳本然后執行make命令,即可完成實例程序的編譯。
4 拷貝MiniGUI資源到開發板
      編譯完MiniGUI和實例程序之后,需要把MiniGUI庫、資源和應用程序拷貝到為目標機器準備的文件系統目錄中,然后生成文件系統映像,再下載到目標板上運行。可以通過串口、USB口或以太網口將文件系統映像下載到目標機器中。如果發現子目錄lib 中的MiniGUI 庫文件很大,很難全部拷貝到開發板上的話,可以對庫文件執行arm-linux-strip操作,arm-linux-strip指令會除去文件中的調試信息,使文件體積大大縮小。另外需要注意的是,有些庫函數是鏈接文件,如果單純的拷貝,會將原先的鏈接信息丟失,造成不必要的麻煩。使用tar命令將所需拷貝的資源打包,其中包括etc子目錄下的配置文件MiniGUI.cfg;lib 子目錄下的libmgext-1.6.9.so.0.0、libminigui- 1.6.9.so.0.0、libvcongui-1.6.9.so.0.0和minigui子目錄;mde-1.6.9目錄下的可執行程序。將這些資源燒寫進ramdisk文件系統中,解壓后將MiniGUI的配置文件MiniGUI.cfg放入/usr/local/etc目錄中,MiniGUI的庫文件放入/usr/local/lib目錄中。在執行程序之前,還有一件重要的事情要做,就是在開發板上的Linux中配置好MiniGUI的運行環境。
5板載Linux的環境配置
      MiniGUI可以使用多種圖形引擎進行圖像顯示,有qvfb、SVGALib、LibGGI等等,當然也可以自己編寫一個圖形引擎供 MiniGUI使用。這里我們使用qvfb來作為MiniGUI的圖形引擎進行圖像顯示。qvfb(vitural framebuffer)是在宿主機上模擬幀緩沖的,它是X Window用來運行和測試應用程序的系統程序,允許我們在桌面及其上開發Qt嵌入式程序,而不需要在命令臺和程序之間來回切換。qvfb使用了共享存儲區域(虛擬的幀緩沖)來模擬幀緩沖并且在一個窗口中(qvfb)模擬一個應用來顯示幀緩沖,顯示的區域被周期性的改變和更新。通過指定顯示設備的寬度和顏色深度,虛擬出來的緩沖幀和物理的顯示設備在每個像素上保持一致。這樣我們在每次調試應用時不需要總是刷新嵌入式設備的 FLASH存儲空間,從而加速了應用的編譯、連接和運行周期。
      首先對qvfb進行安裝,可以從這里下載http://www.minigui.com/downloads/dep-libs/qvfb
-1.0.tar.gz),下載下來后進行解壓:tar zxf qvfb-1.0.tar.gz并進入到qvfb-1.0目錄,執行./configure腳本后即可用make和make install命令進行編譯安裝。
更改MiniGUI的配置文件MiniGUI.cfg設置設備驅動程序,設置顯示區域及字體等內容。修改/usr/local/etc目錄下的配置文件 MiniGUI.cfg,將其中的驅動引擎gal_engine和ial_engine設置為qvfb,再將其中qvfb的defaultmode設置為合適的顯示模式。然后把qvfb加到可執行路徑中去,執行vi .bashrc命令,在 .bashrc最后面加上export PATH=/usr /local/arm/2.95.3/bin -:$PATH,保存退出后用source .bashrc命令執行一下即可。
      在X Window中,打開一個終端仿真程序,執行qvfb &命令。在qvfb中選中File Configure,將qvfb設置成嵌入式開發系統的液晶屏的大小。合理設置MiniGUI的配置文件后,接著就可以運行MiniGUI應用程序了。
      執行應用程序順利的話,屏幕上可以看到程序的運行界面。至此,MiniGUI已經成功移植到目標系統上。此后,我們可以根據需要,繼續修改MiniGUI庫函數及各種資源,并且編寫自己的應用程序,使圖形用戶界面更加完善。
6 結束語
  隨著嵌入式產品應用領域的日益增長,開發出優秀的人機交互界面,是嵌入式發展的趨勢,擁有廣闊的市場前景。MiniGUI可以穩定可靠的運行在 Linux系統下,通過上述具體的移植和后續的MiniGUI下嵌入式軟件的開發過程,能快速構建一個嵌入式可視化軟件系統,相信這種嵌入式系統將會得到越來越多的應用。
參考文獻:
[1] 北京飛漫軟件.MiniGUI用戶手冊http://www.minigui.com.
[2] Beijing Feynman Software Technology Co. Ltd.
[3] 北京恒頤高科技術有限公司. H2410EB用戶手冊http://www.hyesco.com.
[4] 祁獻鵬,郭玉東.MiniGUI-面向嵌入式系統的GUI系統[J].信息工程大學學報,2001,2(3):8-10. 
[5] 李善平,劉文峰,王煥龍等.Linux與嵌入式系統[M].北京:清華大學出版社,2003.
[6] 陳雷,鐘書毅等譯. 嵌入式Linux-硬件、軟件與接口[M].北京:電子工業出版社,2003.
[7] 方寧,馬忠梅.MiniGUI在AT91RM9200開發板上的移植[J].單片機與嵌入式系統應用,2004(8):75-77.

下一篇: PLC、DCS、FCS三大控

上一篇: 索爾維全系列Solef?PV

中文字幕第二一区_久久久久在线视频_精品国产自在现线看久久_亚洲精品一区二区三区电影网

      亚洲午夜极品| 欧美久久视频| 久久免费视频这里只有精品| 欧美在线播放一区| 欧美淫片网站| 久久精品国产久精国产一老狼| 欧美一区二区在线免费观看| 欧美综合第一页| 久久久国产91| 欧美成人免费播放| 欧美久久久久中文字幕| 欧美性大战久久久久| 国产精品私房写真福利视频 | 国产嫩草一区二区三区在线观看| 国产精品推荐精品| 国产小视频国产精品| 精品成人国产| 亚洲精品乱码视频| 亚洲四色影视在线观看| 欧美一区二区精品在线| 久久久精品五月天| 欧美激情一区二区三区蜜桃视频 | 亚洲国产精品一区制服丝袜| 亚洲精品国产欧美| 亚洲一二三区视频在线观看| 久久国产手机看片| 欧美成人午夜激情在线| 欧美三级乱码| 国产一区久久久| 亚洲欧洲另类国产综合| 亚洲天堂成人在线观看| 欧美中文字幕第一页| 欧美sm视频| 国产精品捆绑调教| 一区二区三区自拍| 一本色道久久88综合日韩精品| 亚洲一区国产一区| 久久综合久久美利坚合众国| 欧美人妖另类| 国产亚洲一区二区三区在线观看| 91久久精品国产91性色tv| 亚洲一区二区成人在线观看| 久久久久久有精品国产| 欧美日韩亚洲一区二区三区在线| 国产日韩一级二级三级| 亚洲精品中文字幕在线观看| 性色av一区二区怡红| 欧美国产日韩精品免费观看| 国产精品一二三视频| 亚洲黄色尤物视频| 欧美亚洲综合久久| 欧美男人的天堂| 韩日精品中文字幕| 亚洲午夜小视频| 免费人成网站在线观看欧美高清| 国产精品免费在线| 亚洲日本成人网| 久久精品亚洲国产奇米99| 欧美日韩视频在线一区二区 | 中文久久乱码一区二区| 久久久久久网址| 国产精品免费一区豆花| 亚洲精品日韩精品| 久久野战av| 国产视频在线观看一区二区| 一本一道久久综合狠狠老精东影业 | 国产精品入口福利| 日韩性生活视频| 久久在线免费观看| 国产欧美日韩精品在线| 99国产成+人+综合+亚洲欧美| 久久午夜羞羞影院免费观看| 国产精品亚洲欧美| 99国产精品久久久久久久成人热| 久久久综合网站| 国产精品―色哟哟| 这里只有精品电影| 欧美日韩国产一区| 最新成人av网站| 久久综合伊人77777| 国内成+人亚洲+欧美+综合在线| 亚洲香蕉在线观看| 欧美日韩专区| 日韩视频在线观看国产| 欧美韩日一区二区三区| 激情综合视频| 久久精品国产免费观看| 国产日韩欧美亚洲| 香蕉久久夜色精品国产使用方法| 国产精品mm| 亚洲午夜成aⅴ人片| 欧美日本国产| 日韩视频免费观看高清在线视频| 欧美a级大片| 亚洲国产精品尤物yw在线观看 | 国产在线日韩| 欧美在线观看一区二区| 国产欧美一区二区在线观看| 午夜精品区一区二区三| 国产精品日韩在线播放| 亚洲欧美视频在线| 国产精品尤物| 久久成人av少妇免费| 国产一区二区三区电影在线观看 | 国产精品久线观看视频| 亚洲天堂男人| 国产精品久久二区二区| 亚洲欧美一区二区精品久久久| 国产精品免费观看在线| 午夜精品久久久久久久久久久| 国产精品亚洲美女av网站| 欧美在线一二三四区| 国模精品一区二区三区| 美女国内精品自产拍在线播放| 在线免费观看视频一区| 欧美大片91| 中文网丁香综合网| 国产女人水真多18毛片18精品视频| 欧美一区二区三区视频免费| 狠狠色丁香婷婷综合影院| 久久综合网色—综合色88| 亚洲毛片网站| 国产精品亚洲激情| 久久精品中文字幕一区| 亚洲国产精品毛片| 欧美亚洲成人网| 欧美一区二区在线视频| 亚洲二区免费| 欧美丝袜一区二区三区| 午夜免费日韩视频| 在线看片欧美| 欧美午夜精品一区| 久久爱www| 亚洲久久一区二区| 国产日韩成人精品| 欧美aaa级| 亚洲淫片在线视频| 韩国欧美国产1区| 欧美久久久久中文字幕| 午夜在线a亚洲v天堂网2018| 精品成人一区二区三区| 欧美日韩精品高清| 久久国产一区二区| 99精品免费| 国内精品视频666| 欧美日韩一区三区四区| 久久久国产午夜精品| 日韩视频免费观看高清在线视频 | 亚洲特级毛片| 一区免费在线| 国产精品成人在线| 老司机免费视频一区二区三区 | 国产精品剧情在线亚洲| 免费观看成人| 欧美一区二区播放| 日韩视频专区| 极品尤物av久久免费看| 国产精品拍天天在线| 免费国产一区二区| 校园激情久久| 亚洲最新在线| 亚洲丰满少妇videoshd| 国产日产高清欧美一区二区三区| 欧美国产第二页| 久久久久9999亚洲精品| 亚洲欧美国产精品va在线观看 | 欧美伦理视频网站| 久久久夜精品| 欧美一级黄色录像| 亚洲网站在线看| 亚洲精品久久嫩草网站秘色| 激情综合网址| 国产香蕉97碰碰久久人人| 欧美视频一区| 欧美日本一区| 免费成年人欧美视频| 久久成人综合视频| 亚洲曰本av电影| 中国成人在线视频| 亚洲精品网址在线观看| 亚洲国产另类久久精品| 国内外成人免费激情在线视频网站| 国产精品日韩欧美大师| 国产精品不卡在线| 欧美午夜激情视频| 欧美日韩精品一区二区三区| 免费不卡在线观看| 久久亚裔精品欧美| 久久人人看视频| 久久久欧美精品| 久久久999精品视频| 久久精品国产精品亚洲| 性做久久久久久久免费看| 亚洲欧美国产va在线影院| 亚洲一区二区三区在线看 | 欧美三日本三级三级在线播放| 欧美人妖在线观看| 欧美日韩亚洲一区二区| 国产精品hd| 国产精品五区|