《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于ARM Linux的Gameboy模擬器移植和優(yōu)化研究
基于ARM Linux的Gameboy模擬器移植和優(yōu)化研究
嵌入式在線
顧葉鋒 付宇卓 魯欣
摘要: 本文構(gòu)建了一個(gè)基于ARM920T嵌入式Linux的實(shí)驗(yàn)平臺環(huán)境, gnuboy作為一種虛擬機(jī),應(yīng)用到這樣的嵌入式環(huán)境中遇到的問題具有一定的代表性,最需要解決的問題是速度問題,針對于此,本文實(shí)現(xiàn)了它在所構(gòu)建的平臺上的移植和一些優(yōu)化研究。
關(guān)鍵詞: ARM ARM920T Linux
Abstract:
Key words :

引言

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

  目前,ARM L inux支持包括ARM610、A RM710、ARM720T cores、ARM920T" title="ARM920T">ARM920T cores、StrongARM 110、StrongARM1100、XScale等系列的ARM處理器。

  Gameboy是目前比較流行的8位掌上游戲機(jī),通常被簡稱為GB,它的最終態(tài)Game Boy Color (GBC)是完全向后兼容的。Gnuboy是GB /GBC的軟件模擬器,是一種自由軟件,它是基于Qt系統(tǒng)的,能夠運(yùn)行幾乎所有的黑白和彩色的GB /GBC游戲ROM,但運(yùn)行復(fù)雜一些的游戲需要在速度上得到加強(qiáng),同時(shí)它的聲音還沒有得到測試。

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

  硬件環(huán)境

  本實(shí)驗(yàn)測試板采用Motorola公司的MX1 Lite,系統(tǒng)的主要模塊有處理器內(nèi)核模塊、用戶接口模塊、連接設(shè)備模塊等,如圖1所示,下面分別進(jìn)行介紹。

1)處理器內(nèi)核模塊采用v4T體系結(jié)構(gòu)的ARM920T 內(nèi)核擁有16K的指令緩存和16K的數(shù)據(jù)緩存; 外部接口模塊提供了最多6 個(gè)片選信號來訪問外部設(shè)備,其中連接的12Kx16bits的NOR Flash 經(jīng)過配置用于系統(tǒng)啟動; SDRAM 控制器提供了對使用32Mx32bits的SDRAM的訪問控制。

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

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

  Gnuboy軟件結(jié)構(gòu)和一些工具軟件

  Gnuboy是基于Qt系統(tǒng)的,可從圖2中看出它和整個(gè)系統(tǒng)的關(guān)系。本文構(gòu)建的基于ARM920T的嵌入式L inux平臺下采用的是嵌入式系統(tǒng)的QT 版本: QT/Embedded 和Qtop ia(QPE) ,這有助于模擬器的移植。

QT/Embedded和Qtopia

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

一些工具軟件

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

  ● Binutils — 用于操作二進(jìn)制文件的實(shí)用程序集合,包括諸如匯編器as、二進(jìn)制轉(zhuǎn)換工具( objdump、objcopy) 等這樣的實(shí)用程序;

  ● Gcc — GNUC編譯器(C編譯器gcc和C + +編譯器g + + ) ;

  ● Glibc —所有應(yīng)用程序?qū)㈡溄拥降腃庫。

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

  移植和優(yōu)化

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

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

  移植

  Gnuboy在此平臺上的正確運(yùn)行需要解決中斷、提供Framebuffer支持、數(shù)據(jù)存儲格式、字符串到64位整數(shù)轉(zhuǎn)換等問題。

  中斷問題

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

  在本文構(gòu)建的平臺下,需要編寫相應(yīng)的鍵盤和游戲控制終端的Linux驅(qū)動程序,以模塊方式加載后,在Gnuboy中打開該設(shè)備。對應(yīng)鍵盤處理,在Gnuboy中需要調(diào)整相應(yīng)的鍵盤設(shè)置代碼使之與系統(tǒng)一致。

  提供Framebuffer支持

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

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

  數(shù)據(jù)存儲格式和字符串到64位整數(shù)轉(zhuǎn)換

  在ARM Linux下可配置成大數(shù)端或者小數(shù)端格式來保存和處理整數(shù)數(shù)值,在Gnuboy中與數(shù)值存儲字節(jié)順序有關(guān)的代碼需要與之對應(yīng)。

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

  設(shè)置啟動模擬器路徑和編譯

  在用戶已經(jīng)選擇好游戲Rom,點(diǎn)擊launch simulator按鈕觸發(fā)啟動模擬器,進(jìn)入游戲功能,因此在Gnuboy代碼中需要獲得rom的絕對路徑,由于QT操作系統(tǒng)無法在代碼中直接運(yùn)行qtop iagnuboy命令,因此需要給出該可執(zhí)行文件的絕對路徑。

  源代碼修改好以后,在Makefile中設(shè)定交叉編譯器: CC= arm - linux - gcc, CXX = arm - linux - g + +。編譯時(shí)要用到針對ARM的函數(shù)庫可以把函數(shù)庫放在一個(gè)自己建的一個(gè)目錄,為了讓gcc 在搜索函數(shù)庫時(shí)到指定的目錄中尋找,可在Makefile的通過- L參數(shù)添加存放針對ARM函數(shù)庫的目錄。例如QTOP IA L IBS = - L $(QPED IR) / lib。

  經(jīng)過交叉編譯后把得到的可執(zhí)行文件qtop iagnuboy和qtop iagnuboyl燒到嵌入式系統(tǒng)中可以運(yùn)行,然后不足之處是畫面速度有些慢,這正是下面優(yōu)化要研究的問題。

  Gnuboy在ARM L inux下的優(yōu)化

  優(yōu)化概述

  如果說CISC的指導(dǎo)思想之一是為了減輕編譯的負(fù)擔(dān),R ISC則向編譯提出了更高的要求,ARM作為一種R ISC體系結(jié)構(gòu),優(yōu)化問題顯得非常重要。從圖4 的抽象層次可以知道,對Gnuboy的優(yōu)化問題,概括來說是對它一些抽象代碼進(jìn)行硬件相關(guān)代碼替代的過程,并且越是底層的代碼,速度越快,這里直接用ARM匯編語言來改寫一些原來的C函數(shù)。前面的移植運(yùn)行結(jié)果已經(jīng)顯示, Gnuboy的圖像顯示較慢。它的函數(shù)void lcd refreshline ( )的主要功能是使用已經(jīng)解碼好的圖像數(shù)據(jù)來完成游戲畫面的顯示。對它的優(yōu)化主要是對它里面調(diào)用的兩個(gè)用C語言所寫函數(shù)updatepatp ix ( )和bg scan color ( )函數(shù)的優(yōu)化。

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

  簡化的圖著色技術(shù)應(yīng)用

  針對本文的優(yōu)化,第一階段是把C函數(shù)用偽ARM匯編指令(即用符號寄存器Ui替代真正ARM寄存器的ARM指令)改寫。

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

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

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

  測試評估

  用CodeWarrior forARM Developer Suite和AXD Debugger軟件測試優(yōu)化前后函數(shù)的運(yùn)行時(shí)間,結(jié)果如表1所示。圖著色技術(shù)強(qiáng)調(diào)實(shí)現(xiàn)活躍變量的100%分配,并且代碼需要寄存器數(shù)量越多,優(yōu)化效果越明顯,這從updatapatp ix和bg scan color函數(shù)的優(yōu)化中可以看出(前者代碼較后者復(fù)雜,需要存放的臨時(shí)變量也多) 。進(jìn)一步優(yōu)化gnuboy,可用類似的方法替換源代碼的另外一些影響速度較大的函數(shù)。

總結(jié)

  本文構(gòu)建了一個(gè)基于ARM920T嵌入式Linux的實(shí)驗(yàn)平臺環(huán)境, gnuboy作為一種虛擬機(jī),應(yīng)用到這樣的嵌入式環(huán)境中遇到的問題具有一定的代表性,最需要解決的問題是速度問題,針對于此,本文實(shí)現(xiàn)了它在所構(gòu)建的平臺上的移植和一些優(yōu)化研究。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美在线网址| 日韩亚洲欧美一区| 亚洲国产成人在线播放| 国产日韩精品综合网站| 国产精品国产自产拍高清av| 欧美精品一区在线| 能在线观看的日韩av| 久久久青草婷婷精品综合日韩 | 欧美电影免费观看高清| 久久爱www久久做| 欧美一区二区福利在线| 亚洲欧美日韩综合一区| 亚洲综合国产精品| 亚洲欧美日韩久久精品| 亚洲一区二区三区免费视频| 一本色道久久综合亚洲精品不 | 午夜在线a亚洲v天堂网2018| 中国日韩欧美久久久久久久久| 亚洲美女黄网| 一区二区三区成人精品| 一区二区日韩| 亚洲视频一区二区免费在线观看| 一本大道av伊人久久综合| 99精品视频免费观看| 在线亚洲一区二区| 亚洲婷婷综合久久一本伊一区| 亚洲手机视频| 午夜精品www| 欧美一区二区成人6969| 久久久99精品免费观看不卡| 久久久亚洲精品一区二区三区| 久久躁日日躁aaaaxxxx| 蜜臀91精品一区二区三区| 欧美国产日韩xxxxx| 欧美日韩国产综合视频在线观看中文 | 性色一区二区三区| 久久精品国产视频| 亚洲精品乱码久久久久久按摩观 | 国产区精品在线观看| 国产一区二区三区免费观看| 在线观看日韩一区| 日韩视频在线观看国产| 亚洲一区国产视频| 欧美在线视频导航| 亚洲日本中文字幕| 亚洲一区视频| 欧美在线观看视频一区二区| 久久久伊人欧美| 欧美区日韩区| 国产精品一级二级三级| 一区久久精品| 99精品99久久久久久宅男| 亚洲欧美网站| 亚洲人在线视频| 亚洲一线二线三线久久久| 久久成人这里只有精品| 欧美高清在线播放| 国产精品久久久久久久浪潮网站 | 亚洲高清在线播放| 日韩视频免费观看高清在线视频 | 一区二区三区国产精华| 欧美一级淫片aaaaaaa视频| 亚洲啪啪91| 亚洲欧美日韩另类精品一区二区三区| 久久免费视频一区| 欧美日韩伦理在线免费| 国产日韩一区二区| 亚洲七七久久综合桃花剧情介绍| 亚洲一区在线免费| 亚洲国产精品一区制服丝袜 | 欧美色播在线播放| 国产一区二区三区免费在线观看| 亚洲精品网址在线观看| 欧美亚洲色图校园春色| 一本色道久久88亚洲综合88| 久久精品视频网| 欧美日韩免费一区二区三区视频 | 一区视频在线| 亚洲一区二区三区在线视频| 亚洲欧洲一区二区天堂久久| 久久www免费人成看片高清| 欧美日韩大片| 极品少妇一区二区| 亚洲婷婷在线| 夜夜嗨av一区二区三区网站四季av | 亚洲国产精品成人综合| 亚洲免费在线观看视频| 亚洲精品在线三区| 久久久国产精品一区二区中文 | 亚洲小说春色综合另类电影| 亚洲精品午夜| 久久亚洲精品视频| 国产精品日韩欧美一区二区| 最新中文字幕一区二区三区| 欧美一区二区三区精品电影| 亚洲在线视频一区| 欧美精品在线网站| 在线观看视频一区二区欧美日韩| 亚洲欧美日韩精品| 亚洲午夜一二三区视频| 欧美电影在线观看完整版| 国内精品国产成人| 亚洲综合成人在线| 亚洲视频一二| 欧美日韩国产综合视频在线| 亚洲国产综合在线| 亚洲国产精品视频| 久久网站免费| 国产综合色产| 久久gogo国模裸体人体| 欧美资源在线观看| 国产精品影院在线观看| 亚洲天堂成人| 亚洲中午字幕| 国产精品九九久久久久久久| 99亚洲视频| 中文av字幕一区| 欧美日韩视频第一区| 亚洲精品欧洲| 一本色道久久综合亚洲精品不| 欧美精品激情在线| 亚洲激情在线观看视频免费| 亚洲人成精品久久久久| 久久网站免费| 1024亚洲| 亚洲日本中文字幕| 欧美成人dvd在线视频| 精品二区视频| 亚洲激情啪啪| 欧美成人午夜激情视频| 亚洲第一精品久久忘忧草社区| 亚洲国产成人高清精品| 蜜臀久久99精品久久久画质超高清| 精品va天堂亚洲国产| 亚洲国产欧美日韩精品| 免费日韩av| 亚洲日韩成人| 亚洲一区二区在线免费观看| 国产精品欧美日韩| 先锋影音国产一区| 久久久午夜电影| 亚洲国产欧洲综合997久久| 日韩视频在线一区| 欧美视频免费在线观看| 亚洲一区观看| 久久久久久久久久久成人| 国内精品久久久久久久影视蜜臀 | 欧美日韩中国免费专区在线看| 一个色综合导航| 欧美伊人久久久久久午夜久久久久| 国产一区二区成人久久免费影院| 亚洲国产99| 欧美日韩在线直播| 午夜国产一区| 裸体丰满少妇做受久久99精品 | 亚洲免费观看高清完整版在线观看熊 | 欧美日韩国产丝袜另类| 亚洲小视频在线| 久久亚洲私人国产精品va| 91久久亚洲| 亚洲欧美日韩在线一区| 国产综合视频在线观看| 亚洲区在线播放| 国产精品乱人伦一区二区| 久久成人羞羞网站| 欧美另类视频在线| 亚洲在线黄色| 女女同性精品视频| 一区二区欧美在线观看| 久久九九精品| 亚洲伦理久久| 久久国产视频网| 亚洲午夜激情在线| 极品少妇一区二区| 国产丝袜一区二区三区| 美女网站久久| 在线看国产日韩| 亚洲深夜福利| 国产综合色在线| 一本久久知道综合久久| 国产日韩欧美在线视频观看| 亚洲精品资源| 国产精品毛片a∨一区二区三区|国 | 国产啪精品视频| 99天天综合性| 国产一区二区成人久久免费影院| 99热免费精品| 国产日韩视频| 亚洲视频网在线直播| 国际精品欧美精品| 亚洲天堂网在线观看| 在线观看成人av电影| 亚洲乱码国产乱码精品精可以看| 国产精品久在线观看| 亚洲人成网站999久久久综合| 国产乱码精品1区2区3区| 亚洲乱亚洲高清| 国产一区二区日韩| 中日韩高清电影网| 国产日韩成人精品|