?? minigui在at91rm9200上的移植.txt
字號:
信息 短訊 郵箱 主頁 好友 搜索 引用 回復 No.1
--------------------------------------------------------------------------------
MiniGUI在AT91RM9200開發板上的移植
MiniGUI在AT91RM9200開發板上的移植<DIV style="PADDING-RIGHT: 0px; MARGIN-TOP: 10px; FONT-SIZE: 9pt; OVERFLOW-X: hidden; WIDTH: 97%; WORD-BREAK: break-all; TEXT-INDENT: 0px; LINE-HEIGHT: normal; HEIGHT: 200px; WORD-WRAP: break-word" onload="this.style.overflowX='auto';">北京理工大學 方寧 馬忠梅 論文的“MiniGUI在AT91RM9200開發板上的移植”部分
1、圖形用戶界面MiniGUI 簡介
下面簡要介紹一下MiniGUI。MiniGUI 是遵循GPL 條款發布的自由軟件,其目標是為基于L i n u x 的實時嵌入式系統提供一個輕量級的圖形用戶界面支持系統。與QT/Embedded、MicoroWindows 等其它GUI 相比,MiniGUI的最顯著特點就是輕型、占用資源少。據稱MiniGUI 能夠在C P U 主頻為30MHz,僅有4MB RAM 的系統上正常運行, 這是其它多種G U I 所無法達到的。歷經四年的發展,M i n i G U I 已經非常成熟和穩定, 并且在許多實際產品和項目中得到了應用。目前,它的最新穩定版是1.3.1。
注:因論文發表于2004年,MiniGUI目前已有飛速發展,詳情請見:http://www.minigui.com
2、MiniGUI在AT91RM9200開發板上的移植過程
(1)構建Linux 交*編譯環境
首先,需要在宿主機上建立M i n i G U I 的交*編譯環境。通常使用的交*編譯工具鏈是cross-2.95.3.tar.bz2。然而, 在這里需要注意的是,A T 9 1 R M 9 2 0 0 開發板上的Linux使用的Glibc庫是2.1.3版本,而cross-2.95.3.tar.bz2里面包含的庫是2.2.3 版本。所以,如果你希望交*編譯出的程序可以在開發板上順利執行的話, 在編譯時必須使用與板載Linux 的庫相同的版本。我在這里使用armlinux-binutils-2.10-1.i386.rpm、arm-linux-gcc-2.95.2-2.i386.rpm、arm-linux-glibc-2.1.3-2.i386.rpm來構建交*編譯環境,這些資源可以免費得到(ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain)。在宿主機上執行rpm 指令,安裝這3個rpm包,這時你會發現在/usr/local/目錄下多了一個armlinux目錄,里面包含有arm-linux-gcc等指令程序及2.1.3版本的Glibc庫等資源。然后,在PATH中添加/usr/local/armlinux/bin 路徑,這樣交*編譯環境就構建完成了。
(2)交*編譯MiniGUI
下面將要開始關鍵的一步,就是進行M i n i G U I 的交*編譯。首先,從網上http://www.minigui.com/download/cindex.shtml)得到MiniGUI 的源程序包,包括三個部分:libminigui-1.3.0.tar.gz——MiniGUI函數庫源代碼;miniguires-1.3.0.tar.gz——MiniGUI所使用的資源,包括基本字體、圖標、位圖等;mde-1.3.0. tar.gz——MiniGUI的綜合演示程序。(在這里使用的是MiniGUI 的1.3.0 版本)首先進行M i n i G U I 函數庫的編譯和安裝。解開libminigui-1.3.0.tar.gz軟件包,進入該目錄,運行./configure腳本:“CC=arm-linux-gcc ./configure --target=arm-linux--prefix=/usr/local/arm-linux/arm-linux--build= arm-linux --host=i686-pc-linux-gnu --disable-lite”。這里需要指明的是,CC 用來指定所使用的編譯器,這里使用的arm-linuxgc c 就是在第一部分中安裝R P M 包時, 被安裝到宿主機上的交*編譯器;--target 選項用于指定目標平臺,這里使用arm-linux;--prefix選項用于指定MiniGUI函數庫的安裝路徑,默認的安裝路徑是/usr/local,而在這里應該是所使用的交*編譯環境中系統頭文件目錄i n c l u d e庫目錄lib 所在的目錄,本例中就是/usr/local/armlinux/arm-linux(這樣一來,MiniGUI的函數庫和頭文件也將被分別安裝到交*編譯環境中的lib 和include 目錄中。在后續進行MiniGUI 應用程序的交*編譯時,就可以正確地找到MiniGUI 的頭文件和函數庫了);--build 選項與--arget一樣為arm-linux;--host選項用來指明宿主機的類型,這里使用i686-pc-linux-gnu 即可;最后一個選項--disable-lite 用來指定生成基于線程的MiniGUIThreads版本而不生成基于進程的MiniGUI-Lite 版本。目前,MiniGUI 函數庫有兩種版本:Threads 版本和Lite 版本,1.3.0 版默認生成Threads 版本。為了簡便起見,本例中編譯生成Threads 版本,兩種版本之間的具體差異請參看MiniGUI 用戶手冊。如果運行./configure 腳本成功,就會生成定制的Makefile 文件,然后可以繼續執行make 和make install命令編譯并安裝libminigui。在執行make install操作時,用戶必須具用root 權限。安裝成功后,MiniGUI 的函數庫和頭文件以及配置文件等資源將被安裝到/usr/local/armlinux/arm-linux 目錄中,具體情況為:函數庫被裝在lib/子目錄中;頭文件被裝在include/ 子目錄中;手冊被裝在man/ 子目錄中;配置文件被裝在etc/ 子目錄中。下面進行MiniGUI資源的編譯安裝。解壓minigui-res-1.3.0.tar.gz,進入相應目錄。這里需要說明的是,在執行make install操作之前,需要對目錄中的configure.linux文件做一些修改。打開configure.linux文件,你會發現prefix選項部分的默認值為$(TOPDIR)/usr/local,需要將這里修改為prefix=$(TOPDIR)/ usr/local/arm-linux/arm-linux,這樣執行make install 操作之后,安裝腳本會自動把MiniGUI資源文件安裝到/usr/local/arm-linux/arm-linux/lib/minigui/res/目錄下。最后,編譯并安裝MiniGUI 的演示程序mde。解壓mde-1.3.0.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),以防止編譯時系統無法找到頭文件,從而把have_libminigui 賦值為no。編譯時,屏幕上會出現“MiniGUI is not properly installed on hesystem. You need MiniGUI-Lite Ver 1.2.6 or later for buildingthis package. Please configure and install MiniGUI-Lite Ver 1.2.6 first.”的警告。然后執行autogen.sh 腳本,重新生成configure腳本,執行“CC=arm-linux-gcc ./configure --target=arm-linux--prefix=/usr/local/arm-linux/arm-linux--build=arm-linux --host=i686-pc-linux-gnu --disable-lite”各選項的意義與前面部分相同。執行成功后,在該目錄下會生成一個新的M a k e f i l e 文件。修改M a k e f i l e 文件中的COMMON_SUBDIRS 部分,將其中的notebook、tools、controlpanel 例子暫時刪除,否則編譯這幾個程序時會提示找不到popt.h 和libpopt.so。而這些popt 頭文件和庫文件需要自己從網上下載到相應的目錄當中。執行m a k e 操作, 完成演示程序的編譯。這時可以發現,在每一個d e m o 目錄下都會生成一個可執行程序。可不要急著在宿主機上運行這些可執行程序,因為這些交*編譯出的程序是將在你的開發板上執行的。下面可以將MiniGUI 的庫函數、配置文件等資源連同demo 程序一起拷貝到AT91RM9200 開發板上試驗一下了。
(3)拷貝MiniGUI 資源到開發板
進入/usr/local/arm-linux/arm-linux目錄,在etc,lib子目錄下有我們需要拷貝到目標機上的資源。但是你會發現,子目錄lib 中的MiniGUI 庫文件很大,很難全部拷貝到AT91RM9200 開發板上。解決的辦法是,首先對這些庫文件執行arm-linux-strip操作,arm-linux-strip指令會除去文件中的調試信息, 使文件體積大大縮小。另外需要注意的是, 有些庫函數是鏈接文件, 如果單純的拷貝,會將原先的鏈接信息丟失,造成不必要的麻煩。使用tar命令將所需拷貝的資源打包, 其中包括e t c 子目錄下的配置文件MiniGUI.cfg;lib 子目錄下的libmgext*、libminigui*、libvcongui*和minigui子目錄;mde-1.3.0/housekeeper/ 下的可執行程序housekeeper(這里用housekeeper作為演示程序)。可以將這些資源做進ramdisk 文件系統中,也可以在AT91RM9200 開發板運行時,通過ftp 從宿主機進行下載。解壓后將MiniGUI 的配置文件MiniGUI.cfg放入/usr/local/etc目錄中,MiniGUI的庫文件放入/usr/local/lib目錄中,housekeeper程序可以隨便放置。在執行程序之前, 還有一件重要的事情要做, 就是在開發板上的Linux 中配置好MiniGUI 的運行環境。
(4)板載Linux 的環境配置
AT91RM9200 開發板上的L i n u x 中,自帶有VESAFrameBuffer 設備驅動程序,并且初始狀態已經激活。這樣,MiniGUI 就可以使用FrameBuffer 作為圖形引擎進行圖像顯示。否則, 需要首先安裝一種圖形引擎, 例如QVFB、SVGALib、LibGGI 等,或自己編寫一個圖形引擎供MiniGUI 使用。FrameBuffer 是Linux 內核中的一種驅動程序接口,這種接口將顯示設備抽象為幀緩沖區, 用戶可以將它看成是顯示內存的一個映像。將其映射到進程地址空間之后, 就可以直接進行讀寫操作, 而寫操作可以立即反映在屏幕上。首先,建立FrameBuffer 驅動程序的設備文件:進入/dev 目錄,執行操作mknod fb0 c 29 0。這樣就建立了設備文件fb0,供MiniGUI 使用。同樣在/dev 目錄下執行指令mknod tty0 c 5 0和mknod mouse c 10 1,建立終端設備文件和鼠標驅動程序的設備文件。修改/usr/local/etc 目錄下運行時的配置文件MiniGUI.cfg,將其中fbcon 的defaultmode 設置為合適的顯示模式。此例中將它設為了640*480-16bpp。如果開發板沒有連接鼠標、觸摸屏等輸入設備,可以先將MiniGUI.cfg 中的輸入引擎ial_engine 設置為dummy。Dummy IAL 引擎是個什么工作都不做的引擎,使用這個引擎,可以首先將 MiniGUI 在目標板上運行起來,然后再進一步參照其它引擎編寫適合自己的引擎。最后,將鍵盤和鼠標連接至A T 9 1 R M 9 2 0 0 開發板的串口上,執行housekeeper 程序。順利的話,屏幕上將出現搬運工的游戲界面,并且可以使用鼠標和鍵盤來進行游戲控制。到此,M i n i G U I 已經成功移植到了AT91RM9200 開發板上。此后,可以繼續增添MiniGUI 庫函數及各種資源,并且編寫自己的應用程序, 使開發板上的界面更加美觀和完善。
結 語
本文中所介紹的M i n i G U I 移植過程已通過實踐檢驗。對于其它型號的開發板而言, 移植過程大體相似。可以肯定, 帶有簡潔、美觀圖形用戶界面的嵌入式系統將會在更多的領域具有更好的實用價值。本人還建立了一個MiniGUI討論群:11783171 希望MiniGUI愛好者,Linux愛好者以及嵌入式開發愛好者們積極參與討論。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -