Microwindows在基于S3C44B0X的嵌入式系統(tǒng)中的移植
出處:tyw 發(fā)布于:2007-04-29 09:27:43
Microwindows在基于S3C44B0X的嵌入式系統(tǒng)中的移植
揚(yáng)州大學(xué)信息工程學(xué)院 李凱
揚(yáng)州大學(xué)物理科學(xué)與技術(shù)學(xué)院 竇振中 宋鵬
引言
Microwindows是由Gregory Haerr組織的一個(gè)開放源碼項(xiàng)目,是嵌入式系統(tǒng)中廣泛應(yīng)用的一種圖形用戶接口(GUI),該項(xiàng)目的目標(biāo)是在嵌入式Linux平臺(tái)上提供與普通個(gè)人電腦類似的圖形用戶界面。作為X_Windows的替代品,Microwindows提供了和X_Windows類似的功能,但是卻占用很少的內(nèi)存,根據(jù)用戶的配置,Microwindows占用的內(nèi)存資源只有100KB-600KB左右。
Microwindows的是基于顯示設(shè)備接口的,可移植性較強(qiáng),其本身提供了多種嵌入式系統(tǒng)常見的顯示設(shè)備驅(qū)動(dòng)程序。目前新版本的Microwindows已經(jīng)內(nèi)建了FrameBuffer,因此可以不局限于Linux的開發(fā)平臺(tái),在eCos、FreeBSD、MINIX等操作系統(tǒng)上都可以運(yùn)行。在基于Linux的開發(fā)平臺(tái)上,可以使用FrameBuffer機(jī)制直接讀寫顯存,也可以調(diào)用SVGALib庫。在基于Linux的FrameBuffer機(jī)制中,Microwindows支持每像素1位、2位、4位、8位、16位、32位的色彩/灰度,并通過調(diào)色板技術(shù)將RGB格式的顏色空間轉(zhuǎn)換為目標(biāo)機(jī)上的顏色進(jìn)行顯示。Microwindows系統(tǒng)可以圖形方式支持在主機(jī)平臺(tái)上的仿真目標(biāo)平臺(tái)開發(fā),因此Microwindows應(yīng)用程序就可以直接在臺(tái)式機(jī)上進(jìn)行編寫和開發(fā),通過交叉編譯就可在目標(biāo)平臺(tái)上運(yùn)行。
本文討論了在基于S3C44B0X的嵌入式開發(fā)平臺(tái)上,移植了μCLinux操作系統(tǒng),并通過修改內(nèi)核、編寫FrameBuffer幀緩沖設(shè)備驅(qū)動(dòng)程序,使μCLinux內(nèi)核能夠支持幀緩沖設(shè)備、在此基礎(chǔ)上移植Microwindows的方法與過程。
Microwindows的體系結(jié)構(gòu)
針對(duì)嵌入式系統(tǒng)的特性,Microwindows采用了層次化結(jié)構(gòu),每一層完成特定的功能,如圖1所示。
設(shè)備驅(qū)動(dòng)層
設(shè)備驅(qū)動(dòng)程序的接口函數(shù)定義在device.h中,其中包括了屏幕驅(qū)動(dòng)程序、鼠標(biāo)驅(qū)動(dòng)程序和鍵盤驅(qū)動(dòng)程序。圖形引擎層提供的與設(shè)備無關(guān)的圖形引擎例程通過調(diào)用設(shè)備驅(qū)動(dòng)程序跟硬件設(shè)備交互,這就保證了當(dāng)平臺(tái)硬件設(shè)備發(fā)生變化的時(shí)候,只需要改寫相應(yīng)的驅(qū)動(dòng)程序即可,無需修改上層代碼。Microwindows提供基于Linux2.2.X內(nèi)核的幀緩沖設(shè)備驅(qū)動(dòng)程序,通過/dev/fb0設(shè)備文件,利用mmap()系統(tǒng)調(diào)用將顯示緩存映射到系統(tǒng)內(nèi)存中。
圖形引擎層
Microwindows系統(tǒng)中的函數(shù)是在圖形引擎層通過調(diào)用下層硬件設(shè)備驅(qū)動(dòng)程序來實(shí)現(xiàn)的。這些函數(shù)對(duì)屏幕、鼠標(biāo)、鍵盤等驅(qū)動(dòng)程序進(jìn)行了封裝,為API提供了服務(wù),用戶調(diào)用上層提供的編程接口,而不需要直接調(diào)用引擎層的例程。在Microwindows的源代碼中,的例程包括:
devdraw.c:主要的圖形繪制操作,描畫和填充、圓、多邊形、文本與位圖的顯示,顏色轉(zhuǎn)換相關(guān)的代碼
devclip.c:剪裁操作
devmouse.c:處理鼠標(biāo)操作的信息
devkbd.c:處理鍵盤操作的信息
devpalX.c:與調(diào)色板相關(guān)的代碼
devimage.c:實(shí)現(xiàn)對(duì)GIF、BMP、JPEG、PPM等格式圖形的顯示操作
fongt_xxxx.c:對(duì)不同字體的顯示操作
API
Microwindows提供了兩種類型的API,以便更好地適應(yīng)在不同平臺(tái)上應(yīng)用程序的移植。一種是與Win32/WinCE基本兼容的API,支持大多數(shù)的圖形操作,它的API是基于消息機(jī)制的。另一種是采用X體系的Nano-X API,它是Client/Server模式的,在客戶端的API函數(shù)以nx……()命名,在服務(wù)端的API函數(shù)以Gr……()命名。
具體實(shí)現(xiàn)
下面具體論述Microwindows在PC機(jī)和S3C44B0X開發(fā)板上的實(shí)現(xiàn)。首先,需要相應(yīng)的安裝包,本文的是0.90版本的Microwindows和相應(yīng)的字庫文件。同時(shí),由于Microwindows需要使用FreeType庫函數(shù)產(chǎn)生TrueType字體,因此還需要安裝FreeType,這里使用的的是1.3.1版本的Freetype。
在PC機(jī)上的實(shí)現(xiàn)
解壓縮相關(guān)的安裝包,安裝FreeType之后,就可以開始運(yùn)行Microwindows。在解壓縮目錄中輸入命令:./xconfigure,就會(huì)出現(xiàn)相應(yīng)的配置菜單,由于是在PC機(jī)上運(yùn)行,應(yīng)根據(jù)具體的參數(shù)配置Microwindows,具體的參數(shù)配置如下:
(1)點(diǎn)擊Compiling Option,進(jìn)入編譯選項(xiàng)。在隨后彈出的子窗口中選中Optimize,點(diǎn)擊OK返回即可。
(2)點(diǎn)擊Platform,進(jìn)入開發(fā)平臺(tái)選項(xiàng)。由于是在PC機(jī)上運(yùn)行,選擇“Linux(Native)”選項(xiàng)。在其后的“Option”選項(xiàng)中,按如下配置:“Screen Driver”選項(xiàng)中,由于是在PC機(jī)上運(yùn)行,選擇“X11”;在“Mouse Driver”鼠標(biāo)選項(xiàng)中,選擇“GPM mouse”;在“Keyboard Driver”鍵盤選項(xiàng)中,選擇“TTY”。
(3)點(diǎn)擊“Libraries to Compile”,進(jìn)入鏈接庫配置選項(xiàng)。其中有NanoX庫和Microwindows庫,在“NanoX”的“Option”選項(xiàng)中,選擇“Link app into Server”和“compile demos”選項(xiàng)。
基于其他的參數(shù)配置,包括字庫、文件格式支持等應(yīng)根據(jù)具體的情況進(jìn)行配置。至此、Microwindows在PC機(jī)上運(yùn)行的配置工作已經(jīng)完成,存盤退出,屏幕顯示配置成功。輸入命令:make,完成編譯工作。當(dāng)編譯完成后,在SRC的bin目錄下有很多演示程序,一些是基于Nano—X API的,一些是基于win32 API的,運(yùn)行即可。
以上簡(jiǎn)單論述了Microwindows在PC機(jī)上運(yùn)行的方法與過程,PC機(jī)上的運(yùn)行過程相對(duì)簡(jiǎn)單,只需要按照實(shí)際情況進(jìn)行配置,編譯即可。
在嵌入式開發(fā)板上的實(shí)現(xiàn)
下面討論Microwindows在以S3C44B0X為主控芯片的嵌入式開發(fā)板中運(yùn)行的捕捉與方法。首先需要建立交叉編譯開發(fā)環(huán)境,這里建立的編譯器是arm-elf-gcc,匯編器是arm-elf-as,鏈接器為arm-elf-ld和庫管理器arm-elf-ar。接著,移植相應(yīng)的μClinux,關(guān)于此類的文章已經(jīng)較多,在此就不贅述了。,在μCLinux內(nèi)核中將S3C44B0X的幀緩沖設(shè)備驅(qū)動(dòng)打開,并需要建立/dev/fb0設(shè)備節(jié)點(diǎn),關(guān)于S3C44B0X的幀緩沖設(shè)備驅(qū)動(dòng)程序的開發(fā)已另文發(fā)表。至此,已經(jīng)做好Microwindows移植的基礎(chǔ)工作,下面具體討論實(shí)現(xiàn)的步驟與方法。
在Microwindows的配置過程中,可以利用./xconfigure命令進(jìn)入菜單配置界面,當(dāng)然也可以通過直接修改配置文件“src/config”對(duì)Microwindows進(jìn)行配置。這里采用的是后者,其中幾個(gè)比較關(guān)鍵的選項(xiàng)包括體系結(jié)構(gòu)、交叉編譯器、每像素位數(shù)、幀緩沖等,具體的配置參數(shù)如下:
(1)關(guān)于體系結(jié)構(gòu)和編譯器選項(xiàng)
ARCH=LINUX-ARM
BIGENDIAN=N
ARMTOOLSPREFIX=arm-elf-
(2)每像素位數(shù)
SCREEN_PIXTYPE=MWPE_TRUECOLOR332
對(duì)于S3C44B0X,在彩色模式下,1個(gè)字節(jié)8位(3位紅色、3位綠色、2位藍(lán)色)的圖像數(shù)據(jù)對(duì)應(yīng)一個(gè)像素點(diǎn),即像素點(diǎn)字節(jié)在存儲(chǔ)器中保存的格式為332位。因此在設(shè)定Microwindows的每像素位數(shù)時(shí)將其格式設(shè)置為332,根據(jù)頭文件的定義設(shè)定為MWPE_TRUE COLOR332。
(3)幀緩沖設(shè)備
由于是在嵌入式開發(fā)平臺(tái)上運(yùn)行,有別于在PC機(jī)上,此時(shí)Microwindows應(yīng)該是基于幀緩沖驅(qū)動(dòng),即需要調(diào)用/dev/fb0設(shè)備,因此參數(shù)的配置應(yīng)該為:
……
X11=N
……
FRAMEBUFFER=Y(jié)
……
還有其他某些相關(guān)的配置參數(shù),應(yīng)根據(jù)實(shí)際情況進(jìn)行配置。至此,完成了對(duì)Microwindows的配置工作,下面需要根據(jù)μCLinux的特性,對(duì)Microwindows的源代碼進(jìn)行相應(yīng)修改。具體需要修改的地方包括三個(gè)方面:
在打開幀緩沖設(shè)備時(shí),需要調(diào)用void*mmap(void*start,size_tlength,int prot,int flags,int fd,off_toffsize)函數(shù),將屏幕緩沖區(qū)映射到用戶地址空間。在基于PC機(jī)開發(fā)時(shí),由于在Linux系統(tǒng)下,參數(shù)flags默認(rèn)為MAP_SHARED,即對(duì)映射區(qū)域的寫入數(shù)據(jù)會(huì)復(fù)制回文件內(nèi),而且允許其他映射該文件的進(jìn)程共享。由于μCLinux是沒有MMU(內(nèi)存管理單元)的,因此參數(shù)flags應(yīng)為MAP_FIXED,即如果參數(shù)start所指的地址無法成功建立映射時(shí),則放棄映射,不對(duì)地址做修正。因此,應(yīng)該修改文件/SRC/drivers/scr_fb.c,將mmap()函數(shù)中的flags參數(shù)改為MAP_FIXED。
如果此時(shí)直接編譯經(jīng)過配置和修改源代碼的Microwindows,會(huì)提示出現(xiàn)“undefined reference to‘_CTOR_LIST’”和“undefined reference to‘__DTOR_LIST’”的錯(cuò)誤。這是由于原來在libgcc中是有_ _CTOR_LIST和_DTOR_LIST參數(shù)定義的,但在μCLinux的交叉編譯鏈中,該符號(hào)被刪掉。在elf2flt的link script中提供了這兩個(gè)符號(hào)的定義,使用μCLinux的交叉編譯鏈編譯可執(zhí)行程序就必須用-elf2flt選項(xiàng)。因此應(yīng)在編譯的選項(xiàng)里加上“-elf2flt”,修改的文件包括demos文件夾下各個(gè)相關(guān)文件夾的Makefile文件。
由于μCLinux缺少M(fèi)MU硬件的支持,無法實(shí)現(xiàn)fork()函數(shù),而只能使用vfork()函數(shù),因此在含有fork()函數(shù)的文件中應(yīng)加入相應(yīng)的條件編譯指令,用vfork()來代替fork()。
以上3個(gè)修改是比較重要,至此已完成了整個(gè)Microwindows在S3C44B0X嵌入式開發(fā)板中的移植,編譯即可。,將編譯好的演示程序復(fù)制到μCLinux內(nèi)核中,再編譯內(nèi)核,將編譯好的內(nèi)核映像文件至RAM中,即可運(yùn)行演示。
結(jié)語
本文主要論述了Microwindows的體系結(jié)構(gòu),并且介紹了在PC機(jī)上和基于S3C44B0X的嵌入式開發(fā)板上運(yùn)行的步驟和方法,指出了在開發(fā)過程應(yīng)該注意的問題。下面就可以利用相應(yīng)的開發(fā)工具開發(fā)Microwindows的應(yīng)用程序,從而實(shí)現(xiàn)相應(yīng)的功能。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識(shí)2025/7/14 16:59:04
- 高速PCB信號(hào)完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對(duì)系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測(cè)試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測(cè)量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開關(guān)中的EMI問題
- 電源IC在便攜式設(shè)備中的設(shè)計(jì)要點(diǎn)
- 連接器結(jié)構(gòu)設(shè)計(jì)常見問題分析









