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

3.4 高通MSM平台的内核和驱动

↘3.4.1 平台概述

MSM是高通(Qualcomm)的系列处理器,是Android的一种常用处理器。目前MSM主要包含了MSM7k系列处理器和QSD8k系列处理器。MSM7k系列处理器的内核是ARMv6体系结构的ARM11,QSD8k系列处理器的内核是ARMv7体系结构的Scorpion。Nexus One手机使用的就是QSD8250的处理器。

提示:MSM7k和QSD8k原本是两种处理器,但它们的Linux内核统称为MSM。

使用git下载MSM内核的方法如下所示:

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

进入目录,并且切换到稳定的分支:

    $ cd msm
    $ git checkout origin/android-msm-2.6.35

MSM的源代码中包含通用和专用的版本,MSM是其通用的内容,mahimahi是Nexus One手机使用的配置内容。

配置成MSM通用内容的方法如下所示:

    $ make ARCH=arm msm_defconfig .config

配置成Nexus One手机内容的方法如下所示:

    $ make ARCH=arm mahimahi_defconfig .config

两者的主体内容类似,mahimahi主要使用了CONFIG_ARCH_QSD8X50作为配置宏。

↘3.4.2 体系结构移植

mahimahi平台的体系结构移植部分主要在arch/arm/mach-msm目录中。

board-mahimahi.c文件是移植部分的核心,机器定义部分如下所示:

    MACHINE_START(MAHIMAHI, "mahimahi")
    #ifdef CONFIG_MSM_DEBUG_UART
      .phys_io        = MSM_DEBUG_UART_PHYS,
      .io_pg_offst    = ((MSM_DEBUG_UART_BASE) >> l8) & 0xfffc,
    #endif
      .boot_params    = 0x20000l00,
      .fixup          = mahimahi_fixup,
      .map_io         = mahimahi_map_io,
      .init_irq       = msm_init_irq,
      .init_machine   = mahimahi_init,
      .timer          = &msm_timer,
    MACHINE_END

这是ARM平台的通用的移植格式,mahimahi_init()函数执行了主要初始化工作,msm_init_irq()函数完成中断部分的初始化,在irq.c文件中实现,msm_timer则在同目录的timer.c文件中定义。board-mahimahi-keypad.c、board-mahimahi-panel.c等几个文件也是板级实现的一部分。

board-mahimahi.c文件中还定义了表示平台设备(platform_device)的各个结构体,用于和驱动程序中的平台驱动(platform_driver)相匹配。

↘3.4.3 设备驱动程序

高通MSM系列处理器及相关板级的驱动程序集中在几个重点目录中。

·driver/video/msm/:MSM的帧缓冲,GPU驱动等。

·driver/serial/msm_serial*.c:MSM的串口驱动。

·driver/media/video/:MSM的视频方面的驱动(V4L2)。

·driver/net/wireless/bcm4329/:BCM4329 WIFI的驱动。

·driver/mtd/devices/msm_nand.c:MSM平台的Nand Flash驱动。

·driver/mmc/host/:MSM的MMC/SD主控制器驱动。

·driver/i2c/busses/:MSM的I2C总线驱动。

·driver/input/misc/gpio_*.c:一些通过GPIO构建成的输入设备驱动。

一些驱动可以从/dev/目录中找到其设备节点,/sys/bus/platform/devices/目录中根据名称也可以找到平台设备的信息。