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/目录中根据名称也可以找到平台设备的信息。