Android系統的移植的主要目的是為了能在特定的硬體上運行Android系統。而在移植的過程中,一個重要的方面就是把握關鍵要點,減少工作量。從工作的角度,首先要熟悉硬體抽象層的介面,其次要整合和複用已有的驅動程式,主要的工作量在硬體抽象層的實現中。為了更好地理解和調試系統,也應該適當地瞭解上層對硬體抽象層的調用情況。
移植方面主要的工作有兩個部分:
Linux驅動
Android系統硬體抽象層
Linux中的驅動工作在核心空間,Android系統硬體抽象層工作在使用者空間,有了這兩個部分的結合,就可以讓龐大的Android系統運行在特定的硬體平台上。
Android移植的主要工作1所示。
圖1 Android移植的主要工作
在具有了特定的硬體系統之後,通常在Linux中需要實現其驅動程式,這些驅動程式通常是Linux的標準驅動程式,在Android平台和其他Linux平台基本上是相同的。主要的實現方面是Android系統中的硬體抽象層(HardwareAbstract Layer),硬體抽象層對下調用Linux中的驅動程式,對上提供介面,以供Android系統的其他部分(通常為Android本地架構層)調用。
提示:Android硬體抽象層的介面是本地移植層的介面,不屬於標準API,不具有向前或者向後相容性。
在Android系統需要移植的內容,主要包含了以下的各個部分:
顯示部分(Display)
包括framebuffer驅動+Gralloc模組(可選擇是否實現)
使用者輸入部分(Input)
包括Event驅動+EventHub(Android標準內容)
多媒體編解碼(Codec)
包括硬體Codec驅動+Codec外掛程式(如OpenMax)
3D加速器部分(3D Accelerator)
包括硬體OpenGL驅動+OpenGL外掛程式
音頻部分(Audio)
包括Audio驅動+Audio硬體抽象層
視頻輸出部分(Video Out)
包括視頻顯示驅動+Overlay硬體抽象層
網路攝影機部分(Camera)
包括Camera驅動(通常是v4l2)+Camera硬體抽象層
電話部分(Phone)
Modem驅動程式+RIL庫
全球定位系統部分(GPS)
包括GPS驅動(通常為串口)+GPS硬體抽象層
無線區域網路部分(WIFI)
包括Wlan驅動和協議+WIFI的適配層(Android標準內容)
藍芽部分(Blue Tooth)
包括BT驅動和協議+BT的適配層(Android標準內容)
感應器部分(Sensor)
包括Sensor驅動+Sensor硬體抽象層
震動器部分(Vibrator)
包括Vibrator驅動+Vibrator硬體抽象層(Android標準內容)
背光部分(Light)
包括Light驅動+ Light硬體抽象層
警告器部分(Alarm)
包括Alarm驅動和RTC系統+使用者空間調用(Android標準內容)
電池部分(Battery)
包括電池部分驅動+電池的硬體抽象層(Android標準內容)
Android中具有很多組件,但並不是每一個組件都需要移植,對於一些純軟的組件,就沒有移植的必要。對於一些組件,例如瀏覽器引擎,雖然需要下層網路的支援,但是並非直接為其移植網路介面,而是通過無線區域網路或者電話系統資料連線來完成標準的網路介面。
Android的移植主要可以分成幾個類型:基本圖形化使用者介面(GUI)部分,包括顯示部分和使用者輸入部分;和硬體相關的加速部分,包括媒體編解碼和OpenGL;音視頻輸入輸出環節,包括音頻,視頻輸出和網路攝影機部分;串連部分,包括無線區域網路,藍芽,GPS;電話部分;附屬組件:包括感應器、背光、震動器等。
除了以上的移植方面,電源管理也是非常重要的一個方面,它和Android的各個子系統都有關係。
Android系統主要需要移植組件2所示。
圖2 Android系統主要需要移植組件
對於大部分子系統,硬體抽象層和驅動程式都需要根據實際系統的情況實現,例如:感應器部分、音頻部分、視頻部分、網路攝影機部分、電話部分。也有一些子系統,硬體抽象層是標準的,只需要實現Linux核心中的驅動程式即可,例如:輸入部分、震動器部分、無線區域網路部分、藍芽部分等。對於有標準的硬體抽象層的系統,有的時候通常也需要做一些配置工作。
時至今日,隨著Android系統的發展,它已經不僅僅是一個行動裝置的平台,也可以用於消費類電子和智能家電,例如:迷你筆記型電腦、電子書、數字電視、機頂盒、固定電話等。在這些平台上,通常需要實現比行動裝置更少的組件。一般來說,基本使用者介面部分(包括顯示和使用者輸入)是需要移植的,其他部分是可選的。例如:電話系統、震動器、背光、感應器等一般不需要在非行動裝置系統來實現;對於一些固定位置裝置通常也不需要實現GPS系統。