android系統移植(一) 總述

jopen 12年前發布 | 33K 次閱讀 Android開發 移動開發 Android

一、先說明一下平臺要求

平臺硬件要求

?RAM: 512MB
?FLASH:256MB
?CPU:
   ARM平臺指令集要求
   ARM9 Family以上,ARMv5以上指令集,
   mips平臺指令集要求
   MIPS32 revision 2 - Little-Endian, O32
</div>
軟件需求
?Linux2.6以上版本,目前froyo(v2.2)對應于linux2.6.32 - linux2.6.35版本,最好是使用android官方網可以下載到的代碼【目前linux2.6.23官方網下不了,最低也是linux2.6.25】
?Android源碼
</div>
每個android版本對應不同的linux版本

android 2.1 ----- linux 2.6.29
android 2.2 ----- linux 2.6.32
android 2.3 ----- linux 2.6.35

 

二、移植主要四大模塊

?1、bootload運行起來,無論使用u-boot還是fastboot,主要是關于flash分區問題
?2、linux kernel 主要涉及到android driver層驅動代碼
?3、android 系統移植
?4、應用程序移植
【后面則詳細講解各個模塊的移植過程】
</div>
1、Bootload
?一般使用u-boot或者fastboot,主要的工作就是flash分區問題,一般劃分為如下幾個分區:
1、fastboot      【快速啟動,裸板啟動區】
2、recovery     【系統恢復分區】
      recovery就好比外套,fastboot就好比內褲
3、kernel         【linux內核分區】
4、system       【android核心系統分區】
5、userdata    【用戶數據分區】
6、factorydata【工廠數據分區】
</div>
2、linux kernel 移植
由于android系統對于linux kernel的限制,首先是要選定合
適的kernel版本,然后剩下的工作就是整個一個全新的kernel代碼,系統移植有三份kernel代碼需要集成
?1、機頂盒廠商提供的linux源碼,包含有針對平臺的驅動代碼及修改
?2、項目主頁下載的linux源碼,與廠商的版本可能有所不同
?3、增加了android linux driver的源碼,這部分已經從linux kernel中分離開來,需要單獨移植
  所以首要的問題是將三份統一到一起,目標是支持
  廠商驅動,支持android驅動以及更新到一定
  linux內核版本(android driver +sdk driver + linux kernel )
  這部分工作需要深入到linux kernel driver層代碼,一定的
  技術功底+細心
</div>
</div>
Kernel移植要點
?1、盡可能將硬件平臺相關的代碼從舊版移植到新版本
?2、針對硬件平臺相關的代碼,以舊版本為主,畢竟舊版的是可以正常運行的版本,
?3、非硬件平臺相關代碼盡量使用新版本
?4、若遇到不知如何處理問題,先跳過,記錄下該文件及修改點,這部分需要多參考部份原碼進行移植
?5、對于配置.config文件,需要根據相關功能進行修改及配置,可以從模擬器上拿到config.gz文件解開即可
?6、編譯及測式,采用nfs掛載根文件系統,一般遇到kernel panic錯誤時,打開kernel debug,printk加打印,或者disable此功能進行調試
</div>
</div>
3、android啟動步驟
Android從Linux系統啟動有4個步驟;
1、 init進程啟動 (system\core\init\中的main函數)
    init進程,它是一個由內核啟動的用戶級進程。內核自行啟動(已經被載入內存,開始運行,并已初始化所有的設備驅動程序和數據結構等)之后,就通過啟動一個用戶級程序init的方式,完成引導進程,此后android將接管所有工作,這里涉及到兩個腳本文件:init.rc 及 init.xxx.rc【arch】
2、 Native服務啟動
    Servicemanager和zygote進程就奠定了Android的基礎。Zygote這個進程起來才會建立起真正的Android運行空間,主要是Zytote創建JAVA 虛擬機,裝載classes等
   【受精卵,典型的C/S結構,請求生產,fork子進程,ok,出產品完成】
</div>
3、 System Server服務循環框架
    Android服務啟動不停的通過Zygote fork新的進程,并建立了一大堆服務,并add Service到service Manager,Android的所有服務循環框架都是建立SystemServer@(SystemServer.java)上
4、 Home啟動
   啟動完所有的Android服務后,然后啟動第一個home應用程序,即第一個啟動HomeActivity 應用程序
</div> </div>

4、應用程序移植
?不同的android版本差異性
?不同的sdk api函數差異性
?只要搞定以上兩點就可以寫出完全移植于不同平臺的應用程序 【*.apk 應用程序】
</div> </div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!