- Android系統級深入開發
- 韓超 梁泉
- 572字
- 2018-12-29 13:39:37
5.2 MSM體系結構的移植
MSM處理器的Linux的移植部分,主要內容在以下目錄中:
arch/arm/mach-msm/ :MSM平臺部分移植的核心部分。
其中包含了qdsp5和qdsp6這兩個目錄,它們分別是5代DSP和6代DSP在應用處理器端的相關內核代碼。
arch/arm/mach-msm/include/mach/為MSM平臺頭文件的目錄,可以在內核空間中被其他部分引用。
arch/arm/mach-msm/目錄中的Makefile,其主要內容如下所示:
obj-y += io.o irq.o timer.o dma.o memory.o obj-$(CONFIG_ARCH_MSM_SCORPION) += sirc.o obj-y += devices.o obj-y += proc_comm.o obj-y += vreg.o obj-y += pmic.o obj-$(CONFIG_ARCH_MSM_ARM11) += acpuclock-arm11.o idle.o obj-$(CONFIG_ARCH_MSM_SCORPION) += acpuclock-scorpion.o idle-v7.o obj-$(CONFIG_ARCH_MSM_SCORPION) += arch-init-scorpion.o obj-y += clock.o obj-y += gpio.o generic_gpio.o obj-y += nand_partitions.o obj-$(CONFIG_MSM_FIQ_SUPPORT) += fiq_glue.o obj-$(CONFIG_MACH_TROUT) += board-trout-rfkill.o obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o obj-$(CONFIG_MSM_SMD) += smd_tty.o smd_qmi.o obj-$(CONFIG_MSM_SMD) += last_radio_log.o obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter.o obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter_device.o obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter_servers.o obj-$(CONFIG_MSM_RPCSERVERS) += rpc_server_dog_keepalive.o obj-$(CONFIG_MSM_RPCSERVERS) += rpc_server_time_remote.o obj-$(CONFIG_MSM_ADSP) += qdsp5/ obj-$(CONFIG_MSM_QDSP6) += qdsp6/ obj-$(CONFIG_MSM_HW3D) += hw3d.o obj-$(CONFIG_PM) += pm.o obj-$(CONFIG_CPU_FREQ) += cpufreq.o # 不同板定義的相關內容,省略
MSM處理器既有ARM11(屬于ARMv6)體系結構的MSM7k,也有SCORPION體系結構(屬于ARMv7)的QSD8k,因此其不同的方面在Makefile中對此做出了區分。在為mahimahi板構建的系統中,CONFIG_ARCH_MSM_SCORPION,CONFIG_MSM_QDSP6, CONFIG_MACH_SWORDFISH和CONFIG_MACH_MAHIMAHI等幾個宏均為真。
board-mahimahi.c是MSM的機器實現的核心文件,機器類型的定義如下所示:
MACHINE_START(MAHIMAHI, "mahimahi") #ifdef CONFIG_MSM_DEBUG_UART .phys_io = MSM_DEBUG_UART_PHYS, .io_pg_offst = ((MSM_DEBUG_UART_BASE) >> 18) & 0xfffc, #endif .boot_params = 0x20000100, .fixup = mahimahi_fixup, .map_io = mahimahi_map_io, .init_irq = msm_init_irq, .init_machine= mahimahi_init, .timer = &msm_timer, MACHINE_END
在MACHINE_START和MACHINE_END之間的內容為機器的信息,實際上是結構struct machine_desc。這里賦值了影射IO、初始化irq、初始化機器等函數指針。mahimahi_map_io,mahimahi init_irq,mahimahi_init都是在同文件中實現的初始化函數。msm_timer是為當前機器實現的定時器。
在board-mahimahi.c中還定義了各種平臺設備(platform_device)。例如:RAM控制臺平臺設備的內容如下所示:
static struct resource ram_console_resources[] = { { .start = MSM_RAM_CONSOLE_BASE, .end= MSM_RAM_CONSOLE_BASE + MSM_RAM_CONSOLE_SIZE - 1, .flags = IORESOURCE_MEM, }, }; static struct platform_device ram_console_device = { .name = "ram_console", .id = -1, .num_resources = ARRAY_SIZE(ram_console_resources), .resource = ram_console_resources, };
這些平臺設備(platform_device)和各個驅動程序程序中的平臺驅動(platform_driver)通過名稱相匹配。
- Objective-C Memory Management Essentials
- C# Programming Cookbook
- Access 數據庫應用教程
- Julia機器學習核心編程:人人可用的高性能科學計算
- Python數據分析(第2版)
- Expert Android Programming
- Apache Mesos Essentials
- Building a Quadcopter with Arduino
- Drupal 8 Configuration Management
- The DevOps 2.5 Toolkit
- Learning Raspbian
- 編寫高質量代碼:改善Objective-C程序的61個建議
- Hands-On Kubernetes on Windows
- Clojure High Performance Programming(Second Edition)
- Mastering ASP.NET Core 2.0