嵌入式Linux環(huán)境下MiniGUI的研究與移植
1.2.2微客戶/服務(wù)器結(jié)構(gòu)
在多線程環(huán)境中,與多進(jìn)程間的通訊機(jī)制類似,線程之間也有交互和同步的需求。比如, 用來(lái)管理窗口的線程維持全局的窗口列表, 而其他線程不能直接修改這些全局的數(shù)據(jù)結(jié)構(gòu), 而必須依據(jù)“先來(lái)先服務(wù)”的原則,依次處理每個(gè)線程的請(qǐng)求,這就是一般性的客戶/服務(wù)器模式。MiniGUI利用線程之間的同步操作實(shí)現(xiàn)了客戶線程和服務(wù)器線程之間的微客戶/服務(wù)器機(jī)制。
2 開(kāi)發(fā)環(huán)境
H2410EB開(kāi)發(fā)板由北京恒頤高科技術(shù)有限公司設(shè)計(jì)開(kāi)發(fā),它基于Samsung公司的S3C2410A20嵌入式ARM處理器。S3C2410A20內(nèi)嵌 ARM920T 核,帶有全性能的MMU,具有高性能、低功耗、低成本、小體積等優(yōu)點(diǎn),適用于手持設(shè)備、汽車等領(lǐng)域。
H2410EB除帶有大容量的SDRAM和Flash以外,還擴(kuò)展了RS-232C串行接口、10Mbps以太網(wǎng)接口、觸摸屏接口、音頻輸入/輸出接口、USB Host、USB Slave、UART接口、IIC接口、用戶自定義鍵盤、LCD顯示器,方便用戶使用和進(jìn)行參考設(shè)計(jì)。它支持嵌入式Linux操作系統(tǒng)的運(yùn)行,支持MP3/MPEG播放、GUI、Web 服務(wù)及其它服務(wù),同時(shí)可根據(jù)用戶需求開(kāi)發(fā)特定軟件與設(shè)備驅(qū)動(dòng)程序。
操作系統(tǒng)采用裁減后的Linux,Linux Kernel版本為v2.4.18,系統(tǒng)使用的交叉編譯器是arm-Linux-gcc。另外,還有驅(qū)動(dòng)程序源碼和測(cè)試程序源碼等代碼模塊。
本文中使用的主機(jī)系統(tǒng)為Red Hat Linux 9.0,移植目標(biāo)系統(tǒng)為L(zhǎng)inux2.4.18,MiniGUI的版本是1.6.9。在主機(jī)上交叉編譯MiniGUI鏈接庫(kù),然后將針對(duì)目標(biāo)機(jī)編譯的庫(kù)文件,與根文件系統(tǒng)一起燒寫到目標(biāo)板的RAM空間,以后將運(yùn)行在目標(biāo)板上的圖形用戶界面直接鏈接到該庫(kù),脫離主機(jī)獨(dú)立運(yùn)行。
3.1 Linux交叉編譯環(huán)境的構(gòu)建
GUI的編譯通常都是在PC機(jī)上執(zhí)行的,也就是說(shuō),編譯器本身能夠在PC機(jī)上執(zhí)行,同時(shí)編譯源代碼生成的二進(jìn)制文件必須能在目標(biāo)機(jī)上執(zhí)行,這類編譯器通常稱為交叉編譯器。對(duì)于ARM平臺(tái),我們安裝了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這三個(gè)包。這些包都可以從網(wǎng)上免費(fèi)獲取。arm-binutils這個(gè)包一般包含了一些針對(duì)ARM平臺(tái)的二進(jìn)制工具,比如arm-strip、arm-ar等命令;arm-glibc這個(gè)包包含的是標(biāo)準(zhǔn)C的函數(shù)庫(kù)的ARM的版本以及對(duì)應(yīng)的頭文件;arm-gcc中包含的則是生成ARM平臺(tái)代碼的x86上的交叉編譯器。執(zhí)行rpm命令將這些包安裝到PC機(jī)上,若不在系統(tǒng)默認(rèn)搜索目錄下,則必須將安裝目錄加到系統(tǒng)的PATH環(huán)境變量中,這樣在每次編譯時(shí)系統(tǒng)才能找得到編譯器。
以root用戶登陸Linux系統(tǒng),在主機(jī)上用rpm指令安裝交叉編譯工具,arm-linux-gcc將被安裝到/usr/local/arm/2.95.3/下面。此時(shí),gcc為 /usr/local/arm/2.95.3/bin/arm-linux-gcc,而它的include為 /usr/local/arm/2.95.3/arm-linux/include,對(duì)應(yīng)的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ù)庫(kù)版本要與目標(biāo)版上運(yùn)行時(shí)所用的函數(shù)庫(kù)版本一致。經(jīng)過(guò)上述步驟,就已經(jīng)建立了交叉編譯環(huán)境,接下來(lái)的就是進(jìn)行MiniGUI的選項(xiàng)配置和交叉編譯。
3.2 MiniGUI的配置和交叉編譯
我們可以從網(wǎng)上http://www.minigui.com/download)免費(fèi)得到MiniGUI-1.6.9的資源文件壓縮包,MiniGUI1.6.9的源程序包包括以下三個(gè)部分:
libminigui-1.6.9.tar.gz-MiniGUI函數(shù)庫(kù)源代碼;
miniguires-1.6.9.tar.gz-MiniGUI所使用的資源,包括基本字體、圖標(biāo)、位圖、輸入法等;
mde-1.6.9.tar.gz-MiniGUI的綜合演示程序。
3.2.1 配置MiniGUI選項(xiàng)
把函數(shù)庫(kù)文件包解壓:tar zxf libminigui-1.6.9.tar.gz,進(jìn)入libminigui-1.6.9這個(gè)目錄,執(zhí)行make menuconfig命令
-system wide options中選擇Build MiniGUI-Lite,并取消Use incore (built-in) resource選項(xiàng);
-Gal engine options 圖形引擎,根據(jù)目標(biāo)機(jī)的顯示方式確認(rèn),這里只勾選了 NEWGal engine on Linux FrameBuffer console,其它的不選;
-Ial engine options輸入引擎,可用觸摸屏只選了SMDK2410 Touch Screen;
-Font Options 中取消選擇Var bitmap font,可能是因?yàn)锽ug的原因,當(dāng)選擇了該選項(xiàng)后,編譯測(cè)試?yán)拥臅r(shí)候總是提示unreferenced vfb_Courier …之類的錯(cuò)誤;
-Image options選擇了Includes SaveBitmap-related functions。GIF、JPG、PNG圖形格式也勾選上;
-Development environment options 里使用Linux平臺(tái),arm-linux-gcc編譯器,安裝路徑設(shè)置在 /usr/local/arm/2.95.3/arm-linux/。
其它的用缺省選項(xiàng)就可以了,保存退出。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論