開發者的需要
Android系統已經推出了將近5個年頭了,從1.0版本一直到本書寫作時的4.2版本。作為其載體的硬件也經過了多次升級。到今天,Android設備已經成為硬件的集大成者。硬件方面的開發一直是開發的難點,凡是一個完整Android設備的開發者,無論處于產業鏈的哪一個階段,都不可避免地要處理與硬件相關的問題。
Android的開發者通常面對幾個方面的難點:
Android系統的代碼龐大,難以把握硬件相關的調試思路。
不清楚軟件和硬件之間的直接關系。
對某個硬件平臺的知識和經驗不適用于其他硬件平臺。
Android系統的版本升級過程中,與硬件相關的部分常常發生重大變動。
另外一個客觀的情況是,目前一般處理器或者基本硬件平臺的BSP(Board Support Package,板級支持包)部分都是由芯片的廠商統一完成的,并且已經趨近于成熟。因此,開發者的主要工作不再是構建完整的BSP,而是調試和修改現有的BSP。
本書特色
本書的目的是要為開發者提供切實有效的幫助。針對開發者的現實情況,本書主要具有以下幾個特點:
用框圖描述每一個硬件相關子系統的結構,并區分BSP部分和公用部分。
選用多個流行的硬件平臺,對比其中不同的實現和相同的理念。
對比Android 2.3和Android 4.x的實現,展示硬件相關部分的升級。
對龐大的系統去耦合,展示Android一些原始的核心設計思路。
列出每一個部分相關的代碼路徑。
簡要列出代碼的關鍵部分。
根據實際經驗編寫,工程性強。
通過對每一個子系統的學習,讀者可以了解現有Android系統的結構,經過深入理解后,可以明白Android系統的設計思路。學習后,如果要在系統中增加一個新的非標準硬件,讀者也能比較容易地完成。
本書特別選定了Nexus One、Nexus S、Galaxy Nexus等幾款手機作為參考平臺。其中一個很大的優點就是以上幾個平臺都是Google認定的,具有典型性,并且它們從內核到Android系統的代碼都是開源的,讀者可以很容易獲得。雖然以上幾個硬件平臺不是最新的,但是根據嵌入式SOC的特點,高通的處理器都與Nexus One的QSD 8x處理器類似,三星的處理器都與Nexus S的Exynos處理器類似,德州儀器的處理器都與Galaxy Nexus 的OMAP處理器類似。因此,這樣的選擇既方便又具有廣泛的適應性,當讀者熟悉了這幾個硬件平臺后,置于Marvel、Freescale和NVidia等公司的平臺可以實現融會貫通。
Android系統可以被視為一個功能完備的機器人。其中與硬件相關的BSP部分,則是這個機器人的根基和經脈,雖然占的比重不大,卻是系統的關鍵所在。
本書的理念可以用下面的圖來表示。
本書內容
本書提供了系統化的Android系統的開發知識,以硬件相關的子系統為核心,主要包括以下幾個方面的內容:
硬件相關的子系統的特點。
幾個不同的硬件平臺的Linux內核結構。
每個子系統的總體結構和BSP結構。
每個子系統的BSP的實現要點。
具體硬件在Linux內核與Android硬件抽象層相關的實現。
人的知識和經驗本身是網狀結構,各部分相互關聯,錯綜復雜。但是作為出版的書籍,則必須將其串行成章節的形式,本書總體上是以橫向結構來進行組織的,大部分章節是針對每一個硬件相關子系統的描述,每一章的組織結構也比較類似。
本書讀者
本書適用于各類Android技術群體,也適用于嵌入式Linux的技術人員了解實際系統。作者對讀者有以下幾個方面的建議:
根據書中提供的知識和經驗,對照Android的源代碼,有相應的Android設備,這三者的結合是最理想的學習環境。
要首先理解宏觀結構,再研究細枝末節,硬件相關子系統的很多代碼并非在任何情況下都會適用,讀者需要了解其適用的場景。
BSP部分的開發偏重下層,讀者不要過于依賴界面,而要習慣查看系統日志,從Linux系統標準的設備和特殊文件系統中獲取信息,并使用各種命令行工具調試。
硬件抽象層的目的是為了適配各種硬件,很多程序的結構看似冗余,卻正是BSP設計的精華所在,這也是讀者需要關注的內容。
夯實Linux的基礎對Android開發也非常重要,對Android的BSP開發尤為重要。
在開發的過程中,可能用到很多不同的硬件平臺,要根據本書的思路掌握查看硬件信息和硬件相關代碼的方法。
本書作者
本書的規劃和統籌由中國大陸的韓超完成,韓超在Linux和Android領域具有豐富的一線開發經驗。本書內容來源于工作在不同領域的開發者多年的經驗。韓超完成了本書內容的主要部分,眾多不同規模的企業開發成果也為本書的編寫提供了重要的素材。參與本書編寫的還有崔海斌、于仕林、張宇、張超、趙家維、黃亮、沈楨、徐威特、楊鈺、馬若劼、曹道剛、梁泉等。