官术网_书友最值得收藏!

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)通過名稱相匹配。

主站蜘蛛池模板: 白朗县| 安仁县| 南乐县| 社旗县| 马关县| 莫力| 嘉定区| 临澧县| 道孚县| 景宁| 华安县| 高青县| 称多县| 陈巴尔虎旗| 广元市| 星座| 鄂温| 隆安县| 平利县| 莫力| 湖南省| 万山特区| 新丰县| 阜阳市| 西城区| 苍山县| 邢台县| 桂阳县| 介休市| 华亭县| 马山县| 桐乡市| 竹溪县| 兴隆县| 夏河县| 莱阳市| 林芝县| 荣成市| 门源| 日照市| 雷山县|