新聞中心

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

        ARM平臺的Microwindows圖形編程

        作者: 時間:2012-06-26 來源:網絡 收藏

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

        Microwindows在平臺的移植
        盡管Linux 的arch目錄下有對ARM處理器支持的代碼,但由于Linux是在X86平臺上實現的,很多方面都沒有考慮到ARM平臺的特殊性。將Microwindows移植到運行ARM-Linux操作系統的ARM硬件平臺上,需要如下幾個步驟。
        1)替換fork( )系統調用。由于ARM-Linux不同于標準Linux,所以以標準Linux內核為支持目標開發的Microwindows源代碼也必須作出相應的修改才能適應ARM-Linux系統。最主要的問題是ARM-Linux不提供fork()系統調用,而以vfork()調用取代。所以在ARM-Linux代碼中fork()的使用需要進行修改。可利用宏定義簡便地將所有的fork()調用用vfork()來替代。修改Microwindows的編譯設置文件,并采用ARM交叉編譯器arm-elf-gcc。
        2) 確定傳遞給顯示屏驅動程序的參數。具體地說,就是需要在打開FrameBuffer設備 /dev/fb0時將顯示屏的基本參數傳遞給設備驅動程序。在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交叉編譯環境,修改Makefile文件,將$(CC)編譯參數指定為交叉編譯環境安裝目錄下的arm-elf-gcc,重新編譯代碼,就可以生成能夠在ARM平臺下運行的程序。ARM系列處理器的指令系統相互兼容,經arm-elf-gcc編譯過的代碼可在基于ARM核的各種處理器上運行。

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

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平邑县| 疏勒县| 抚顺市| 德昌县| 巩义市| 屏东市| 东明县| 安康市| 五莲县| 周至县| 陵水| 绥化市| 乐平市| 固始县| 天峨县| 县级市| 凌海市| 肃北| 琼结县| 富宁县| 师宗县| 延长县| 梅州市| 建湖县| 如东县| 康乐县| 康定县| 宁德市| 拜泉县| 渝北区| 霍林郭勒市| 唐山市| 五华县| 平罗县| 射阳县| 濮阳市| 津市市| 南宁市| 阳朔县| 丰顺县| 什邡市|