第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的某个适配器中的设备。