1.3 BSP模块和相关子系统

↘1.3.1 Android的BSP

1.主要工作

BSP的支持工作实际上是不同硬件的适配工作。Android系统的BSP部分的构建工作的核心也就是Android系统的硬件平台的移植工作。Android系统的移植工作的目的是为了在特定的硬件上运行Android系统。

BSP的本意是板级支持包,但对于Android系统,BSP部分并非以“包”的形式存在,而是一部分代码改动。Android系统的BSP部分其实分布于Android开源代码的不同路径中,有些BSP的支持工作甚至不是独立的文件。

BSP的构建主要有两个部分的工作:

·Linux内核中硬件相关部分(主要是各种硬件的驱动程序)。

·Android用户空间的硬件抽象层(HAL,Hardware Abstract Layer)。

Linux中的驱动工作在内核空间,Android系统硬件抽象层工作在用户空间,有了这两个部分的结合,就可以让庞大的Android系统运行在特定的硬件平台上。

在具有了特定的硬件系统之后,通常在Linux中需要实现其驱动程序,这些驱动程序通常是Linux的标准驱动程序,在Android平台和其他Linux平台基本上是相同的。主要的实现方面是Android系统中的硬件抽象层,硬件抽象层对下调用Linux中的驱动程序,对上提供接口,以供Android系统的其他部分(通常为Android本地框架层)调用。

Android的硬件抽象层的接口是本地移植层的接口,不属于系统标准化API,不具有向前或者向后兼容性。随着Android版本的演进,Android的硬件抽象层的接口结构也在发生变化。对于同一个硬件设备,为了适应不同版本的Android系统,其BSP部分通常需要做出修改甚至重写,此时设备驱动程序可以重用,硬件抽象层则需要重写。

2.Android的BSP主要内容

Android的BSP工作不是一项完整的工作,除了基本系统的支持之外,主要工作是基本平行的若干个部分。这些BSP部分基本独立,其中也存在少量交互,大部分内容都与硬件有关系。

Android源代码工程中具有很多子系统,但并不是每一个部件都需要做BSP的适配,需要BSP设备的部分通常是与原始硬件相关的部分。

移植需要的工作往往可以和实际的硬件产生对应关系,例如显示屏、键盘、喇叭、摄像头、蓝牙、无线局域网、GPS、加速度传感器等都是典型需要BSP支持的部分。

对于一些纯软件的部分,不需要BSP的特殊支持。例如数据库、算法、字体处理和XML解析显然和硬件无关,也不需要BSP的特殊支持。

对于一些中间层的部件,虽然与硬件有关,但本身是通用部分,也不需要BSP的特殊支持。例如网络协议栈、蓝牙协议栈、文件系统,它们虽然下层需要硬件,但是本身与硬件差异无关,在任何一个硬件平台都是相同的,不需要做特殊支持。

BSP的工作和核心应该是原始硬件的底层。例如蓝牙耳机、蓝牙传输文件、蓝牙聊天等程序最终依赖的硬件是蓝牙;照相机、摄像机、条形码识别等程序都依赖硬件,其底层对应的实际硬件显然都是摄像头部分;自动转屏、晃动屏幕控制的各种游戏,都同样依赖于加速度传感器。

↘1.3.2 BSP和硬件相关子系统

BSP部分虽然在实际的工作中通常只包括驱动程序和硬件抽象层,但是在构建BSP的过程中通常需要关注与硬件相关的子系统。可以说各个BSP部分是Android各个硬件相关子系统的下层。这些与硬件相关的子系统分成了几个方面。

1.基本系统部分

Android系统运行的基础是具有可运行的Linux内核和基本的文件系统,为了调试方便还需要具有串口或USB等。基本Linux的支持的实现部分主要是在内核空间中的工作,在用户空间的工作也有差别,但是主要在于简单的配置。

2.用户交互界面部分

用户交互界面是Android系统运行最直观的部分,包括显示和用户输入两个部分。显示部分是屏幕上呈现的内容,通常基于LCD等硬件和LCD控制器。用户输入部分则包括键盘、触摸屏、轨迹球、鼠标等设备。

3.多媒体输入/输出部分

多媒体的输入/输出部分包括了视频和音频两种,排列组合起来一共是4种情况。音频的输出和输入环节比较类似,作为独立的音频系统构建。视频的输入环节就是摄像头,负责从硬件中获取视频帧。视频的输出环节最终的硬件就是屏幕,但是为了性能优化,通常LCD控制器具有特殊功能实现视频的叠加层。

4.加速部分

加速部分通常由特殊的片内硬件模块完成该部分功能,目的是让系统获得更好的性能。加速部分通常是可选的,在没有的情况下由软件完成相应的功能。Android系统的加速部分包括OpenGL 3D加速环节、音视频的编解码部分、图像的编解码部分、图像的处理部分等。

5.电话部分

电话部分是移动电话系统的核心,包括电话、短信和数据连接功能。电话部分是一个组合的模块,由电话模块提供功能,电话模块的实现方式有多种。

6.连接部分

连接部分(Connectivity)通常指蓝牙、无线局域网(WiFi)和GPS定位系统等方面。蓝牙硬件对上层可以支持多种功能,无线局域网提供网络的功能,GPS则提供定位功能。近距离无线通信技术(Near Field Communication,NFC)也是连接部分的一种。

7.传感器部分

传感器包括了多种从外部获取信息的模块,包括加速度传感器、方向传感器、温度传感器等多种硬件。由于传感器在获取信息方面的共性,在Android中各种传感器被综合为BSP支持的一个方面。

8.其他部分

系统的一些附属部分也需要特定的BSP支持,例如,用于背光和指示灯的部分,手机振动器部分、电池信息部分、实时时钟部分等。

↘1.3.3 不同类型的Android设备

Android系统最初是为了支持移动设备(手机)而建立的。经过多年发展之后,Android已经不仅仅是一个移动设备的平台,也可以用于其他类型的设备,目前Android主要适用的设备包括移动电话(Mobile)、平板电脑(Tablet)、上网本(NetBook)、电视、机顶盒、汽车电子等。

在各种基于Android的设备中,通常移动电话需要做全部的BSP支持。其他类型的设备需要做出较少的BSP支持内容。例如,非电话类的设备通常不需要电话系统;电视、机顶盒等不需要振动器、传感器等部分;固定位置的设备则不需要实现GPS系统。BSP支持的多少取决于设备自身的用途。

各种Android设备也可以具有特有的硬件,这些特有的硬件在Android开源工程中没有对应的内容,为了支持它们,可以仿照Android原有的子系统及BSP部分的结构来自行实现。