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