?
1 引言
本文講解基于 Linux 和 MiniGUI 的嵌入式系統軟件開發,其內容不僅僅限于 MiniGUI 的編程,還會涉及到一些 Linux 下嵌入式系統軟件開發的技巧,包括交叉編譯環境的建立,根文件系統的生成等。
2 圖形用戶界面MiniGUI簡介
MiniGUI 是由北京飛漫軟件技術有限公司擁有版權并主持和維護的自由軟件,遵循 GPL 條款發布(1.2.6及之前的版本以LGPL條款發布),其目標是為實時嵌入式 Linux/uClinux、eCos、uC/OS-II、VxWorks 等操作系統建立一個快速、穩定和輕量級的圖形用戶界面支持系統。與QT/Embeddoed、MicoroWindows等其他GUI相比,MiniGUI最大的特點是占用資源少,在主頻為66M的ARM7內核也能夠穩定的運行。經過幾年的發展已經發布了很多的版本,現在比較穩定的是1.6.x版本,而且源碼是開放的,方便我們大家學習的研究。本文就是采用的此版本。
3 MiniGUI在S3C2410開發板上的移植過程
3.1 MiniGUI運行的環境的搭建
在 Linux/uClinux 上運行,要求 Linux FrameBuffer 驅動程序的功能正常。在 PC 上,如果顯示芯片是 VESA 兼容的,則可以通過 Linux 的 VESA FrameBuffer 驅動程序獲得較好的支持。對沒有 FrameBuffer 支持的 Linux/uClinux 系統,需要編寫特定的圖形引擎才能運行 MiniGUI。MiniGUI 1.6.x 中已包含了針對非 FrameBuffer 驅動的圖形引擎實現,另外在沒有 FrameBuffer支持的系統上運行也可以借助虛擬軟件實現相同的功能,在這里只是在有FrameBuffer支持的linux操作系統上的 MiniGUI的移植。用到的交叉編譯工具鏈是cross-2.95.3.tar.bz2交叉編譯器是arm-linux-gcc2.95.3,這些工具軟件通常在網上下載或是由硬件供應商會提供。在這里需要注意的是開發板上的linux的glibc的版本一定要和cross-2.95.3.tar.bz 中的glibc一致,我們使用的是glibc-2.2.3。
3.2 交叉編譯MiniGUI
首先,從網上下載三個源碼包(http://www.minigui.org/),同時可以下載到相應的用戶手冊。
libminigui-1.6.x.tar.gz:MiniGUI 函數庫源代碼,其中包括libminigui、libmgext 和 libvcongui。
minigui-res-1.6.tar.gz: MiniGUI 所使用的資源, 包括基本字體、圖標、位圖和鼠標光標。
mg-smaples-1.6.x.tar.gz:《MiniGUI 編程指南》的配套示例程序。
先安裝MiniGUI的函數庫,我們先在PC的根目錄下建立一個名為minigui的目錄,將下載的三個源碼包全部復制到minigui目錄下,再在minigui目錄下建立一個名為miniguitmp的目錄,用來存放生成的文件和minigui庫函數。
解壓libminigui-1.6.x.tar.gz(tar zxf libminigui-1.6.x.tar.gz )
生成libminigui-1.6.x.目錄,編寫腳本文件配置lib內容如下:
./configure—host=arm-unknown-linux—enable=jpgsupport=no
--enable-pngsupport=no—enable-gifsupport=no –disable-lite
--prefix=/minigui/miniguitmp –enable-smdk2410ial=yes
保存為setup.sh
host用于指明宿主機的類型disable-lite用來指定生成基于線程的minigui版本而不是生成基于進程的minigui版本prefix用于指定MiniGUI函數庫的安裝路徑/minigui/miniguitmp
進入該目錄運行./configure腳本文件,我們為了適合我們的開發板做了適當的修改,其他的開發板類似。
根據PC機的交叉編譯環境安裝的路徑修改libminigui-1.6.x.目錄下的configure文件,在文件的開頭處加入編譯器的安裝路徑,然后保存,筆者主機上交叉編譯器安裝路徑是/usr/local/arm/,所以修改如下:
CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
CPP=/usr/local/arm/2.95.3/bin/cpp
LD=/usr/local/arm/2.95.3/bin/arm-linux-ld
AR=/usr/local/arm/2.95.3/bin/arm-linux-ar
RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
STRIP=/usr/local/arm/2.95.3/bin/arm-linux-strip
然后運行腳本文件
./ setup.sh
make
make install
如果運行成功,就會生成定制的MakeFile文件,執行make和make install 后相應的函數庫就安裝到/minigui/miniguitmp/lib下,在執行make install命令是用戶一定要具有root權限。
下面安裝MiniGUI資源,這些資源包括基本字體、圖標、位圖和鼠標光標等等。解壓minigui-res- 1.6.tar.gz(ar zxf minigui-res-1.6.tar.gz),進入生成目錄,修改configure.linux文件,指明TOPDIR= /minigui162/miniguitmp
執行
make install
就可以把相關文件拷貝到/minigui/miniguitmp/目錄下的相關目錄中去。
執行后會在/minigui/miniguitmp/ 下生成usr/local/lib/minigui/res 相關目錄,以下為res目錄下的子目錄,用戶有興趣可以進入以下目錄查看其中的內容。
bmp
cursor
font
icon
imetab
3.3 制作帶有MiniGUI的文件系統映象(root_minigui.cramfs)
CRAMFS是Linus Torvalds撰寫的只具備基本特性的文件系統。CRAMFS是一個簡單的,經壓縮以及只讀的文件系統,通常要為文件系統建立映象,首先要建立并安裝CRAMFS工具,在這里我們使用mkcramfs工具建立自己的文件系統映象。
開發板上的linux,自帶有VESA FrameBuffer設備驅動程序,并且初始狀態已經激活,這樣MiniGUI就可以使用FrameBuffer作為圖象引擎來顯示圖象。
將/minigui/miniguitmp/lib中所有的庫文件復制到root_minigui的/usr/lib 中,
將 /minigui/miniguitmp/usr/local/lib/minigui目錄復制到root_minigui的/usr/lib目錄中, 在 /root_dir/root_minigui/usr/local 下執行ln –s /usr/lib lib,生成一個鏈接文件。
修改/minigui/miniguitmp/etc/MiniGUI.cfg文件,
找到
ial_engine=console
mdev=/dev/mouse
改為
ial_engine=SMDK2410
mdev=/dev/ts
然后保存退出。
把/minigui162/miniguitmp/etc/MiniGUI.cfg文件復制到/root_dir/root_minigui/usr/local/目錄中。
以上把MiniGUI運行庫和其它資源環境已經拷貝到root_minigui文件系統中,同時把mg-samples-str-1.6.2/src/下可執行文復制到/usr/local/bin下。然后編譯文件系統,在/root_dir執行
[root@localhost root_dir]# mkcramfs root_minigui ro`ot_minigui.cramfs
就可以生成 root_minigui.cramfs 文件系統映象
把root_minigui.cramfs 復制到 PC 機的/tftproot 下,通過tftp命令把文件系統下載到2410開發板上。
重啟開發板后執行:
#cp /usr/local/bin/* /tmp //將可執行文件復制到/tmp 臨時目錄下
#cd /tmp //用cd 命令去到/tmp 目錄下
經過以上工作,用戶就可以在/tmp目錄下執行自己的應用程序了。
例如:
執行
#chmod 777 helloworld //改變權限,使其為可執行
#./helloworld //執行 helloworld
這樣我們就成功的將帶有minigui界面的文件系統成功的移植到了我們的開發板上了
評論
查看更多