<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM平臺的Microwindows圖形編程

ARM平臺的Microwindows圖形編程

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

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

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

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

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


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

關(guān)鍵詞: 嵌入式系統 Microwindows ARM

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>