嵌入式Linux環境下MiniGUI的研究與移植
1.2.2微客戶/服務器結構
在多線程環境中,與多進程間的通訊機制類似,線程之間也有交互和同步的需求。比如, 用來管理窗口的線程維持全局的窗口列表, 而其他線程不能直接修改這些全局的數據結構, 而必須依據“先來先服務”的原則,依次處理每個線程的請求,這就是一般性的客戶/服務器模式。MiniGUI利用線程之間的同步操作實現了客戶線程和服務器線程之間的微客戶/服務器機制。
2 開發環境
H2410EB開發板由北京恒頤高科技術有限公司設計開發,它基于Samsung公司的S3C2410A20嵌入式ARM處理器。S3C2410A20內嵌 ARM920T 核,帶有全性能的MMU,具有高性能、低功耗、低成本、小體積等優點,適用于手持設備、汽車等領域。
H2410EB除帶有大容量的SDRAM和Flash以外,還擴展了RS-232C串行接口、10Mbps以太網接口、觸摸屏接口、音頻輸入/輸出接口、USB Host、USB Slave、UART接口、IIC接口、用戶自定義鍵盤、LCD顯示器,方便用戶使用和進行參考設計。它支持嵌入式Linux操作系統的運行,支持MP3/MPEG播放、GUI、Web 服務及其它服務,同時可根據用戶需求開發特定軟件與設備驅動程序。
操作系統采用裁減后的Linux,Linux Kernel版本為v2.4.18,系統使用的交叉編譯器是arm-Linux-gcc。另外,還有驅動程序源碼和測試程序源碼等代碼模塊。
本文中使用的主機系統為Red Hat Linux 9.0,移植目標系統為Linux2.4.18,MiniGUI的版本是1.6.9。在主機上交叉編譯MiniGUI鏈接庫,然后將針對目標機編譯的庫文件,與根文件系統一起燒寫到目標板的RAM空間,以后將運行在目標板上的圖形用戶界面直接鏈接到該庫,脫離主機獨立運行。
3.1 Linux交叉編譯環境的構建
GUI的編譯通常都是在PC機上執行的,也就是說,編譯器本身能夠在PC機上執行,同時編譯源代碼生成的二進制文件必須能在目標機上執行,這類編譯器通常稱為交叉編譯器。對于ARM平臺,我們安裝了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這三個包。這些包都可以從網上免費獲取。arm-binutils這個包一般包含了一些針對ARM平臺的二進制工具,比如arm-strip、arm-ar等命令;arm-glibc這個包包含的是標準C的函數庫的ARM的版本以及對應的頭文件;arm-gcc中包含的則是生成ARM平臺代碼的x86上的交叉編譯器。執行rpm命令將這些包安裝到PC機上,若不在系統默認搜索目錄下,則必須將安裝目錄加到系統的PATH環境變量中,這樣在每次編譯時系統才能找得到編譯器。
以root用戶登陸Linux系統,在主機上用rpm指令安裝交叉編譯工具,arm-linux-gcc將被安裝到/usr/local/arm/2.95.3/下面。此時,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 中添加環境變量即可
vi .bashrc
最后一行加入:export PATH=$PATH:/usr/local/arm/2.95.3/bin路徑
保存退出后執行source .bashrc
另外需要注意的是,編譯時所用的函數庫版本要與目標版上運行時所用的函數庫版本一致。經過上述步驟,就已經建立了交叉編譯環境,接下來的就是進行MiniGUI的選項配置和交叉編譯。
3.2 MiniGUI的配置和交叉編譯
我們可以從網上http://www.minigui.com/download)免費得到MiniGUI-1.6.9的資源文件壓縮包,MiniGUI1.6.9的源程序包包括以下三個部分:
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,進入libminigui-1.6.9這個目錄,執行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的原因,當選擇了該選項后,編譯測試例子的時候總是提示unreferenced vfb_Courier …之類的錯誤;
-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操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論