5.1.2 MSM适用于Android的 Linux内核的结构

使用MSM处理器平台的Linux内核和标准的Linux内核的差别有以下几个方面:

MSM及其板级平台机器的移植

MSM及其板级平台一些虚拟设备的驱动程序

Android中特有的驱动程序和组件

MSM及其板级平台机器的移植和MSM及其板级平台一些虚拟设备的驱动程序是硬件平台相关的内容。Android中特有的驱动程序和组件是Android中特有的部分,这种内容在Android平台的Linux内核中,是基本相同的。

在Android开源工程的网站上,使用git工具得到msm内核的方式如下所示:

    $ git clone git://android.git.kernel.org/kernel/msm.git

通常情况下,MSM内核git的代码仓库中有origin/android-msm-2.6.29和origin/android-msm-2.6.29-nexusone两个分支可以选择。

选择msm通用的2.6.29版本,并且进行编译的方式如下所示:

    $ git checkout -b android-msm-2.6.29 origin/android-msm-2.6.29
    $ make ARCH=arm msm_defconfig .config
    $ make ARCH=arm CROSS_COMPILE={path}/arm-none-linux-gnueabi-

选择Nexus One中使用的MSM内核版本,并且进行编译的方式如下所示:

    $ git checkout -b android-msm-2.6.29-nexusone origin/android-msm-2.6.29-nexusone
    $ make ARCH=arm mahimahi_defconfig .config
    $ make ARCH=arm CROSS_COMPILE={path}/arm-none-linux-gnueabi-

使用MSM平台的Linux内核主要有两个版本,一个针对MSM7kxx系列的处理器,另一个针对QSD8kxx系列的处理器(snapdragon),它们使用了不同的Linux代码和配置文件。对于前者其config文件的路径为arch/arm/configs目录中的msm_defconfig。对于后者,参考的硬件平台即Nexus One,其config文件的路径为arch/arm/configs目录中的mahimahi_defconfig。

以Nexus One手机使用的MSM处理器的Linux内核版本为例,其config文件为mahimahi_defconfig。

体系结构方面的片断如下所示:

    CONFIG_ARM=y
    CONFIG_ARM=y
    CONFIG_SYS_SUPPORTS_APM_EMULATION=y
    CONFIG_GENERIC_GPIO=y
    CONFIG_GENERIC_TIME=y
    CONFIG_GENERIC_CLOCKEVENTS=y
    CONFIG_MMU=y
    #
    # System Type
    #
    CONFIG_ARCH_MSM=y
    CONFIG_ARCH_QSD8K50=y
    CONFIG_ARCH_MSM_SCORPION=y
    CONFIG_MSM_MDP31=y

其中在系统类型方面,选择了CONFIG_ARCH_MSM表示MSM系列,选择CONFIG_ARCH_QSD8K50表示QSD8K50(QSD8250 或者QSD8650)处理器, CONFIG_ARCH_MSM_SCORPION表示处理器所使用的Scorpion内核。

config文件后面配置的方面是MSM处理器使用的特性和板级类型,内容如下所示:

    #
    # MSM Board Type
    #
    CONFIG_MACH_SWORDFISH=y
    CONFIG_MACH_MAHIMAHI=y
    # ......

SWORDFISH和MAHIMAHI都是基于MSM处理器开发板的名称。

MSM处理器CPU部分的配置如下所示:

    #
    # Processor Type
    #
    CONFIG_CPU_32=y
    CONFIG_CPU_32v6K=y
    CONFIG_CPU_V7=y
    CONFIG_CPU_32v7=y
    CONFIG_CPU_ABRT_EV7=y
    CONFIG_CPU_PABRT_IFAR=y
    CONFIG_CPU_CACHE_V7=y
    CONFIG_CPU_CACHE_VIPT=y
    CONFIG_CPU_COPY_V6=y
    CONFIG_CPU_TLB_V7=y
    CONFIG_VERIFY_PERMISSION_FAULT=y
    CONFIG_CPU_HAS_ASID=y
    CONFIG_CPU_CP15=y
    CONFIG_CPU_CP15_MMU=y

在这里选择了CONFIG_CPU_V7表示使用ARMv7的体系结构。其他的相关配置也是包含了ARMv7所具有的功能。