99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Gnuboy虛擬機技術(shù)在ARM Linux中的應(yīng)用及優(yōu)化研究

電子設(shè)計 ? 來源:eefocus ? 作者:佚名 ? 2020-03-07 08:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

硬件環(huán)境

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

1)處理器內(nèi)核模塊采用v4T體系結(jié)構(gòu)的ARM920T 內(nèi)核擁有16K的指令緩存和16K的數(shù)據(jù)緩存; 外部接口模塊提供了最多6 個片選信號來訪問外部設(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ù)字安全主機控制模塊、內(nèi)存棒控制器和智能卡接口,以此來連接用于外部存儲的多媒體卡。

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

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

一些工具軟件

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

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

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

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

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

移植和優(yōu)化

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

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

移植

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

中斷問題

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

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

提供Framebuffer支持

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

修改Framebuffer地址,也就是獲得游戲畫面的開始地址在內(nèi)存中的位置。針對采用的LCD 的分辨率, 需要在Gnuboy中計算Framebuffer地址處做出相應(yīng)修改。對于本平臺中采用的LCD, Gnuboy刷新處理方法是從第一行開始,逐行刷新,同時由于一個像素采用兩個字節(jié),因此在逐行刷新時,每次寫兩個字節(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,點擊launch simulator按鈕觸發(fā)啟動模擬器,進入游戲功能,因此在Gnuboy代碼中需要獲得rom的絕對路徑,由于QT操作系統(tǒng)無法在代碼中直接運行qtop iagnuboy命令,因此需要給出該可執(zhí)行文件的絕對路徑。

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

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

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

優(yōu)化概述

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

本文采用了與機器相關(guān)優(yōu)化的優(yōu)化技術(shù),與機器相關(guān)的優(yōu)化這里主要是寄存器分配問題,一般寄存器分配算法是基于一種稱為圖著色技術(shù)的。給定一個無向圖G= (V , E ) ,V 是有限節(jié)點的集合,V = { v 1, v 2, 。, v n} , E是邊的集合, E = { ( i, j ) | v i∈V , v j∈V , v i和v j相連} , 圖著色問題要求找到一個k盡量小的所有節(jié)點的賦值(也稱“完全賦值”) 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)畫出相干圖并進行著色,所謂對圖進行著色是指給圖中的每個結(jié)點賦予一種顏色,而且所有相鄰的兩個結(jié)點都具有不同的顏色。這樣,每種顏色就對應(yīng)于處理器中的一個實際的物理寄存器,如此著色保證了所有可能發(fā)生沖突的符號寄存器都被賦予不同的物理寄存器。

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

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

測試評估

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

總結(jié)

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

責(zé)任編輯:gt


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9353

    瀏覽量

    377558
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213814
  • 虛擬機
    +關(guān)注

    關(guān)注

    1

    文章

    966

    瀏覽量

    29366
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    gnuboy虛擬機怎么應(yīng)用到嵌入式環(huán)境?

    的嵌入式平臺上對gnuboy運用進行的嘗試性工作,同時, Gnuboy作為一種虛擬機技術(shù),本文的工作對研究
    發(fā)表于 03-05 06:51

    虛擬機虛擬技術(shù)

    虛擬機虛擬技術(shù)給計算機應(yīng)用注入了新的研究與開發(fā)點,同時也存在諸多不利因素。本文綜述了虛擬機虛擬
    發(fā)表于 09-07 10:15 ?13次下載

    基于gnuboy虛擬機的嵌入式實驗平臺的移植與優(yōu)化

    本文就是構(gòu)建的基于ARM920T Linux的嵌入式平臺上對gnuboy運用進行的嘗試性工作,同時, Gnuboy作為一種
    發(fā)表于 02-12 11:17 ?1208次閱讀
    基于<b class='flag-5'>gnuboy</b><b class='flag-5'>虛擬機</b>的嵌入式實驗平臺的移植與<b class='flag-5'>優(yōu)化</b>

    linux虛擬機的聯(lián)網(wǎng)方法

    虛擬機安裝linux系統(tǒng)無法上網(wǎng)的解決方法。
    發(fā)表于 05-31 09:27 ?1655次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>虛擬機</b>的聯(lián)網(wǎng)方法

    linux虛擬機怎么聯(lián)網(wǎng)

    虛擬機安裝linux系統(tǒng)無法上網(wǎng)的解決方法。
    發(fā)表于 06-03 09:29 ?2570次閱讀

    虛擬機Linux如何測試 DBUS Daemon

    虛擬機Linux如何測試 DBUS Daemon
    的頭像 發(fā)表于 06-22 16:35 ?4641次閱讀
    <b class='flag-5'>虛擬機</b>:<b class='flag-5'>Linux</b>如何測試 DBUS Daemon

    KVM虛擬機管理和基本使用

    KVM — 全稱是基于內(nèi)核的虛擬機(Kernel-based Virtual Machine)是一個開源軟件,基于內(nèi)核的虛擬技術(shù),實際是嵌入系統(tǒng)的一個虛擬化模塊,通過
    的頭像 發(fā)表于 02-07 09:20 ?1736次閱讀

    使用Ansible構(gòu)建虛擬機部署Linux的最佳實踐

    編者按:本文節(jié)選自節(jié)選自《基于Linux的企業(yè)自動化》第五章?!暗?章,使用Ansible構(gòu)建用于部署的虛擬機模板,通過構(gòu)建虛擬機模板來探索部署Linux的最佳實踐,
    的頭像 發(fā)表于 05-16 15:13 ?1446次閱讀

    linux虛擬機怎么調(diào)出命令行

    Linux虛擬機是一種模擬運行Linux操作系統(tǒng)的虛擬環(huán)境,它可以Windows、Mac、Linux
    的頭像 發(fā)表于 11-17 09:55 ?4300次閱讀

    linux虛擬機系統(tǒng)基本指令

    Linux虛擬機系統(tǒng)是一種通過虛擬技術(shù)物理服務(wù)器上部署多個獨立的虛擬機實例的操作系統(tǒng)。它可以
    的頭像 發(fā)表于 11-17 10:04 ?2168次閱讀

    linux虛擬機使用教程

    引言:Linux虛擬機是一種方便且常用的技術(shù),它允許用戶現(xiàn)有操作系統(tǒng)的基礎(chǔ)上創(chuàng)建和運行另一個獨立的操作系統(tǒng)。本篇文章
    的頭像 發(fā)表于 11-17 10:06 ?2326次閱讀

    虛擬機linux怎么編寫程序

    虛擬機Linux上編寫程序是一項非常常見且有用的任務(wù)。無論是開發(fā)一個簡單的腳本、一個Web應(yīng)用程序還是一個復(fù)雜的軟件項目,Linux提供了強大的工具和環(huán)境來幫助你進行編程。本文將詳細
    的頭像 發(fā)表于 11-17 10:08 ?2400次閱讀

    vm虛擬機linux系統(tǒng)怎么編程

    虛擬機編程Linux系統(tǒng)是學(xué)習(xí)和探索計算機科學(xué)的一個重要方面。使用虛擬機可以主機上模擬出一
    的頭像 發(fā)表于 11-17 10:10 ?2396次閱讀

    linux虛擬機怎么運行代碼

    虛擬機,你就可以開始運行代碼了。Linux,有多種方式可以運行代碼,下面將介紹幾種常見的方法。 使用終端(Terminal)運行代碼
    的頭像 發(fā)表于 11-17 10:12 ?5948次閱讀

    怎么安裝linux虛擬機

    計算機領(lǐng)域,虛擬機是一種軟件程序,它允許主操作系統(tǒng)上運行多個虛擬操作系統(tǒng)。Linux虛擬機
    的頭像 發(fā)表于 11-23 10:50 ?1497次閱讀