具体描述
打通Android的任督二脈,幫助Android開發者了解Android各種底層的子系統和如何移植各種Android開發板,並學習最夯的NFC(近距離通訊)系統。
Android在硬體方面的開發一直是開發的難點,凡是一個完整Android裝置的開發者,無論處於產業鏈的哪一個階段,都不可避免地要處理與硬體相關的問題。我們可以將Android系統視為一個功能完整的機器人。其中與硬體相關的BSP(Board Support Package)部分,則是這個機器人的根基和經脈,雖然佔的比重不大,卻是系統的關鍵所在。
本書可幫助開發者了解如何移植各種Android開發板,並提供切實有效的幫助。透過對每一個子系統的學習,您可以了解現有Android系統的結構,並學會Android系統的設計思路,即使您想要在系統中增加一個新的非標準硬體,也不再是一件難事。
本書特色
用結構圖描述NFC、聲音、相機…等每一個相關子系統的結構,並區分BSP部分和公用部分。
徹底解說Android各種底層的子系統的總體結構和BSP結構,以及實作要點。
選用多個Google Nexus系列兼具流行性與代表性的硬體平台,對比其中不同的實作和相同的理念。
比較Android 2.3和Android 4.x的實作,展示硬體相關部分的升級。
對龐大的系統去掉枝節,展示Android一些原始的核心設計思路。
作者简介
韓超
中國大陸地區Linux和行動裝置領域的資深工程師、架構師。長期從事一線開發工作,兼具開發實戰經驗和完備的教育思維模式。韓超是中國大陸地區較早開發Android系統的人員,曾從事系統框架、蕊片移植適配和行動產品等開發領域;也曾經引領各種技術人員進入Android領域,並組織參與技術交流。
目录信息
說明Android系統,如何基於Android的開放原始碼,加入針對特定硬體的BSP部分,由此來建構各種系統,並可以運行在任何支援的硬體平台上。
第2章 Android系統BSP移植工作
說明Android BSP移植工作的目的,包含如何讓Android系統能啟動基本Linux系統(CPU、內部記憶體、定時器)及序列埠、RAM等基本裝置。
第3章 Android的Linux核心和驅動程式
Android系統的Linux核心與硬體平台相關,每個硬體平台具有各自獨立的程式碼儲存庫。每個程式碼儲存庫的Linux核心主要不同的地方是目標板移植和驅動程式部分,並且會隨著Linux核心的版本升級。本章將以Goldfish平台、高通MSM平台、三星平台、德州儀器OMAP平台為例做核心和驅動程式的介紹。
第4章 顯示系統
顯示系統是系統與使用者交互介面部分最基本的功能,其功能是將矩陣形式圖形資料顯示到使用者可見螢幕上。本章將協助使用者熟悉Android的顯示子系統結構、顯示BSP的結構,以及顯示BSP的實作。
第5章 使用者輸入系統
Android的使用者輸入系統的職責是取得使用者行為,主要功能是取得使用者使用輸入裝置進行操作的資訊,並將其交由系統的相關部分進行處理。本章將協助使用者熟悉輸入系統BSP的結構和實作。
第6章 傳感器系統
Android的傳感器系統是系統取得資訊的手段,從各種不同類型的傳感器硬體中取得,並交由Android系統的相關部分進行處理。本章將協助使用者熟悉傳感器子系統的結構以及傳感器BSP的結構和實作。
第7章 聲音系統
Android的聲音系統提供聲音系統對聲音硬體的裝置進行操作,其主要功能是聲音資料的輸入/輸出和控制功能。本章將協助使用者熟悉聲音子系統的結構以及聲音BSP的結構和實作。
第8章 影像疊加輸出系統
Android的影像疊加輸出系統提供影像畫面資料的輸出功能,並利用特殊的影像輸出裝置將影像資料數據單獨進行輸出。本章將協助使用者熟悉影像輸出子系統的結構以及影像疊加輸出BSP結構和實作。
第9章 相機系統
Android的相機系統提供照相機相關的功能。相機系統的硬體裝置就是鏡頭硬體,為系統提供影片畫面的輸入和拍攝照片的功能。本章將協助使用者相機子系統的結構以及相機BSP結構和實作。
第10章 OpenGL 3D引擎
OpenGL(Open Graphics Library)是一個標準化的圖形渲染(Render)引擎,在Android中使用標準的OpenGL介面作為3D部分的介面。本章將會介紹OpenGL系統的結構以及OpenGL BSP的結構和在各硬體平台上的實作。
第11章 OpenMax引擎
OpenMax是一個多媒體應用程式的框架標準。其中,OpenMax IL(集成層)技術規格定義了媒體元件介面,以便在嵌入式元件的串流媒體框架中快速集成加速編解碼器。本章將會針對OpenMax引擎的子系統結構,以及OpenMax BSP的結構和實作做介紹。
第12章 位元複製
本章主要介紹位元複製。位元複製(copybit)是Android中一個提供了可以加速記憶體圖形處理的加速模組。主要包括區塊複製和圖像拉伸兩部分功能。根據其參數的不同,也可以實作旋轉、透明度混疊、顏色格式轉換等方面的功能。
第13章 無線網路系統
WiFi(Wireless Fidelity)使用了IEEE的802.11協定的技術,目前在智慧手機中使用WiFi已經成為智慧手機的核心功能之一。本章將會針對無線網路系統的子系統結構,以及BSP結構和實作提出說明。
第14章 藍牙系統
在Android中,藍牙系統的底層硬體是藍牙硬體,通常可以使用UART、SDIO或USB介面作為連接。本章將會針對藍牙子系統的結構,以及BSP的結構和實作提出說明。
第15章 定位系統
Android的定位系統具有完整架構,並採用不同的手段來定位。GPS(基於全球定位系統)屬於衛星導航系統,需要特定的硬體接收來自衛星的資料,Android的定位系統主要使用GPS裝置。AGPS的含義為Assisted GPS(輔助GPS),可以透過行動電話、IP網路等手段實現定位。本章將會針對定位子系統的結構,以及BSP的結構和實作提出說明。
第16章 電話系統
Android系統主要是作為智慧型手機的作業系統來使用,因此電話部分是Android的核心子系統之一。Android的電話系統圍繞底層使用的Modem硬體來搭建。Android主要提供呼叫(Calling)、簡訊(SMS)等業務,此外透過電話系統還可以實現資料連接(Data Connection),實現網路功能。本章將會針對電話子系統的結構,以及BSP的結構和實作提出說明。
第17章 警報器 — 即時時鐘系統
Android的警報器(Alarm)系統提供了警報和時間設定方面的支援,其實作的硬體基礎通常是即時時鐘(RTC)。在Linux核心程式碼中,需要有即時時鐘裝置驅動程式和Android的Alarm驅動程式。本章將會針對警報器 — 即時時鐘子系統的結構,以及BSP部分的結構和部分的實作提出說明。
第18章 光系統
背光和指示燈系統部分在Android中歸為光系統統一實作。 Android的光系統負責控制系統中的各個光源,例如螢幕背光、鍵盤按鍵光、電池光等。光系統基本上是一個用於輸出控制的系統。本章將會針對背光和指示燈子系統的結構,以及BSP部分的結構和部分的實作提出說明。
第19章 震動器系統
震動器負責控制電話來電時的振動功能,Android中的震動器系統是一個專提供這方面功能的小系統,提供根據時間振動的功能。本章將會針對震動器子系統的結構,以及振動器BSP部分的結構和部分的實作提出說明。
第20章 電池訊息部分
Android系統考慮了多種供電方式,包括AC、USB、Battery等。在應用程式層次,通常包括了電池狀態顯示的功能。因此,從Android系統的軟體方面(包括驅動程式和使用者空間內容),需要在一定程度上獲得電池的狀態。在Android系統中,電池系統主要負責電池訊息統計方面的功能。本章將會針對電池訊息子系統的結構,以及電池訊息的BSP部分的結構和部分的實作提出說明。
第21章 Android 4.x的聲音、影像系統
Android 4.x的聲音系統、相機系統在硬體抽象層之下皆產生了一些變化,由原本固定鏈接的動態函式庫,變成了Android中固定的硬體模組,本章將會針對Android 4.x的聲音系統、相機系統、影像組合的結構以及這些系統的BSP實作提出說明。
第22章 Android 4.x近距離通訊系統(NFC)
近距離通訊(NFC,Near Field Communication)也稱為近距離無線通訊,是一種短距離的高頻無線通訊技術,允許電子裝置之間進行非接觸式點對點資料傳輸,在10cm內交換資料。而這也是目前蠻夯的議題之一,可惜目前市面上的Android書籍中鮮少對這個部份有所說明,希望這章所提供的內容,能幫助讀者更進一步的了解NFC。
第23章 Android 4.2的電源控制
電源控制是Android 4.2增加的一個輔助功能的模組,可以對電源控制進行一部分干涉和控制。本章將會針對電源控制的結構以及電源控制BSP的結構和實作提出說明。
第24章 系統時間
系統時間是Android 4.2新增的一個輔助功能的硬體抽象層模組,用於得到系統的時間和頻率。本章將會針對系統時間的結構以及系統時間的BSP的結構和實作提出說明。
第25章 Android 4.2金鑰
金鑰是Android 4.2新增的一個硬體抽象層模組,用於支援Android安全系統的運行。金鑰部分本身包括了產生金鑰對(公鑰和私鑰)、使用金鑰簽名資料、使用金鑰驗證資料等功能。本章將會針對安全和金鑰子系統的結構以及金鑰的BSP部分的結構和實作提出說明。
第26章 電源管理
Android的電源管理結合了Linux核心和使用者空間控制。主要包括了核心中的核心機制和使用者空間規則方面的控制。本章將會幫助讀者了解Android在核心空間以及使用者空間的電源管理以及電源管理的相關規則。
第27章 還原和升級
還原(Recovery)和升級(Update)是系統改變自身軟體的手段:還原通常是指將系統的軟體還原到某個出廠的版本;升級是指將系統的軟體改變成某個比較新的版本,其中可能包括增量的升級。Android系統的還原和升級在軟體上使用了相似的結構和流程,並且在實作上統稱為Recovery。而這將會是本章介紹的重點。
· · · · · · (收起)
读后感
用户评价
这本书的结构安排极其严谨,完全按照一个完整的系统移植流程来组织内容,这对于那些需要从零开始建立起整个开发思维框架的人来说,提供了极佳的路线图。它并没有将重点放在如何使用某个特定的工具链或者第三方库上,而是着力于解释为什么这些工具链和库是按照当前这种方式设计的。例如,在讲述如何适配新的硬件平台时,书中花了大量的篇幅来讲解模块间的依赖关系和初始化顺序的“艺术”,这远超出了我过去接触的任何一本入门书籍。我甚至觉得,这本书与其说是一本“开发指南”,不如说是一本“底层系统设计哲学”的解读。它教会了你如何“思考”一个系统是如何启动和运行的,而不是简单地告诉你“复制粘贴”哪几行代码就能搞定。这种高屋建瓴的视角,虽然在初期学习阶段让人倍感压力,但一旦理解了其中的逻辑链条,再去看任何新的Android BSP文档都会变得豁然开朗,仿佛突然掌握了一把开启所有谜团的万能钥匙。
我对这本书的阅读体验可以说是“痛并快乐着”。它最大的特点在于其深入骨髓的细节阐述,尤其是在处理跨平台兼容性问题时,作者展现了惊人的广度和深度。我印象最深的是关于电源管理模块(PMIC)调试的那一部分,书中详细剖析了Android框架层如何与硬件寄存器进行交互,其中穿插了大量的汇编级代码片段和时序图的描述。这部分内容对于那些在实际工作中遇到疑难杂症,怀疑是不是底层驱动卡住的应用开发者来说,无疑是一剂强效药。然而,正是这种追求极致深度的写作风格,让这本书的阅读门槛大大提高。它要求读者不仅要理解“是什么”,更要明白“为什么是这样设计”,甚至要追溯到芯片手册的特定章节去印证书中的论述。我不得不承认,有好几章的内容我只能先跳过,等待自己积累了更多关于ARM架构和Linux内核I/O子系统的知识后再来啃。这本书不是那种可以让你轻松放在咖啡桌上消磨时间的读物,它需要你全神贯注,最好是手边还开着一个Linux终端和对应的硬件开发板,否则很容易在复杂的流程图和代码注释中迷失方向。
这本书的语言风格非常“技术化”,几乎没有使用任何比喻或者类比来简化复杂的概念,这一点对于某些读者来说可能是优点,但对我这样的非科班出身的工程师来说,却是一个不小的挑战。作者似乎极其珍视每一个字符的位置,力求用最精炼的语言表达最复杂的逻辑,导致阅读过程中的流畅性大大降低。很多时候,我需要反复阅读同一段话三四遍,才能完全捕捉到其中隐藏的细微差别,特别是当涉及到内存屏障或者并发控制的描述时,那种严谨到近乎苛刻的表达方式,让人在阅读时感到一种莫名的严肃性。我期望的或许是能多一些“踩坑记录”或者“避坑建议”,但这本书更多的是在展示“正确”的构建路径。它更像是一本标准的规范文档,而非一本教学手册,它告诉你标准是什么,以及如何一步步达到这个标准,但对于“如果偏离了标准会发生什么”的探讨相对较少,使得学习过程中的容错空间显得很小。
这本书的书名听起来很专业,我作为一个对底层开发充满好奇心的初学者,抱着既期待又忐忑的心情翻开了它。老实说,初看目录,我就被那些密密麻麻的专业术语给震慑住了,什么“内核编译”、“设备树”、“驱动框架”之类的,感觉自己像是误闯进了高科技实验室。我原本以为它会像很多市面上流行的教程那样,用轻松愉快的语气,一步步带着我们搭积木似的完成一个功能,结果呢,这本书直接把我扔进了“实战”的深水区。它似乎默认读者已经对Linux内核有一定的了解,并且熟练掌握了C语言的高级特性。当我试图去理解那些关于内存管理和中断处理的章节时,我发现自己不得不频繁地停下来,去查阅其他更基础的参考资料。这种感觉就像是想学开车,结果直接被扔到赛车场上,虽然刺激,但真的让人手足无措。这本书的讲解方式更像是一位经验丰富的工程师在复盘他的项目,逻辑严密,信息密度极高,每一个技术点的背后都隐藏着大量的背景知识和权衡考量。对于那种想“快点看到结果”的读者来说,这本书可能会显得有些枯燥和晦涩,它没有提供太多花哨的图示或者快速上手的“秘籍”,而是扎扎实实地铺陈着构建一个完整系统的理论基石。
从整体上看,这本书的价值主要体现在其对“系统”二字的深刻剖析上,它将Android这个庞大而复杂的生态系统,层层剥茧地还原成了最基础的硬件与软件交互逻辑。我欣赏它在追溯驱动程序与内核模块交互细节时的那种毫不妥协的态度,它不回避任何技术上的难点,而是直接将其呈现在读者面前,迫使读者去直面核心问题。这本书的知识密度高到令人发指,每一页都充满了需要反复推敲的细节。它绝对不是那种适合在通勤路上翻阅的书籍,它需要一个安静的环境、充足的时间,以及一个愿意深入钻研技术本质的心态。对于那些希望在Android底层领域深耕,并且不满足于仅仅停留在应用层调用的资深工程师或研究人员来说,这本书无疑是一份厚重的参考资料,它为你提供了从“使用者”蜕变为“构建者”所需的知识深度和思维模型,尽管这个蜕变过程会异常艰辛。
很好的技术书,细致详尽有条理。大陆作者的安卓开发书被台湾引进,我又是在香港图书馆看到的。开始还以为是从欧美日翻译过来的,仔细一看作者才发现奥妙。不如直接看简中版,更有效率。但貌似简中版并不出名。可能板级支持台湾做得更多吧。以前干过一阵,现在虽然没有需求,但多看看对于了解系统底层的详情比较有帮助。
很好的技术书,细致详尽有条理。大陆作者的安卓开发书被台湾引进,我又是在香港图书馆看到的。开始还以为是从欧美日翻译过来的,仔细一看作者才发现奥妙。不如直接看简中版,更有效率。但貌似简中版并不出名。可能板级支持台湾做得更多吧。以前干过一阵,现在虽然没有需求,但多看看对于了解系统底层的详情比较有帮助。
很好的技术书,细致详尽有条理。大陆作者的安卓开发书被台湾引进,我又是在香港图书馆看到的。开始还以为是从欧美日翻译过来的,仔细一看作者才发现奥妙。不如直接看简中版,更有效率。但貌似简中版并不出名。可能板级支持台湾做得更多吧。以前干过一阵,现在虽然没有需求,但多看看对于了解系统底层的详情比较有帮助。
很好的技术书,细致详尽有条理。大陆作者的安卓开发书被台湾引进,我又是在香港图书馆看到的。开始还以为是从欧美日翻译过来的,仔细一看作者才发现奥妙。不如直接看简中版,更有效率。但貌似简中版并不出名。可能板级支持台湾做得更多吧。以前干过一阵,现在虽然没有需求,但多看看对于了解系统底层的详情比较有帮助。
很好的技术书,细致详尽有条理。大陆作者的安卓开发书被台湾引进,我又是在香港图书馆看到的。开始还以为是从欧美日翻译过来的,仔细一看作者才发现奥妙。不如直接看简中版,更有效率。但貌似简中版并不出名。可能板级支持台湾做得更多吧。以前干过一阵,现在虽然没有需求,但多看看对于了解系统底层的详情比较有帮助。