新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Microwindows在基于單片機嵌入式系統中的移植

        Microwindows在基于單片機嵌入式系統中的移植

        作者: 時間:2011-01-24 來源:網絡 收藏

        在microwindows的配置過程中,可以利用./xconfigure命令進入菜單配置界面,當然也可以通過直接修改配置文件“src/config”對microwindows進行配置。這里采用的是后者,其中幾個比較關鍵的選項包括體系結構、交叉編譯器、每像素位數、幀緩沖等,具體的配置參數如下:

        (1) 關于體系結構和編譯器選項

        [ 相關貼圖 ]

        (2) 每像素位數screen_pixtype= mwpf_truecolor332 對于s3c44b0x,在彩色模式下,1個字節8位(3位紅色、3位綠色、2位藍色)的圖像數據對應一個像素點,即像素點字節在存儲器中保存的格式為332位。因此在設定microwindows的每像素位數時將其格式設置為332,根據頭文件的定義設定為mwpf_true color332。

        (3) 幀緩沖設備由于是在嵌入式開發平臺上運行,有別于在pc機上,此時microwindows應該是基于幀緩沖驅動,即需要調用/dev/fb0設備,因此參數的配置應該為:

        還有其他某些相關的配置參數,應根據實際情況進行配置。至此,完成了對microwindows的配置工作,下面需要根據?clinux的特性,對microwindows的源代碼進行相應修改。具體需要修改的地方包括三個方面:

        在打開幀緩沖設備時,需要調用void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize)函數,將屏幕緩沖區映射到用戶地址空間。在基于pc機開發時,由于在linux系統下,參數flags默認為map_shared,即對映射區域的寫入數據會復制回文件內,而且允許其他映射該文件的進程共享。由于?clinux是沒有mmu(內存管理單元)的,因此參數flags應為map_fixed ,即如果參數start所指的地址無法成功建立映射時,則放棄映射,不對地址做修正。因此,應該修改文件/src/drivers/scr_fb.c,將mmap()函數中的flags參數改為map_fixed。

        如果此時直接編譯經過配置和修改源代碼的microwindows,會提示出現“undefined reference to ‘_ _ctor_list’”和“undefined reference to ‘_ _dtor_list’”的錯誤。這是由于原來在libgcc中是有_ _ctor_list和_ _dtor_list參數定義的,但在?clinux的交叉編譯鏈中,該符號被刪掉。在elf2flt的link script中提供了這兩個符號的定義,使用clinux的交叉編譯鏈編譯可執行程序就必須用-elf2flt選項。因此應在編譯的選項里加上“-elf2flt”,修改的文件包括demos文件夾下各個相關文件夾的makefile文件。

        由于clinux缺少mmu硬件的支持,無法實現fork( )函數,而只能使用vfork( )函數,因此在含有fork( )函數的文件中應加入相應的條件編譯指令,用vfork( )來代替fork( )。

        以上3個修改是比較重要,至此已完成了整個microwindows在s3c44b0x嵌入式開發板中的移植,編譯即可。最后,將編譯好的演示程序復制到clinux內核中,再編譯內核,將編譯好的內核映像文件下載至ram中,即可運行演示。

        結語

        本文主要論述了microwindows的體系結構,并且介紹了在pc機上和基于s3c44b0x的嵌入式開發板上運行的步驟和方法,指出了在開發過程應該注意的問題。下面就可以利用相應的開發工具開發microwindows的應用程序,從而實現相應的功能。


        上一頁 1 2 3 下一頁

        關鍵詞: 單片機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 万荣县| 玉林市| 安阳县| 友谊县| 徐汇区| 阿克| 海安县| 枝江市| 曲阳县| 安阳市| 广西| 林西县| 长岛县| 齐齐哈尔市| 呼伦贝尔市| 开江县| 重庆市| 景泰县| 华坪县| 当阳市| 日照市| 吴江市| 安达市| 稷山县| 彭州市| 临安市| 广南县| 江山市| 深州市| 弥渡县| 平阳县| 墨竹工卡县| 治县。| 射阳县| 临洮县| 四平市| 梁平县| 山阳县| 吉木萨尔县| 杭州市| 文登市|