Microwindows在基于單片機嵌入式系統中的移植
在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的應用程序,從而實現相應的功能。
評論