<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          ARM平臺的Microwindows圖形編程

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

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

          Microwindows在平臺的移植
          盡管Linux 的arch目錄下有對ARM處理器支持的代碼,但由于Linux是在X86平臺上實現(xiàn)的,很多方面都沒有考慮到ARM平臺的特殊性。將Microwindows移植到運行ARM-Linux操作系統(tǒng)的ARM硬件平臺上,需要如下幾個步驟。
          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簡便地將所有的fork()調(diào)用用vfork()來替代。修改Microwindows的編譯設(shè)置文件,并采用ARM交叉編譯器arm-elf-gcc。
          2) 確定傳遞給顯示屏驅(qū)動程序的參數(shù)。具體地說,就是需要在打開FrameBuffer設(shè)備 /dev/fb0時將顯示屏的基本參數(shù)傳遞給設(shè)備驅(qū)動程序。在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平臺下運行的程序。ARM系列處理器的指令系統(tǒng)相互兼容,經(jīng)arm-elf-gcc編譯過的代碼可在基于ARM核的各種處理器上運行。

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


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();