日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

面向龍芯平臺的Android系統(tǒng)移植研究

出處:電子愛好者博客 發(fā)布于:2013-07-22 15:13:01

  摘要:在分析Android系統(tǒng)與龍芯平臺架構(gòu)的基礎(chǔ)上,針對軟硬件適配、虛擬機(jī)優(yōu)化、編譯器移植等關(guān)鍵技術(shù)進(jìn)行了深入研究。在充分保持龍芯處理器}生能的基礎(chǔ)上,對Android系統(tǒng)源碼進(jìn)行了優(yōu)化修改,實(shí)現(xiàn)了在龍芯平臺完整運(yùn)行Android Gingerbread系統(tǒng),同時對移植系統(tǒng)中的Dalvik虛擬機(jī)的性能優(yōu)化進(jìn)行了測試驗(yàn)證。為其他版本Android系統(tǒng)在面向龍芯平臺的移植方面提供了重要參考,具有很大應(yīng)用價值。

  1 引言

  龍芯處理器作為一款基于MIPS指令集、我國自主研發(fā)具有完全自主知識產(chǎn)權(quán)的中央處理器,具有低功耗、低成本等特點(diǎn),在嵌入式、工業(yè)控制等領(lǐng)域有著非常廣闊的應(yīng)用前景。Android是Google于

  2007年11月5日發(fā)布的基于Linux平臺的開源操作系統(tǒng),是為移動終端打造的真正開放和完整的移動操作系統(tǒng)。作為一個開源的系統(tǒng),Android不存在以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙,因此,向龍芯平臺上移植Android操作系統(tǒng)將會成為龍芯處理器在嵌入式系統(tǒng)領(lǐng)域的一個研究方向,對信息產(chǎn)業(yè)國產(chǎn)化發(fā)展具有重要的工程應(yīng)用價值和意義。

  2 Android系統(tǒng)架構(gòu)

  Android平臺的系統(tǒng)架構(gòu)主要包括Linux內(nèi)核、硬件抽象層(包括系統(tǒng)運(yùn)行庫與Android運(yùn)行環(huán)境)、應(yīng)用程序框架、應(yīng)用程序組成。圖1列出了操作系統(tǒng)的主要組成部分。

  

  Android運(yùn)行于Linux內(nèi)核之上,但不同于其他發(fā)行版本的Linux系統(tǒng)。因?yàn)橐话惆l(fā)行版Linux系統(tǒng)所包含的功能,Android大都沒有提供支持,例如caim、xll、Alsa、FFmpeg、GTK、Pango及Glibc等在Android系統(tǒng)中都被移除掉了。Android又以bionic取代G1ibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。

  Android的Linux內(nèi)核實(shí)現(xiàn)了包括安全、存儲器管理、程序管理、網(wǎng)絡(luò)堆棧、驅(qū)動程序模型等模塊n,.

  Android系統(tǒng)架構(gòu)采用了分層的設(shè)計方法,在Linux內(nèi)核之上包括硬件抽象層、應(yīng)用程序框架和應(yīng)用層,每一層為上層提供統(tǒng)一服務(wù),以屏蔽各層之間的差異,保證本層及以下層發(fā)生了變化不會影響到上層口,.各層所包含的內(nèi)容及具體職責(zé)如下:

 ?。?)硬件抽象層是為了將應(yīng)用層與內(nèi)核分開,降低對Linux內(nèi)核的依賴。其中,Google開發(fā)一個支持Java語法的虛擬機(jī):Dalvik,其特點(diǎn)是基于寄存器結(jié)構(gòu),而Sun Java虛擬機(jī)是基于堆棧結(jié)構(gòu),因此Dalvik虛擬機(jī)可以針對特定平臺做化處理,這也是針對嵌入式系統(tǒng)所做的設(shè)計。

 ?。?)應(yīng)用程序框架提供了調(diào)用系統(tǒng)內(nèi)部程序的管理程序。

 ?。?)應(yīng)用層由Java實(shí)現(xiàn),包括了一系列應(yīng)用程序,包括Email客戶端,瀏覽器,日歷,地圖等,程序可通過JNI調(diào)用硬件抽象層來實(shí)現(xiàn)對硬件的操作。

  3龍芯平臺

  龍芯2F處理器是一款64位MIPS III指令集的通用RISC處理器。龍芯2F的指令流水線每個時鐘周期取四條指令進(jìn)行譯碼,并且動態(tài)地發(fā)射到五個全流水的功能部件中。雖然指令在保證依賴關(guān)系的前提下進(jìn)行亂序執(zhí)行,但是指令的提交還是按照程序原來的順序,以保證中斷和訪存順序執(zhí)行p,.

  四發(fā)射的超標(biāo)量結(jié)構(gòu)使得指令流水線中指令和數(shù)據(jù)相關(guān)問題十分突出,龍芯2F采用亂序執(zhí)行技術(shù)和激進(jìn)的存儲系統(tǒng)設(shè)計來提高流水線的效率一,

  龍夢逸瓏8089B筆記本采用龍芯2F處理器,運(yùn)行Linux發(fā)行版操作系統(tǒng),具有完全的國產(chǎn)自主化產(chǎn)權(quán)。本文是在龍夢逸瓏筆記本上移植Android2.3代號Gingerbread.表1為龍夢逸瓏筆記本配置隋況。

  

  MIPS公司目前已經(jīng)移植Android到部分MIPS平臺和QEMU上面,并且提供源碼。這些源碼對移植工作有非常好的參考意義。

  4系統(tǒng)移植4.1建立交叉編譯環(huán)境

  編譯工作是在UbuntulO.04(32位)下進(jìn)行,使用jdkl.6.

  MIPS提供的代碼中自帶了編譯的工具鏈,但其中g(shù)cc自帶的libgcc.a是針對MIPS32R2架構(gòu)CPU編譯的, gcc配置編譯選項(xiàng)為。march=mips3或者一march=loongson2f時,會發(fā)生鏈接錯誤,因?yàn)辇埿九cMIPS32R2是互不兼容的架構(gòu)。Android的工具鏈?zhǔn)轻槍ioniclibc定制的,MIPS放出了Android的源碼,但其中交叉編譯工具鏈?zhǔn)潜环庋b過的,無法進(jìn)行修改,因此無法針對龍芯平臺重建這個工具鏈。

  工具鏈制作腳本crosstool-ng可以較為簡化地制作龍芯可用的通用標(biāo)準(zhǔn)工具鏈。用制作好的libgcc.a與libgcc .替換掉工具鏈里面的相應(yīng)庫文_eha Android件,組合出-個可用的龍芯Android交叉編澤工具鏈。

  4.2 Linux內(nèi)核移植

  Android的內(nèi)核位于android.git.kernel.org上,目前較穩(wěn)定版本是2.6.35.7.Linux內(nèi)核版本已經(jīng)包含了龍芯相關(guān)的支持代碼,進(jìn)而自動地被Google收納進(jìn)了Android內(nèi)核中。這意味著Android內(nèi)核默認(rèn)支持龍芯,只需適當(dāng)配置即可。但特別需要說明的是,雖然龍芯支持64位內(nèi)核版本,并且在32位下多只能訪問512M內(nèi)存,但是由于Google給Android增加的驅(qū)動都從未在64位模式下調(diào)試過,為了避免不必要的兼容性問題,內(nèi)核編譯選擇32位版本。龍芯的CPU只支持16K的頁表大小,跟通常系統(tǒng)4K不符,因此編譯內(nèi)核選項(xiàng)應(yīng)設(shè)置頁表大小為16K.在General Setup里面,勾選Enable the AnonymousShared Memory Subsystem,否則Android在啟動時會使zygote進(jìn)程無法啟動導(dǎo)致啟動失敗。

  4.3 Android文件系統(tǒng)移植

  文件系統(tǒng)源碼是針對MIPS32R2架構(gòu)進(jìn)行設(shè)計,其中含有MIPS IV和MIPS V中的32位指令,對于只支持到MIPS III的龍芯,使用原始的文件系統(tǒng)會遇到大量的非法指令。因此,移植Android蟄J龍芯平臺,需要對文件系統(tǒng)源代碼進(jìn)行修改以適配MIPS III指令集。

  Android文件系統(tǒng)代碼目錄主要包括三個部分:

  系統(tǒng)庫與Dalvik虛擬機(jī)(硬件抽象層),應(yīng)用程序框架、應(yīng)用程序。文件系統(tǒng)目錄結(jié)構(gòu)如下所示:

  Makefile(全局的編譯腳本);bionic(基礎(chǔ)庫代碼);bootable(引導(dǎo)與恢復(fù)程序);build(編譯和配置腳本);Dalvik(JAVA虛擬機(jī));development(程序開發(fā)所需要的模擬器和工具);external(系統(tǒng)外部庫);frameworks(應(yīng)用程序框架);hardware(與硬件平臺相關(guān)的庫);packages(應(yīng)用程序);prebuilt(Android編譯工具鏈);system(Android系統(tǒng)庫)。其中應(yīng)用程序使用java語言進(jìn)行設(shè)計,不需要進(jìn)行修改,對Android文件系統(tǒng)的移植主要就是對系統(tǒng)庫與Dalvik虛擬機(jī)、應(yīng)用程序框架的移植。

 ?。?)因Dalvik是基于寄存器的虛擬機(jī),可以針對平臺進(jìn)行優(yōu)化,實(shí)現(xiàn)方式包括優(yōu)化的基于匯編碼方式以及通用的基于C語言方式。為了不損失性能,移植選擇基于平臺優(yōu)化的匯編碼方式實(shí)現(xiàn)方式。Dalvik虛擬機(jī)的解釋器實(shí)現(xiàn)代碼中出現(xiàn)了多處MIPS IV和MIPS V的匯編指令。主要包括:movn、movz、mul、pref,需要將它們替換為龍芯平臺(MIPS lid兼容指令。

  movn:表示如果第三個寄存器的內(nèi)容為負(fù),那么復(fù)制一個寄存器的內(nèi)容到另外一個寄存器。替換為beqz判零條件轉(zhuǎn)移指令與move移動指令。

  movz:表示如果第三個寄存器的內(nèi)容為0,那么復(fù)制一個寄存器的內(nèi)容到另外一個寄存器。替換為bnez非-%-條件轉(zhuǎn)移指令與move移動指令。

  mul:表示第1個寄存器獲得另外兩個寄存器相乘的結(jié)果。替換為mult乘法指令與mflo移動指令。

  pref:數(shù)據(jù)預(yù)存緩存指令。去掉數(shù)據(jù)預(yù)存緩存指令。

 ?。?)修改頁表大小為16K,與內(nèi)核中設(shè)置的一致。

  Android代碼默認(rèn)為4K,共有兩處。一處為bionic(基礎(chǔ)庫代碼)中定義,修改公式為:頁表大小=2崩GE_SHlFT.一處為Dalvik虛擬機(jī)代碼中定義,SYSTEM PAGESIZE修改為16 384(16K)。

 ?。?)應(yīng)用程序框架中的libAGL里面的匯編代碼用到了大量龍芯平臺不支持的乘加指令。修改其判斷指令,使只在非龍芯CPU編譯時才使用匯編,強(qiáng)制在對龍芯平臺編譯時使用C代碼來實(shí)現(xiàn)。

  (4)修改架構(gòu)與位寬為32位MIPSIII.龍芯作為MIPS III架構(gòu)處理器,兼容64位與32位,由于編譯環(huán)境是全32位的。按照這個邏輯,若位寬設(shè)置為64位,則在運(yùn)行時會出現(xiàn)位對齊錯誤。

 ?。?)新建編譯腳本loongson2F.mk,用以配置GCC編譯的選項(xiàng),包括指定架構(gòu)為MIPS III,設(shè)置編譯使用硬浮點(diǎn),小端編譯等。

 ?。?)Android Gingerbread系統(tǒng)默認(rèn)要求需在64位環(huán)境下進(jìn)行交叉編譯,由于編譯環(huán)境是全32位,并且Linux內(nèi)核編譯為32位版本,因此修改Android源碼編譯環(huán)境要求為32位。

  至此,對于Android文件系統(tǒng)的修改已經(jīng)完成,使用前文制作的龍芯Android交叉編譯工具鏈進(jìn)行編譯,生成Android Gingerbread龍芯可用的文件系統(tǒng)。Android Gingerbread在龍夢逸瓏上運(yùn)行的效果如圖2所示。

  

  5虛擬機(jī)性能驗(yàn)證測試

  針對Android系統(tǒng)在龍芯平臺的移植,主要是在Dalvik虛擬機(jī)方面根據(jù)龍芯平臺做了優(yōu)化。為了驗(yàn)證移植Android到龍芯平臺的實(shí)際應(yīng)用效果,實(shí)驗(yàn)對Dalvik虛擬機(jī)進(jìn)行測試分析,說明移植的性能。

  測試選擇四種較典型的測試用例omnibus.opcodes(測試優(yōu)化性能),many.interfaces(測試CPU負(fù)載),classloader(測試Java類加載器性能),verification.error(異常捕獲處理)。分別測試C語言版本解釋器和匯編語言版本解釋器的Dalvik在龍芯2F上執(zhí)行測試程序所需要的時間,并對比測量結(jié)果。測試環(huán)境為:龍夢逸瓏筆記本(處理器:龍芯2F;主頻:800 MHz);系統(tǒng):Android2.3.3;內(nèi)核版本:2.6.35.7.測試用例來自Android文件系統(tǒng)中提供的Dalvik虛擬機(jī)測試程序。

  測試數(shù)據(jù)如圖3-圖6所示。表2為測試用例運(yùn)行時間統(tǒng)計。

  

  從結(jié)果可以得出,使用針對龍芯平臺優(yōu)化的匯編語言版本Dalvik虛擬機(jī)在性能方面要優(yōu)于使用C語言版本的虛擬機(jī)。但系統(tǒng)整體的運(yùn)行效果相比于目前市場中主流的產(chǎn)品芯片還存在著比較大的差距。例如相比主頻為1 GHz的ARM Cortex.A8處理器,龍芯2F主頻只能穩(wěn)定運(yùn)行于500 MHz左右,并且由于采用J釔elle.RCT JavaJJ喇圣菠術(shù),ARM Cortex.A8對實(shí)時(J-IT)和動態(tài)調(diào)適編譯(DAC)提供化lel,而龍芯平臺Dalvik虛擬機(jī)調(diào)用c/C++方法的模塊是依靠FFI庫實(shí)現(xiàn)的。所以龍芯平臺Dalvik虛擬機(jī)還有著較大的性能提升空間,這也是后續(xù)階段面臨解決的問題。

  6結(jié)束語

  本文的主要工作旨在基于龍芯2F平臺,根據(jù)處理器的架構(gòu)特點(diǎn),在充分利用龍芯平臺架構(gòu)的基礎(chǔ)上,對Android源碼進(jìn)行了優(yōu)化修改,實(shí)現(xiàn)嵌入式操作系統(tǒng)Android Gingerbread的移植。本文的創(chuàng)新點(diǎn)就是在于填補(bǔ)了龍芯處理器平臺對嵌入式操作系統(tǒng)Android支持的空白,并對其他版本Android操作系統(tǒng)在面向龍芯平臺的移植方面提供了參考與應(yīng)用。

  雖然目前Android Gingerbread在龍芯平臺上運(yùn)行的效果在速度方面還未達(dá)到應(yīng)用產(chǎn)品的水平,但相信隨著龍芯后續(xù)高性能處理器的推出,Android在龍芯上的產(chǎn)業(yè)化指日可待。

  研究得到中國科學(xué)院近代物理研究所超算中心的大力支持,在此表示感謝。

關(guān)鍵詞:面向龍芯平臺的Android系統(tǒng)移植研究龍芯平臺Android系統(tǒng)移植研究

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(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)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!