3.5 三星平台的内核和驱动

↘3.5.1 平台概述

三星(SAMSUNG)的平台处理器也在Android手机中有所使用。此处的三星平台一般专指三星处理器的平台,而不是三星公司所出的手机。

Exynos由两个希腊语单词组合而来:Exypnos和Prasinos,分别代表“智能”与“环保”之意。三星公司Cortex A8核心的处理器被称为Hummingbird(蜂鸟),它使用PowerVR VXD370作为视频硬件解码单元,PowerVR SGX540作为图形处理器,支持OPENGL ES2.0/1.1和OPENVG。S5PC110用于智能手机。就是Nexux S手机所使用的S5PC110处理器也被称为Exynos3110。

Exynos3110处理器和外围结构如图3-2所示。

图3-2 Exynos3110处理器和外围结构

Exynos3110使用的内核工程为kernel/samsung,使用git取得方法如下所示:

    $ git clone https://android.googlesource.com/kernel/samsung

三星herring平台可以进行如下选择和配置:

    $ git checkout origin/android-samsung-2.6.35-gingerbread
    $ make ARCH=arm herring_defconfig .config

使用arch/arm/configs/目录中的herring_defconfig作为其配置文件,也就是三星平台的Nexux S手机的配置文件。

Exynos内核工程实际上对应于Exynos4x和Exynos5x系列的处理器,使用git取得和选择方法如下所示:

    $ git clone https://android.googlesource.com/kernel/exynos
    $ git checkout origin/android-exynos-3.4

对Exynos4x和Exynos5x系列的处理器进行配置的方法分别如下所示:

    $ make ARCH=arm exynos4_defconfig .config
    $ make ARCH=arm exynos5_defconfig .config

↘3.5.2 体系结构移植

以三星herring平台为例,体系结构移植部分主要包括几个目录。

·arch/arm/plat-s5p/:平台共用部分,CPU、中断、定时器、电源管理。

·arch/arm/mach-s5pv210/:板级部分,mach-herring.c为移植核心文件。

·arch/arm/plat-samsung/:三星的全局设备。

mach-herring.c文件中的机器定义部分如下所示:

    MACHINE_START(HERRING, "herring")
      .phys_io       = S3C_PA_UART & 0xfff00000,
      .io_pg_offst   = (((u32)S3C_VA_UART) >> 18) & 0xfffc,
      .boot_params   = S5P_PA_SDRAM + 0x100,
      .fixup         = herring_fixup,
      .init_irq      = s5pv210_init_irq,
      .map_io        = herring_map_io,
      .init_machine  = herring_machine_init,
      .timer         = &s5p_systimer,
    MACHINE_END

以上是通过MACHINE_START宏所定义,针对一个ARM平台的通用的移植格式,其中定义了地址和中断,并由herring_machine_init()函数执行了主要初始化工作。

arch/arm/plat-s5p/目录中的hr-time-rtc.c文件定义了内核定时器和实时时钟的部分,s5p_systimer就是内核移植所需要使用的定时器。

此外,drivers/serial/目录中的samsung.c和s5pv210.c是系列处理器的串口驱动。

↘3.5.3 驱动程序部分

三星系列处理器的驱动程序集中在几个重点目录中。

·drivers/gpu/pvr:PowerVR SGX图形处理器的支持。

·drivers/video/samsung/:三星的Framebuffer驱动,建立s3cfb设备。

·drivers/mtd/onenand/:One Nand Flash存储器驱动,建立s5pc110-onenand设备。

·drivers/media/video/samsung/fimc/:三星Video视频输出驱动,建立s3c-fimc.N设备。drivers/media/video/samsung/jpeg_v2/:三星的JPEG驱动,建立s3c-jpg设备。

·drivers/media/video/samsung/mfc50/:三星的Multi Format Codec驱动,建立s3c-mfc设备。

·drivers/misc/samsung_modemctl/:三星的Modem控制驱动。

·sound/soc/s3c24xx/:三星处理器的音频驱动,建立soc-audio.0设备。

·sound/soc/codecs/中的几个文件:三星音频Codec的处理部分。

根据Linux的sys文件系统,其中很多设备在/sys/bus/platform/devices/目录中根据名称找到。三星处理器的内部设备常常以s3c或者s5等字符串为前缀。例如,s3c2410-wdt为看门狗,s3c2410-rtc为实时时钟,s3c2440-i2c.N为各个I2C的控制器,s3c24xx-pwm.N为各个PWM,s5pv210-uart.N为各个串口。