基于ARM Linux的Gameboy模擬器移植和優(yōu)化研究-基礎電子_第1頁
基于ARM Linux的Gameboy模擬器移植和優(yōu)化研究-基礎電子_第2頁
基于ARM Linux的Gameboy模擬器移植和優(yōu)化研究-基礎電子_第3頁
基于ARM Linux的Gameboy模擬器移植和優(yōu)化研究-基礎電子_第4頁
基于ARM Linux的Gameboy模擬器移植和優(yōu)化研究-基礎電子_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精品文檔-下載后可編輯基于ARMLinux的Gameboy模擬器移植和優(yōu)化研究-基礎電子摘要:MX1體系結構采用ARM920T內核,針對它構建嵌入式Linux平臺,把Gameboy模擬器(以下統一稱為Gnuboy)移植過去;對Gnuboy的源代碼進行修改,在宿主平臺上交叉編譯,編譯好的可執(zhí)行文件燒入測試板上運行,這是移植的過程;Gnuboy在嵌入式環(huán)境下面臨速度慢的問題,可以對原先的一些C函數用ARM匯編改寫來加快速度,這里用到基于圖著色技術的寄存器分配算法的一種簡化方法,用這種方法對Gnuboy源代碼中的幾個函數進行了優(yōu)化處理,優(yōu)化效果可用相應的工具軟件進行測試;這些移植和優(yōu)化研究工作,目的是為了把Gnuboy應用到基于ARMLinux的嵌入式產品中,同時對研究該平臺下一般的虛擬機技術應用也有相應的價值。

關鍵詞:嵌入式系統;模擬器;移植;優(yōu)化

引言

面向ARM微處理器構架的嵌入式操作系統的使用量這些年持續(xù)增長,在各種嵌入式操作系統中,Linux是獲得支持多的第三大力量。

目前,ARMLinux支持包括ARM610、ARM710、ARM720Tcores、ARM920Tcores、StrongARM110、StrongARM1100、XScale等系列的ARM處理器。GameBoy是目前比較流行的8位掌上游戲機,通常被簡稱為GB,它的終態(tài)GameBoyColor(GBC)是完全向后兼容的。Gnuboy是GB/GBC的軟件模擬器,是一種自由軟件,它是基于Qt系統的,能夠運行幾乎所有的黑白和彩色的GB/GBC游戲ROM,但運行復雜一些的游戲需要在速度上得到加強,同時它的聲音還沒有得到測試。

Gnuboy已經實現了i386匯編代碼的一些優(yōu)化工作,能夠在奔騰機器上運行良好,除此之外,到目前為止,它能夠運行的平臺還很有限。隨著嵌入式系統設計技術的發(fā)展,PDA、Smartphone等嵌入式產品的功能不斷地得到擴展,適應用戶的需要,Gnuboy在嵌入式產品中的移植應用非常具有前景。目前Gnuboy在ARMLinux下還沒有得到很好的應用,本文就是在構建的基于ARM920TLinux的嵌入式平臺上對gnuboy運用進行的嘗試性工作,同時,Gnuboy作為一種虛擬機技術,本文的工作對研究虛擬機技術在ARMLinux中的應用也具有一定的價值。

硬件環(huán)境

本實驗測試板采用Motorola公司的MX1Lite,系統的主要模塊有處理器內核模塊、用戶接口模塊、連接設備模塊等,如圖1所示,下面分別進行介紹。

1)處理器內核模塊采用v4T體系結構的ARM920T內核擁有16K的指令緩存和16K的數據緩存;外部接口模塊提供了多6個片選信號來訪問外部設備,其中連接的12Kx16bits的NORFlash經過配置用于系統啟動;SDRAM控制器提供了對使用32Mx32bits的SDRAM的訪問控制。

2)用戶接口模塊由于MX1Lite沒有模擬信號處理模塊,無法直接接收觸摸屏的輸入,所以本系統采用了TI的TSC2301芯片來支持觸摸屏的輸入功能,它與主芯片通過連續(xù)外設接口協議連接,它不僅可以接收觸摸屏的輸入,而且它還支持聲音數模轉換和輸入輸出等功能;LCD控制器用于給外部液晶顯示屏提供顯示數據,LCD采用了Sharp的20x240HR-TFTLCD,它支持觸摸屏輸入,分辨率為320x240。

3)連接設備模塊包含有多媒體卡/數字安全主機控制模塊、內存棒控制器和智能卡接口,以此來連接用于外部存儲的多媒體卡。

Gnuboy軟件結構和一些工具軟件

Gnuboy是基于Qt系統的,可從圖2中看出它和整個系統的關系。本文構建的基于ARM920T的嵌入式Linux平臺下采用的是嵌入式系統的QT版本:QT/Embedded和Qtopia(QPE),這有助于模擬器的移植。

QT/Embedded和QtopiaQT/Embedded和Qtopia是的QT庫開發(fā)商TrollTech開發(fā)的基于Framebuffer、面向嵌入式系統的QT版本。它的特點是界面美觀、色彩配比好,使用與QT/Windows和QT/X11完全一致的API接口,許多基于QT的程序可以非常方便地移植到嵌入式系統。Qtopia包括了全套的個人信息管理PIM,如地址本、日程安排、游戲、配置工具等。QT/Embedded實現了對下層輸入設備的驅動和底層圖形接口以及各基類和API,它在編譯后生成函數庫被應用程序調用。Qtopia也是以客戶/服務器的方式,通過消息機制來管理各種應用程序。圖3描述了QT應用程序的執(zhí)行方式及系統結構,其中XServer是。

一些工具軟件移植前需要在宿主機上建立ARM的交叉編譯環(huán)境,主要用到的開發(fā)工具包括三個部分:binutils、gcc、glibc。

●Binutils—用于操作二進制文件的實用程序集合,包括諸如匯編器as、二進制轉換工具(objdump、objcopy)等這樣的實用程序;●Gcc—GNUC編譯器(C編譯器gcc和C++編譯器g++);●Glibc—所有應用程序將鏈接到的C庫。

可以直接從Internet上已經編譯的二進制文件安裝到PC機上,并相應設置比如路徑等這樣一些比較簡單的參數即可使用,但必須保證編譯時所用的函數庫版本與目標板上運行時所使用的函數庫版本的一致。ARMDeveloperSuite它是全套的實時開發(fā)軟件工具包,編譯器生成的代碼密度和執(zhí)行速度優(yōu)異,可快速低價地創(chuàng)建ARM結構應用。

移植和優(yōu)化

Gnuboy是一種虛擬機機制,它對具體硬件的操作是通過操作系統(這里是Linux)來進行的,圖4為它對基于ARMlinux平臺硬件操作的抽象層次。

這個抽象層次也適用于在ARMLinux平臺下用C語言編寫的一般虛擬技術應用。越是頂層越是抽象,代碼可移植性就越好;越是底層,越是硬件相關,代碼可移植性就越差,但代碼執(zhí)行速度越快。這也是一般虛擬機移植和優(yōu)化思想的體現,提高移植性,多運用抽象的接口,提高速度,多一些直接操作硬件的代碼。

移植Gnuboy在此平臺上的正確運行需要解決中斷、提供Framebuffer支持、數據存儲格式、字符串到64位整數轉換等問題。

中斷問題Gnuboy需要依賴宿主操作系統(這里是Linux)來提供輸入/輸出等基本服務,讓宿主操作系統作為它與硬件設備的中間人,這種游離于硬件通信細節(jié)之外的方法具有良好的可移植性,本文要解決的主要是提供對鍵盤輸入和游戲控制終端的中斷響應和處理。

在本文構建的平臺下,需要編寫相應的鍵盤和游戲控制終端的Linux驅動程序,以模塊方式加載后,在Gnuboy中打開該設備。對應鍵盤處理,在Gnuboy中需要調整相應的鍵盤設置代碼使之與系統一致。

提供Framebuffer支持Framebuffer技術提供了一個訪問物理圖形設備的定義良好的接口,本文構建的平臺下采用的是Qt系統的嵌入式版本,它是基于Framebuffer的,Gnuboy要在該平臺下運行,必須提供對Framebuffer的支持。通過訪問/dev/fb0來取得系統framebuffer中用于顯示圖像的數據和進行處理。在Gnuboy中調用游戲畫面的Framebuffer地址和掃描方法也需要作響應的修改。

修改Framebuffer地址,也就是獲得游戲畫面的開始地址在內存中的位置。針對采用的LCD的分辨率,需要在Gnuboy中計算Framebuffer地址處做出相應修改。對于本平臺中采用的LCD,Gnuboy刷新處理方法是從行開始,逐行刷新,同時由于一個像素采用兩個字節(jié),因此在逐行刷新時,每次寫兩個字節(jié)。

數據存儲格式和字符串到64位整數轉換在ARMLinux下可配置成大數端或者小數端格式來保存和處理整數數值,在Gnuboy中與數值存儲字節(jié)順序有關的代碼需要與之對應。

Linux明顯缺乏用來把整數字符串轉換為64位整數的函數,如果字符串參數突破32位的極限,就有可能出問題,因此在Gnuboy需要提供字符串到64位整數的的轉換函數。

設置啟動模擬器路徑和編譯在用戶已經選擇好游戲Rom,點擊launchsimulator按鈕觸發(fā)啟動模擬器,進入游戲功能,因此在Gnuboy代碼中需要獲得rom的路徑,由于QT操作系統無法在代碼中直接運行qtopiagnuboy命令,因此需要給出該可執(zhí)行文件的路徑。

源代碼修改好以后,在Makefile中設定交叉編譯器:CC=arm-linux-gcc,CXX=arm-linux-g++。編譯時要用到針對ARM的函數庫可以把函數庫放在一個自己建的一個目錄,為了讓gcc在搜索函數庫時到指定的目錄中尋找,可在Makefile的通過-L參數添加存放針對ARM函數庫的目錄。例如QTOPIALIBS=-L$(QPEDIR)/lib。經過交叉編譯后把得到的可執(zhí)行文件qtopiagnuboy和qtopiagnuboyl燒到嵌入式系統中可以運行,然后不足之處是畫面速度有些慢,這正是下面優(yōu)化要研究的問題。

Gnuboy在ARMLinux下的優(yōu)化

優(yōu)化概述如果說CISC的指導思想之一是為了減輕編譯的負擔,RISC則向編譯提出了更高的要求,ARM作為一種RISC體系結構,優(yōu)化問題顯得非常重要。從圖4的抽象層次可以知道,對Gnuboy的優(yōu)化問題,概括來說是對它一些抽象代碼進行硬件相關代碼替代的過程,并且越是底層的代碼,速度越快,這里直接用ARM匯編語言來改寫一些原來的C函數。前面的移植運行結果已經顯示,Gnuboy的圖像顯示較慢。它的函數voidlcdrefreshline()的主要功能是使用已經解碼好的圖像數據來完成游戲畫面的顯示。對它的優(yōu)化主要是對它里面調用的兩個用C語言所寫函數updatepatpix()和bgscancolor()函數的優(yōu)化。

本文采用了與機器相關優(yōu)化的優(yōu)化技術,與機器相關的優(yōu)化這里主要是寄存器分配問題,一般寄存器分配算法是基于一種稱為圖著色技術的。給定一個無向圖G=(V,E),V是有限節(jié)點的集合,V={v1,v2,.,vn},E是邊的集合,E={(i,j)|vi∈V,vj∈V,vi和vj相連},圖著色問題要求找到一個k盡量小的所有節(jié)點的賦值(也稱“完全賦值”)C:V—{1.k},要求在該完全賦值中,若(i,j)∈E,則C(vi)≠C(vj)。

簡化的圖著色技術應用針對本文的優(yōu)化,階段是把C函數用偽ARM匯編指令(即用符號寄存器Ui替代真正ARM寄存器的ARM指令)改寫。

第二階段對符號寄存器U1~Un(n15)畫出相干圖并進行著色,所謂對圖進行著色是指給圖中的每個結點賦予一種顏色,而且所有相鄰的兩個結點都具有不同的顏色。這樣,每種顏色就對應于處理器中的一個實際的物理寄存器,如此著色保證了所有可能發(fā)生沖突的符號寄存器都被賦予不同的物理寄存器。

假設n+1個符號寄存器的相干圖如圖5(a)所示,其中結點是符號寄存器,而結點之間的弧線表示變量的生命周期有重疊,少需要16種顏色才能避免相連結點顏色有重疊。由于ARM920T只有r0~r14等15個寄存器可用于存儲程序變量,小于16,也就是存在寄存器沖突問題,這個時候就可以通過選擇刪除一個結點(如圖中Un+1),也就是把U6對應的數據存儲到存儲器中,以后再重裝入寄存器來達到對各寄存器進行釋放的目的,見圖5(b)所示,虛線圓圈表示符號寄存器U16對應的數據轉存到存儲器中。

用上面介紹的方法對updatepatpix和bgscancolor函數進行處理,得到的ARM匯編函數,用它們替換掉gnuboy源代碼中原先的C函數并進行編譯生成可執(zhí)行文件,可執(zhí)行文件在構建的測試板上運行良好。下面對上面提到的優(yōu)化來進行一些測試。

測試評估

用CodeWarriorforARMDeveloperSuite和AXDDebugger軟件測試優(yōu)化前后函數的運行時間,結果如表1所示。圖著色技術強調實現活躍變量的100%分配,并且代碼需要寄存器數量越多,優(yōu)化效果越明顯,這從updatapatpix和bgscancolor函數的優(yōu)化中可以看出(前者代碼較后者復雜,需要存放的臨時變量也多)。進一步優(yōu)化gnuboy,可用類似的方法替換源代碼的另外一些影響速度較大的函數。

總結

本文構建了一個基于ARM920T嵌入式Linux的實驗平臺環(huán)境,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論