www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]嵌入式Linux環(huán)境下MiniGUI的研究與移植

 前言
 近年來隨著嵌入式設備與市場需求的廣泛結合,手機、PDA、DVD播放機等產品的應用對可視化操作界面的簡潔和方便提出了更高的要求,這都需要一個穩(wěn)定可靠的高性能GUI系統(tǒng)來提供支持。圖形用戶界面(Graphic User Interface,簡稱GUI)的廣泛流行是當今計算機技術的重要成就之一,它極大地方便了非專業(yè)用戶的使用,人們可以通過窗口、菜單方便地進行操作。由于嵌入式系統(tǒng)實時性要求高,同時嵌入式系統(tǒng)硬件配置又有限,所以對輕型GUI的需求更加突出。另外,嵌入式系統(tǒng)往往是一種訂制設備,它們對GUI的需求也各不相同,因此GUI也必須是可訂制的。綜上所述,嵌入式系統(tǒng)對GUI的基本要求應包括輕型、占用資源少、高性能、高可靠性以及可配置。MiniGUI是目前比較常用的幾種GUI系統(tǒng)之一,與其他的GUI相比,MiniGUI最顯著的特點就是輕型、占用資源少,而且在這幾年的發(fā)展里,MiniGUI已經非常成熟和穩(wěn)定了,在許多產品和項目中都已得到了實際應用。

  1 MiniGUI的特點和體系結構

  1. 1 MiniGUI的特點

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

  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的核心層,包括窗口系統(tǒng)必不可少的各個模塊;最頂層是API,即編程接口。GAL和IAL為MiniGUI提供了底層的Linux控制臺或者X Window上的圖形接口以及輸入接口,而Pthread用于提供內核級線程支持的C函數(shù)庫。利用GAL和IAL,大大提高了MiniGUI的可移植性,并且使程序的開發(fā)和調試變得更加容易。可以在X Window上開發(fā)和調試自己的MiniGUI程序,通過重新編譯就可以讓MiniGUI應用程序運行在特殊的嵌入式硬件平臺上。

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

  1.2.2微客戶/服務器結構

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

  2 開發(fā)環(huán)境

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

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

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

  3 MiniGUI的移植

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

  3.1 Linux交叉編譯環(huán)境的構建

  GUI的編譯通常都是在PC機上執(zhí)行的,也就是說,編譯器本身能夠在PC機上執(zhí)行,同時編譯源代碼生成的二進制文件必須能在目標機上執(zhí)行,這類編譯器通常稱為交叉編譯器。對于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的函數(shù)庫的ARM的版本以及對應的頭文件;arm-gcc中包含的則是生成ARM平臺代碼的x86上的交叉編譯器。執(zhí)行rpm命令將這些包安裝到PC機上,若不在系統(tǒng)默認搜索目錄下,則必須將安裝目錄加到系統(tǒng)的PATH環(huán)境變量中,這樣在每次編譯時系統(tǒng)才能找得到編譯器。

  以root用戶登陸Linux系統(tǒng),在主機上用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 中添加環(huán)境變量即可

  vi .bashrc

  最后一行加入:export PATH=$PATH:/usr/local/arm/2.95.3/bin路徑

  保存退出后執(zhí)行source .bashrc

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

  3.2 MiniGUI的配置和交叉編譯

  我們可以從網上http://www.minigui.com/download)免費得到MiniGUI-1.6.9的資源文件壓縮包,MiniGUI1.6.9的源程序包包括以下三個部分:

  libminigui-1.6.9.tar.gz-MiniGUI函數(shù)庫源代碼;

  miniguires-1.6.9.tar.gz-MiniGUI所使用的資源,包括基本字體、圖標、位圖、輸入法等;

  mde-1.6.9.tar.gz-MiniGUI的綜合演示程序。

  3.2.1 配置MiniGUI選項

  把函數(shù)庫文件包解壓:tar zxf libminigui-1.6.9.tar.gz,進入libminigui-1.6.9這個目錄,執(zhí)行make menuconfig命令

  -system wide options中選擇Build MiniGUI-Lite,并取消Use incore (built-in) resource選項;

  -Gal engine options 圖形引擎,根據(jù)目標機的顯示方式確認,這里只勾選了 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/。

  其它的用缺省選項就可以了,保存退出。[!--empirenews.page--]

  3.2.2 MiniGUI函數(shù)庫的安裝和編譯

  進入目錄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函數(shù)庫的安裝目標路徑

  --build是指執(zhí)行編譯的主機

  --host交叉編譯后的程序將運行的系統(tǒng)

  --target是運行該編譯器所產生的目標文件的平臺

  --disable-lite建立MiniGUI-Threads版本的應用程序

  --disable-micemoveable禁止窗口移動

  --disable-cursor由于系統(tǒng)采用觸摸屏,所以用此選項用來關閉鼠標光標顯示

  如果運行./configure腳本成功通過,就可繼續(xù)進行下面的編譯了,執(zhí)行make和make install命令編譯安裝libminigui。這里要注意的是,執(zhí)行make install命令時要切換到Root用戶權限下,不然安裝時沒法把文件裝到指定目錄下。安裝成功后,MiniGUI 的函數(shù)庫和頭文件以及配置文件等資源將被安裝到/usr/local/arm/2.95.3/arm-linux/目錄中,具體情況為:函數(shù)庫被裝在lib/ 子目錄中;頭文件被裝在include/ 子目錄中;手冊被裝在man/ 子目錄中;配置文件被裝在etc/ 子目錄中。

  3.2.3 MiniGUI資源的編譯安裝

  主機上解壓資源文件:tar zxf miniguires-1.6.9.tar.gz,可生成miniguires-1.6.9目錄。在安裝之前先要修改目錄中的configure.linux文件,執(zhí)行vi configure.linux打開文件,把prefix選項部分的默認值 /usr/local/ 改為 /usr/local/arm/2.95.3/arm-linux/,這樣運行make install安裝命令后MiniGUI資源將被安裝到目標系統(tǒng)中的/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的頭文件路徑,防止編譯時系統(tǒng)找不到頭文件;在所有LIB="$LIB后加入–L{prefix}/lib來指定編譯時所需要庫文件的路徑。并將libpopt-dev-arm-cross-1.6.tgz解壓所生成的頭文件和庫文件分別放入目標目錄的include和lib中,用以支持mde中程序在ARM下的交叉編譯。

  然后執(zhí)行./autogen.sh,重新生成configure腳本,使用上面配置的腳本然后執(zhí)行make命令,即可完成實例程序的編譯。

  4 拷貝MiniGUI資源到開發(fā)板

  編譯完MiniGUI和實例程序之后,需要把MiniGUI庫、資源和應用程序拷貝到為目標機器準備的文件系統(tǒng)目錄中,然后生成文件系統(tǒng)映像,再下載到目標板上運行??梢酝ㄟ^串口、USB口或以太網口將文件系統(tǒng)映像下載到目標機器中。如果發(fā)現(xiàn)子目錄lib 中的MiniGUI 庫文件很大,很難全部拷貝到開發(fā)板上的話,可以對庫文件執(zhí)行arm-linux-strip操作,arm-linux-strip指令會除去文件中的調試信息,使文件體積大大縮小。另外需要注意的是,有些庫函數(shù)是鏈接文件,如果單純的拷貝,會將原先的鏈接信息丟失,造成不必要的麻煩。使用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目錄下的可執(zhí)行程序。將這些資源燒寫進ramdisk文件系統(tǒng)中,解壓后將MiniGUI的配置文件MiniGUI.cfg放入/usr/local/etc目錄中,MiniGUI的庫文件放入/usr/local/lib目錄中。在執(zhí)行程序之前,還有一件重要的事情要做,就是在開發(fā)板上的Linux中配置好MiniGUI的運行環(huán)境。

  5板載Linux的環(huán)境配置

  MiniGUI可以使用多種圖形引擎進行圖像顯示,有qvfb、SVGALib、LibGGI等等,當然也可以自己編寫一個圖形引擎供MiniGUI使用。這里我們使用qvfb來作為MiniGUI的圖形引擎進行圖像顯示。qvfb(vitural framebuffer)是在宿主機上模擬幀緩沖的,它是X Window用來運行和測試應用程序的系統(tǒng)程序,允許我們在桌面及其上開發(fā)Qt嵌入式程序,而不需要在命令臺和程序之間來回切換。qvfb使用了共享存儲區(qū)域(虛擬的幀緩沖)來模擬幀緩沖并且在一個窗口中(qvfb)模擬一個應用來顯示幀緩沖,顯示的區(qū)域被周期性的改變和更新。通過指定顯示設備的寬度和顏色深度,虛擬出來的緩沖幀和物理的顯示設備在每個像素上保持一致。這樣我們在每次調試應用時不需要總是刷新嵌入式設備的FLASH存儲空間,從而加速了應用的編譯、連接和運行周期。

  首先對qvfb進行安裝,可以從這里下載http://www.minigui.com/downloads/dep-libs/qvfb

  -1.0.tar.gz),下載下來后進行解壓:tar zxf qvfb-1.0.tar.gz并進入到qvfb-1.0目錄,執(zhí)行./configure腳本后即可用make和make install命令進行編譯安裝。

  更改MiniGUI的配置文件MiniGUI.cfg設置設備驅動程序,設置顯示區(qū)域及字體等內容。修改/usr/local/etc目錄下的配置文件MiniGUI.cfg,將其中的驅動引擎gal_engine和ial_engine設置為qvfb,再將其中qvfb的defaultmode設置為合適的顯示模式。然后把qvfb加到可執(zhí)行路徑中去,執(zhí)行vi .bashrc命令,在 .bashrc最后面加上export PATH=/usr/local/arm/2.95.3/bin -:$PATH,保存退出后用source .bashrc命令執(zhí)行一下即可。

  在X Window中,打開一個終端仿真程序,執(zhí)行qvfb &命令。在qvfb中選中File Configure,將qvfb設置成嵌入式開發(fā)系統(tǒng)的液晶屏的大小。合理設置MiniGUI的配置文件后,接著就可以運行MiniGUI應用程序了。

  執(zhí)行應用程序順利的話,屏幕上可以看到程序的運行界面。至此,MiniGUI已經成功移植到目標系統(tǒng)上。此后,我們可以根據(jù)需要,繼續(xù)修改MiniGUI庫函數(shù)及各種資源,并且編寫自己的應用程序,使圖形用戶界面更加完善。

  6 結束語

  隨著嵌入式產品應用領域的日益增長,開發(fā)出優(yōu)秀的人機交互界面,是嵌入式發(fā)展的趨勢,擁有廣闊的市場前景。MiniGUI可以穩(wěn)定可靠的運行在Linux系統(tǒng)下,通過上述具體的移植和后續(xù)的MiniGUI下嵌入式軟件的開發(fā)過程,能快速構建一個嵌入式可視化軟件系統(tǒng),相信這種嵌入式系統(tǒng)將會得到越來越多的應用。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

亙喜生物科技集團宣布正在中國開展的、旨在全面評估GC007g治療復發(fā)/難治性急性B淋巴細胞白血病效果的1/2期注冊性臨床試驗順利進入2期研究階段,首例入組患者已給藥。GC007g是亙喜生物旗下的一款靶向CD19的供者來源...

關鍵字: 移植 CD

北京2022年9月9日 /美通社/ -- 諾誠健華(香港聯(lián)交所代碼:09969)今天宣布,tafasitamab (Minjuvi®)聯(lián)合來那度胺治療不適合自體干細胞移植 (ASCT) 條件的復發(fā)/難治彌漫性大B...

關鍵字: VI NJU BSP 移植

蘇州2022年8月19日 /美通社/ -- 近日,華中科技大學同濟醫(yī)學院附屬協(xié)和醫(yī)院心外科董念國教授團隊運用與心擎醫(yī)療聯(lián)合研發(fā)的短中期體外全磁懸浮心室輔助裝置MoyoAssist®,成功救治三例危重的終...

關鍵字: 磁懸浮 移植 IC 靜脈

上海2022年8月17日 /美通社/ -- 2022年8月16日,聚焦于基因和細胞治療的上海邦耀生物科技有限公司(以下簡稱"邦耀生物")宣布,其...

關鍵字: CD 移植 BSP ISP

蘇州2022年6月28日 /美通社/ -- 2022年6月23日,首都醫(yī)科大學附屬北京安貞醫(yī)院(以下簡稱安貞醫(yī)院)與蘇州心擎醫(yī)療技術有限公司(以下簡稱心擎)在北京、蘇州兩地線上連線,隆重召開體外心室輔助系統(tǒng)臨床...

關鍵字: BSP 磁懸浮 創(chuàng)始人 移植

最近幾天在完成一個項目的EVT收尾工作,EVT這個名詞可能有些朋友不是很熟悉,EVT(EngineeringVerificationTest)表示進行工程驗證測試階段。一般的新產品開發(fā)都分為三個階段:EVT、DVT和PV...

關鍵字: 代碼 移植

??以前做過兩年C程序移植工作,從Win32平臺移植到Linux平臺。大約有上百萬行C/C代碼,歷時一年多。在開發(fā)Win32版本時,已經強調了程序的可植性,無奈Win32團隊里對Linux精通的人比較少,很多問題沒有想到...

關鍵字: 移植 編寫

摘 要:隨著嵌入式技術的廣泛應用,ARM9平臺上的嵌入式Linux操作系統(tǒng)成為一個焦點。在諸多嵌入式操作系統(tǒng)中,Linux憑借其低成本開發(fā),可應用于多種硬件平臺,可定制內核,性能優(yōu)異,良好的網絡支持等優(yōu)勢成為嵌入式系統(tǒng)...

關鍵字: ARM9 嵌入式Linux 操作系統(tǒng) 移植

↓推薦關注↓以前做過兩年C程序移植工作,從Win32平臺移植到Linux平臺。大約有上百萬行C/C代碼,歷時一年多。在開發(fā)Win32版本時,已經強調了程序的可植性,無奈Win32團隊里對Linux精通的人比較少,很多問題...

關鍵字: 移植 編寫

作為通信協(xié)議的兩大基礎,IIC和SPI兩者的應用都非常廣泛,上一篇文章講過了RTT上IIC的移植與實踐?!兑徊降轿?!教你RT-Thread上設備IIC驅動移植》講完IIC,自然少不了SPI的相關內容,基于此,本文就來詳細...

關鍵字: 移植 RT-Thread

嵌入式軟件

15715 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉