Android系统级深入开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

6.2.1 OMAP平台部分的移植

OMAP平台部分的移植内容在arch/arm/plat-omap/目录中,其中include目录为OMAP这种平台的头文件。

arch/arm/plat-omap/目录中的KConfig文件用于配置OMAP平台的各种内容,包含了CONFIG_ARCH_OMAP3等选项。

arch/arm/plat-omap/目录中的Makefile内容如下所示:

    # 通用的支持
    obj-y := common.o sram.o clock.o devices.o dma.o mux.o gpio.o \
          usb.o fb.o vram.o vrfb.o io.o
    obj-m :=
    obj-n :=
    obj-  :=
    # OCPI interconnect support for 1710, 1610 and 5912
    obj-$(CONFIG_ARCH_OMAP16XX) += ocpi.o
    obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
    obj-$(CONFIG_OMAP_IOMMU) += iommu.o iovmm.o
    obj-$(CONFIG_CPU_FREQ) += cpu-omap.o
    obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
    obj-$(CONFIG_OMAP_BOOT_REASON) += bootreason.o
    obj-$(CONFIG_OMAP_COMPONENT_VERSION) += component-version.o
    obj-$(CONFIG_OMAP_GPIO_SWITCH) += gpio-switch.o
    obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
    obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
    i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
    obj-y += $(i2c-omap-m) $(i2c-omap-y)
    # OMAP mailbox framework
    obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
    obj-$(CONFIG_OMAP_PM_NOOP) += omap-pm-noop.o
    obj-$(CONFIG_OMAP_PM_SRF) += omap-pm-srf.o \
                      resource.o

在OMAP平台的配置中,基本的内容直接进行编译,例如common.c,sram.c,clock.c, devices.c,dma.c等。而例如CPU_FREQ ,MCBSP,GPIO_SWITCH等内容属于可选的,根据配置选项进行编译。

arch/arm/plat-omap/include为OMAP平台的头文件目录,其中包含两个子目录:mach和dspbridge。

mach是OMAP相关头文件,这个目录中的很多文件的功能是这个硬件平台在Linux中移植中约定俗成的名称,例如dma.h表示DMA信息的头文件,irqs.h是中断信息相关的头文件,gpio是通用输入输出接口的相关头文件。

由于OMAP3系列的处理器比较复杂,因此其中一部分功能做成了“库”的形式,这些库的头文件也在当前目录中,它们在各个驱动中可以被调用,例如:display.h中包含了一些和显示子系统(DSS)相关的数据结构和接口,其中一些内容如下所示:

    struct omap_dss_board_info {
        int (*get_last_off_on_transaction_id)(struct device *dev);
        int num_devices;
        struct omap_dss_device **devices;
        struct omap_dss_device *default_device;
    };
    int omap_dss_start_device(struct omap_dss_device *dssdev);
    void omap_dss_stop_device(struct omap_dss_device *dssdev);
    int omap_dss_get_num_overlay_managers(void);
    struct omap_overlay_manager *omap_dss_get_overlay_manager(int num);
    int omap_dss_get_num_overlays(void);
    struct omap_overlay *omap_dss_get_overlay(int num);

这部分接口的具体实现,则在驱动程序的相关目录drivers/video/omap/dss/display.c中完成。

dspbridge目录是和控制DSP相关的头文件。由于OMAP是包含了ARM和DSP的双核处理器,为了在ARM方面控制DSP,TI目前采用了dspbridge(DSP桥)的方式。