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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Microwindows在基于S3C44B0X的嵌入式系統(tǒng)中的移植

          Microwindows在基于S3C44B0X的嵌入式系統(tǒng)中的移植

          ——
          作者:揚州大學(xué)信息工程學(xué)院 李凱 揚州大學(xué)物理科學(xué)與技術(shù)學(xué)院 竇振中 宋鵬 時間:2007-01-26 來源:《電子設(shè)計應(yīng)用》 收藏


          引言

          本文引用地址:http://www.ex-cimer.com/article/20871.htm

          microwindows是由gregory haerr組織的一個開放源碼項目,是嵌入式系統(tǒng)中廣泛應(yīng)用的一種圖形用戶接口(gui),該項目的目標(biāo)是在嵌入式linux平臺上提供與普通個人電腦類似的圖形用戶界面。作為x_windows的替代品,microwindows提供了和x_windows類似的功能,但是卻占用很少的內(nèi)存,根據(jù)用戶的配置,microwindows占用的內(nèi)存資源只有100kb-600kb左右。

          microwindows的核心是基于顯示設(shè)備接口的,可移植性較強,其本身提供了多種嵌入式系統(tǒng)常見的顯示設(shè)備驅(qū)動程序。目前新版本的microwindows已經(jīng)內(nèi)建了framebuffer,因此可以不局限于linux的開發(fā)平臺,在ecos、freebsd、minix等操作系統(tǒng)上都可以運行。在基于linux的開發(fā)平臺上,可以使用framebuffer機制直接讀寫顯存,也可以調(diào)用svgalib庫。在基于linux的framebuffer機制中,microwindows支持每像素1位、2位、4位、8位、16位、32位的色彩/灰度,并通過調(diào)色板技術(shù)將rgb格式的顏色空間轉(zhuǎn)換為目標(biāo)機上的顏色進行顯示。microwindows系統(tǒng)可以圖形方式支持在主機平臺上的仿真目標(biāo)平臺開發(fā),因此microwindows應(yīng)用程序就可以直接在臺式機上進行編寫和開發(fā),通過交叉編譯就可在目標(biāo)平臺上運行。

          本文討論了在基于s3c44b0x的嵌入式開發(fā)平臺上,移植了μclinux操作系統(tǒng),并通過修改內(nèi)核、編寫framebuffer幀緩沖設(shè)備驅(qū)動程序,使μclinux內(nèi)核能夠支持幀緩沖設(shè)備、在此基礎(chǔ)上移植microwindows的方法與過程。

          microwindows的體系結(jié)構(gòu)

          針對嵌入式系統(tǒng)的特性,microwindows采用了層次化結(jié)構(gòu),每一層完成特定的功能,如圖1所示。

          設(shè)備驅(qū)動層

          設(shè)備驅(qū)動程序的接口函數(shù)定義在device.h中,其中包括了屏幕驅(qū)動程序、鼠標(biāo)驅(qū)動程序和鍵盤驅(qū)動程序。圖形引擎層提供的與設(shè)備無關(guān)的圖形引擎例程通過調(diào)用設(shè)備驅(qū)動程序跟硬件設(shè)備交互,這就保證了當(dāng)平臺硬件設(shè)備發(fā)生變化的時候,只需要改寫相應(yīng)的驅(qū)動程序即可,無需修改上層代碼。microwindows提供基于linux2.2.x內(nèi)核的幀緩沖設(shè)備驅(qū)動程序,通過/dev/fb0設(shè)備文件,利用mmap()系統(tǒng)調(diào)用將顯示緩存映射到系統(tǒng)內(nèi)存中。

          圖形引擎層

          microwindows系統(tǒng)中的核心函數(shù)是在圖形引擎層通過調(diào)用下層硬件設(shè)備驅(qū)動程序來實現(xiàn)的。這些函數(shù)對屏幕、鼠標(biāo)、鍵盤等驅(qū)動程序進行了封裝,為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:實現(xiàn)對gif、bmp、jpeg、ppm等格式圖形的顯示操作

          fongt_xxxx.c:對不同字體的顯示操作

          api

          microwindows提供了兩種類型的api,以便更好地適應(yīng)在不同平臺上應(yīng)用程序的移植。一種是與win32/wince基本兼容的api,支持大多數(shù)的圖形操作,它的api是基于消息機制的。另一種是采用x體系的nano-x api,它是client/server模式的,在客戶端的api函數(shù)以nx……()命名,在服務(wù)端的api函數(shù)以gr……()命名。

          具體實現(xiàn)

          下面具體論述microwindows在pc機和s3c44b0x開發(fā)板上的實現(xiàn)。首先,需要下載相應(yīng)的安裝包,本文下載的是0.90版本的microwindows和相應(yīng)的字庫文件。同時,由于microwindows需要使用freetype庫函數(shù)產(chǎn)生truetype字體,因此還需要下載安裝freetype,這里使用的的是1.3.1版本的freetype。

          在pc機上的實現(xiàn)

          解壓縮相關(guān)的安裝包,安裝freetype之后,就可以開始運行microwindows。在解壓縮目錄中輸入命令:./xconfigure,就會出現(xiàn)相應(yīng)的配置菜單,由于是在pc機上運行,應(yīng)根據(jù)具體的參數(shù)配置microwindows,具體的參數(shù)配置如下:

          (1)點擊compiling option,進入編譯選項。在隨后彈出的子窗口中選中optimize,點擊ok返回即可。

          (2)點擊platform,進入開發(fā)平臺選項。由于是在pc機上運行,選擇“l(fā)inux(native)”選項。在其后的“option”選項中,按如下配置:“screen driver”選項中,由于是在pc機上運行,選擇“x11”;在“mouse driver”鼠標(biāo)選項中,選擇“gpm mouse”;在“keyboard driver”鍵盤選項中,選擇“tty”。

          (3)點擊“l(fā)ibraries to compile”,進入鏈接庫配置選項。其中有nanox庫和microwindows庫,在“nanox”的“option”選項中,選擇“l(fā)ink app into server”和“compile demos”選項。

          基于其他的參數(shù)配置,包括字庫、文件格式支持等應(yīng)根據(jù)具體的情況進行配置。至此、microwindows在pc機上運行的配置工作已經(jīng)完成,存盤退出,屏幕顯示配置成功。輸入命令:make,完成編譯工作。當(dāng)編譯完成后,在src的bin目錄下有很多演示程序,一些是基于nano—x api的,一些是基于win32 api的,運行即可。

          以上簡單論述了microwindows在pc機上運行的方法與過程,pc機上的運行過程相對簡單,只需要按照實際情況進行配置,編譯即可。

          在嵌入式開發(fā)板上的實現(xiàn)

          下面討論microwindows在以s3c44b0x為主控芯片的嵌入式開發(fā)板中運行的捕捉與方法。首先需要建立交叉編譯開發(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ū)動打開,并需要建立/dev/fb0設(shè)備節(jié)點,關(guān)于s3c44b0x的幀緩沖設(shè)備驅(qū)動程序的開發(fā)已另文發(fā)表。至此,已經(jīng)做好microwindows移植的基礎(chǔ)工作,下面具體討論實現(xiàn)的步驟與方法。

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

          (1)關(guān)于體系結(jié)構(gòu)和編譯器選項

          arch=linux-arm

          bigendian=n

          armtoolsprefix=arm-elf-

          (2)每像素位數(shù)

          screen_pixtype=mwpe_truecolor332

          對于s3c44b0x,在彩色模式下,1個字節(jié)8位(3位紅色、3位綠色、2位藍(lán)色)的圖像數(shù)據(jù)對應(yīng)一個像素點,即像素點字節(jié)在存儲器中保存的格式為332位。因此在設(shè)定microwindows的每像素位數(shù)時將其格式設(shè)置為332,根據(jù)頭文件的定義設(shè)定為mwpe_true color332。

          (3)幀緩沖設(shè)備

          由于是在嵌入式開發(fā)平臺上運行,有別于在pc機上,此時microwindows應(yīng)該是基于幀緩沖驅(qū)動,即需要調(diào)用/dev/fb0設(shè)備,因此參數(shù)的配置應(yīng)該為:

          ……

          x11=n

          ……

          framebuffer=y(tǒng)

          ……

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

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

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

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

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

          結(jié)語

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



          關(guān)鍵詞:

          評論


          相關(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); })();