新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM平臺(tái)的Microwindows圖形編程

ARM平臺(tái)的Microwindows圖形編程

作者: 時(shí)間:2012-06-26 來源:網(wǎng)絡(luò) 收藏

引言
由于受系統(tǒng)內(nèi)存大小的限制,在運(yùn)行Linux的平臺(tái)上直接運(yùn)行桌面的X Windows系統(tǒng)不太現(xiàn)實(shí)。是一個(gè)開放源碼的嵌入式GUI軟件,目的是把圖形視窗環(huán)境引入到運(yùn)行Linux的小型設(shè)備和平臺(tái)上。作為X Windows系統(tǒng)的替代品,可以用更少的RAM和文件存儲(chǔ)空間(100K~600KB)提供相似的功能,允許設(shè)計(jì)者輕松加入各種顯示設(shè)備、鼠標(biāo)、觸摸屏和鍵盤等。同時(shí),的可移植性非常好,現(xiàn)已成功移植到MIPS、等多種平臺(tái)上。

Microwindows在平臺(tái)的移植
盡管Linux 的arch目錄下有對(duì)ARM處理器支持的代碼,但由于Linux是在X86平臺(tái)上實(shí)現(xiàn)的,很多方面都沒有考慮到ARM平臺(tái)的特殊性。將Microwindows移植到運(yùn)行ARM-Linux操作系統(tǒng)的ARM硬件平臺(tái)上,需要如下幾個(gè)步驟。
1)替換fork( )系統(tǒng)調(diào)用。由于ARM-Linux不同于標(biāo)準(zhǔn)Linux,所以以標(biāo)準(zhǔn)Linux內(nèi)核為支持目標(biāo)開發(fā)的Microwindows源代碼也必須作出相應(yīng)的修改才能適應(yīng)ARM-Linux系統(tǒng)。最主要的問題是ARM-Linux不提供fork()系統(tǒng)調(diào)用,而以vfork()調(diào)用取代。所以在ARM-Linux代碼中fork()的使用需要進(jìn)行修改??衫煤甓x簡(jiǎn)便地將所有的fork()調(diào)用用vfork()來替代。修改Microwindows的編譯設(shè)置文件,并采用ARM交叉編譯器arm-elf-gcc。
2) 確定傳遞給顯示屏驅(qū)動(dòng)程序的參數(shù)。具體地說,就是需要在打開FrameBuffer設(shè)備 /dev/fb0時(shí)將顯示屏的基本參數(shù)傳遞給設(shè)備驅(qū)動(dòng)程序。在scr_fb.c中的fb_open(PSD psd)函數(shù)中修改如下:
psd->xres=psd->xvirtres=320;
psd->yres=psd->yvirtres=240;
psd->linelen=40;
psd->size=320×320;
3) 編譯Microwindows。在Red Hat 9.0下建立ARM交叉編譯環(huán)境,修改Makefile文件,將$(CC)編譯參數(shù)指定為交叉編譯環(huán)境安裝目錄下的arm-elf-gcc,重新編譯代碼,就可以生成能夠在ARM平臺(tái)下運(yùn)行的程序。ARM系列處理器的指令系統(tǒng)相互兼容,經(jīng)arm-elf-gcc編譯過的代碼可在基于ARM核的各種處理器上運(yùn)行。

Microwindows中文化
為了使Microwindows實(shí)現(xiàn)對(duì)簡(jiǎn)體漢字的支持,需要對(duì)引擎層的devfont.c做相應(yīng)修改。在devfont.c文件中定義了Microwindows關(guān)于字體操作的核心數(shù)據(jù)結(jié)構(gòu)和操作函數(shù)。由于Microwindows采用面向?qū)ο蟮脑O(shè)計(jì)方法,因而只要重新定義一系列對(duì)簡(jiǎn)體中文的數(shù)據(jù)結(jié)構(gòu)和操作函數(shù),并向系統(tǒng)注冊(cè),就可以完成系統(tǒng)的中文化。需要重新定義的數(shù)據(jù)結(jié)構(gòu)和函數(shù)是:
static MWFONTPROCS hzk_procs={
MWTF_ASCII, /*routines expect ASCII */
Hzk_getfontinfo,
Hzk_gettextsize,
NULL,
Hzk_destroyfont,
Hzk_drawtext,
Null,
Null,
};

Microwindows圖形編程機(jī)制
Microwindows從原理上采用分層設(shè)計(jì)的方法,每層次完成特定的功能,并且能夠在不影響其它層次的基礎(chǔ)上針對(duì)不同的應(yīng)用進(jìn)行改編或者重寫。在最底層,顯示屏、鼠標(biāo)、觸摸屏等的驅(qū)動(dòng)程序提供了與交互相關(guān)的硬件設(shè)備的訪問;中間層是一個(gè)精簡(jiǎn)的圖形引擎,提供了劃線、區(qū)域填充、多邊形等多種基本的圖形功能;最上層為圖形應(yīng)用程序提供了豐富的編程接口函數(shù)(API),通過這些接口函數(shù)可以定制桌面和窗口的外觀。目前Microwindows提供兩套API接口,以便能夠更好地適應(yīng)不同平臺(tái)應(yīng)用程序的移植,即 與Win32/Win CE基本兼容的API以及采用X體系的Nano-X API。
設(shè)備驅(qū)動(dòng)層
設(shè)備驅(qū)動(dòng)程序的接口定義在device.h文件中。中間層提供的與設(shè)備無關(guān)的圖形引擎例程就是通過調(diào)用設(shè)備驅(qū)動(dòng)程序跟硬件設(shè)備交互。這就保證了當(dāng)平臺(tái)硬件設(shè)備發(fā)生變化的時(shí)候,只需要改寫相應(yīng)的驅(qū)動(dòng)程序,而無需修改上層代碼。Microwindows提供基于Linux2.4.X內(nèi)核的FrameBuffer設(shè)備驅(qū)動(dòng)程序。FrameBuffer在Linux系統(tǒng)中通過/dev/fb0設(shè)備文件進(jìn)行工作,通過mmap()系統(tǒng)調(diào)用將顯示緩存映射至系統(tǒng)內(nèi)存中。


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉