1. 程式人生 > >第一篇 Android 驅動開發之簡單概述

第一篇 Android 驅動開發之簡單概述

1.Android裝置設計之七層結構:

第一層:HardWare  =  硬體層。

第二層:Bootloader  =  引導層。

主要包含:初始化時鐘,記憶體等;以便引導linux核心。

第三層:Linux Kernel  =  Linux核心驅動層。

主要包含:外設驅動;記憶體管理;程序管理;電源管理;其實這些都是linux kernel 具有的功能。

第四層:HAL  =  Hardware Abstraction Layer  -  硬體抽象層。

主要包含linux的動態連結庫*.so;以及嵌入到APK的NDK程式碼。

第五層:Library and Runtime  =  系統執行庫層

第六層:Application FrameWork layer  =  應用框架層

主要是直接面嚮應用程式的Java APK。

第七層:Application  =  應用層

所謂的各種APP,包括:拍照,電話,簡訊,android桌面,瀏覽器,以及各種遊戲。

2.對於和Android 移植相關的工作崗位分類:

(1)android應用移植:由於應用程式在不同的硬體平臺之間是有差異的,android SDK API 也有可能有差異(因為有的平臺廠商會修改原生android SDK API)

(2)android系統移植:主要針對上面的第二層部分內容,因為android的底層其實就是linux系統,而linux系統可以移植到很多硬體平臺(ARM,X86,PowerPC),主要的工作還是要保證最小系統可以在特定的平臺上可以跑起來,同時還要保證各種外圍裝置能夠正常工作,例如(LCD,TP,camera,BT,WLAN,GPS等等)

PS:android系統移植外設驅動的時候,如果外設廠家提供驅動程式碼的話,開發難度很小;如果廠家不提供參考程式碼的話,需要自己根據系統驅動框架編寫裝置驅動,這樣的話,難度還是相當大的,尤其是一些複雜的外設。

3.什麼是HAL層,為什麼會有HAL層?

HAL層的中文名稱叫,硬體抽象層。

存在形式:HAL層的程式碼一般有C或C++的形式存在,最終編譯生成*.so,一種linux動態連結庫檔案。

那麼為什麼會有HAL層呢?有什麼好處呢?

首先說一下HAL的作用,它處在linux驅動核心層和Android Framework層之間,起著承上啟下的作用。

如果沒有他,Android SDK會直接和linux 驅動核心直接溝通;這樣很不好,不符合很多人的利益,因為各種外設驅動屬於linux,而linux又是遵循GPL開源協議,這樣的話,驅動程式碼也要開源,但是這些驅動是很多外圍裝置廠家辛辛苦苦開發的,不願意這樣白白的開發給所有人,包括很多競爭對手;

那怎麼辦?由HAL層來解決這個困難,HAL其實就是把原來驅動的控制邏輯一部分獨立出來,編譯生成SO檔案,這部分程式碼不遵循GPL協議,不需要開源,保證了外設廠家的利益,同時也不影響linux的框架設計。

4.檢視linux核心版本的命令:

(1)裝置啟動後,等待adb口 的出現

(2)adb root

(3)adb shell uname -a   該命令不行,可以使用   adb shell cat /proc/version

5.搭建開發環境

(1)搭建軟體開發環境,構建linux虛擬機器(後面詳細介紹)

(2)搭建硬體開發環境,開發板;不一定非要使用網上推薦的SC2440等開發板,只要是一個嵌入式裝置都可以,手機或者pad等,只要你有相關的裝置資料就可以。

驅動開發的最大的魅力就是軟硬結合,沒有硬體裝置,無從談起驅動開發;也是限制驅動學習的門檻之一。

6.要想學習Android驅動都需要哪些方面知識:

(1)硬體知識:電子通訊方面的內容;主要是能看懂電路原理圖基本就可以了。

(2)linux作業系統相關知識:包括linux虛擬機器使用,linux基本常用命令。

(3)基本指令碼知識:shell指令碼,簡單Makefile。

(4)瞭解編譯系統:編譯工具的選擇,系統的配置過程,編譯過程 -> 一般新專案開始搭建的時候會用到。

(5)核心內容,linux 系統驅動的各種框架,各種機制。

(6)個人認為,android系統的啟動流程非常關鍵,有利於建立整個系統的巨集觀概念,不需要詳細深挖,但要知道大概的流程。

(7)android 核心系統機制,應該是linux系統程式設計和網路程式設計的揉合。

7.閒話android

(1)開放性,android幾乎所有原始碼都是可以免費下載的。遵循Apache開源協議。

(2)強大的SDK,Software Development Kit 軟體開發套件 實現作業系統和開發者之間的介面。

android通過總結應用開發規律,提供Activity,Service,Broadcast Receiver以及Content Provide四大元件。

(3)不斷改進UI,新版UI更加人性化,對於使用者是最直觀的藝術盛宴。

(4)逐步完善的生態系統

(5)陣營良莠不齊

(6)系統執行效率有待改善

據不完全統計,android的啟動過程花費的平均時間超過了1分鐘,甚至有的達到了5分鐘以上。

(7)相容性問題

8.參考文件:

(1)Android 深度探索(卷I)HAL與驅動開發 - 李寧

(2)深入理解Android核心設計思想 - 林學森

(3)深入理解Android(卷I)- 鄧凡平