- Android系统级深入开发
- 韩超 梁泉
- 666字
- 2020-08-26 21:43:42
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所具有的功能。