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