Android學習開始, Android的系統結構

1. 系統結構圖

借用一下HAL層的圖,


2. 系統結構分層

2.1 Linux Kernel內核

Android基於Linux2.6提供內核服務。Android對操作系統的使用包括核心和驅動程序兩部分。主要驅動有:Display, Frame Buffer, Flash, Camera, Video, Audio, Wifi, Keyboard,Bluetooth, Power…

2.2 HAL硬件抽象層

HAL層是指硬件抽象層(Hardware Abstraction Layer)。用於解決LINUX的GPL規則和Android遵循的APACHE規則衝突的問題。GPL要求開源而APACHE不要求開源,HAL層可以解決硬件生產廠商的知識產權問題,他們可以只提供二進制代碼。

所以,ANDROID是開放,而不開源。

我們寫一個自定義設備的HAL層。

/*定義模塊ID*/

#defineXXX_HARDWARE_MODULE_ID "XXX"



/*硬件模塊結構體*/

//見hardware.h中的hw_module_t定義的說明,xxx_module_t的第一個成員必須是hw_module_t類型,其次纔是模塊的一此相關信息,當然也可以不定義,

//這裏就沒有定義模塊相關信息

structxxx_module_t {

struct hw_module_t common;

};



/*硬件接口結構體*/

//見hardware.h中的hw_device_t的說明,要求自定義xxx_device_t的第一個成員必須是hw_device_t類型,其次纔是其它的一些接口信息.

structxxx_device_t {

struct hw_device_t common;

//以下成員是HAL對上層提供的接口或一些屬性

int fd;

int (*set_val)(struct xxx_device_t* dev,int val);

int (*get_val)(struct xxx_device_t* dev,int* val);

};



/*模塊實例變量*/

structxxx_module_t HAL_MODULE_INFO_SYM = { //變量名必須爲HAL_MODULE_INFO_SYM,這是強制要求的,你要寫Android的HAL就得遵循這個遊戲規則,

//見hardware.h中的hw_module_t的類型信息說明.

common: {

tag: HARDWARE_MODULE_TAG,

version_major: 1,

version_minor: 0,

id: XXX_HARDWARE_MODULE_ID, //頭文件中有定義

name: MODULE_NAME,

author: MODULE_AUTHOR,

methods: &xxx_module_methods, //模塊方法列表,在本地定義

}

};


2.3 Android Runtime 運行環境

這是一個核心庫的集合,爲JAVA編程提供核心類庫。每一個應用程序都是Dalvik中的實例,運行在自己的進程中。

Dalvik虛擬機可執行程序格式是.dex,此格式專爲Dalvik設計。適合內存和處理器速度有限的嵌入式系統。

dx是一套工具,可將java.class轉換成爲.dex格式,一個dex文件包含多個class文件。dex文件爲了達到最佳化,會增大1~4倍,以ODEX結尾。

2.4 Libraries 本地庫

是一個C/C++庫的集合,這些功能通過Application Framework暴露給應用程序。主要有系統C庫,媒體庫,界面管理,3D,FreeType,SQLite,圖形庫等。

2.5 Application Framework 應用程序框架

在簡化組件的重用,所有的應用程序其實是一組服務和系統。包括Activity Manager等。

2.6 應用程序

如電子郵件客戶端,聯繫人等。所有應用程序都是使用JAVA語言編寫的。

發佈了18 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章