Android板级支持与硬件相关子系统
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第3章Android的Linux内核和驱动

3.1 Android的Linux内核概述

↘3.1.1 几个内核工程

Android系统的Linux内核与硬件平台相关,每个硬件平台具有各自独立的代码仓库。每个代码仓库的Linux内核主要不同的地方是板级移植和驱动程序,并且会随着Linux内核的版本升级,各个平台的内核从Linux2.6.x到Linux3.x都有,除了遵循Linux内核中的不同版本的架构,它们的差别并不大,如表3-1所示。

表3-1 不同硬件平台的Android内核

提示:无论上层的代码的情况如何,各个硬件平台的Linux代码均为开源。

↘3.1.2 内核工程的编译工具链

Android内核需要使用特定的交叉编译工具进行编译,编译内核的工具链不一定和编译Android系统的工具链相同。Android源代码中工具链的路径为:prebuilt/linux-x86/toolchain/,其中包括几个子目录。

·arm-eabi-4.3.1、arm-eabi-4.4.0、arm-eabi-4.4.3等:ARM体系的交叉工具链。

·i686-linux-glibc2.7-4.4.3和i686-unknown-linux-gnu-4.2.1:x86的工具链。

·sh-4.3.3:SH处理器交叉的工具链。

↘3.1.3 用户空间关注的内容

各个硬件平台的Linux内核部分有差异,区别主要体现在硬件的驱动和相关的信息中。

在运行中,设备节点的目录是/dev/目录和其子目录中的内容,除了标准Linux和Android的通用驱动,其他的内容一般为具体硬件的设备节点,例如,/dev/graphics/fb0表示显示驱动(Android的特殊设备节点路径),/dev/input/目录中为各个输入设备的驱动。

sys文件系统中的硬件相关部分的内容也是BSP部分的重要的信息。

·/sys/devices/platform/:对应的各个内容是各个平台设备(platform_device),通常在板级别内容中定义,/sys/bus/platform/devices目录中的各个内容是到它们的连接。

·/sys/bus/platform/drivers/:对应的各个内容是各个平台驱动(platform_driver),通常在各个驱动程序的实现中定义。

Android系统的处理器大多为SOC,其中包括了若干个总线,在sys文件系统中也具有相关的信息。例如,对于I2C总线相关的内容具有以下目录。

·/sys/bus/i2c/devices/:表示I2C总线上的设备。

·/sys/bus/platform/drivers/:表示I2C总线上的相关驱动。

·/sys/devices/i2c-<>/:表示I2C的某个适配器中的设备。