另一篇文章曾经讲过如果想加一个驱动的话,需要在指定的目录下写对应的文件;如果你不想或者不能这样做的话,有没有别的办法呢?比如你想把新的驱动文件全部都放在BSP目录下。源文件/头文件包含在sysLib.c中,不要.mk,dc,dr只用workbench编译,把cdf也放在BSP目录下,这样可以吗?你会发现workbench里能看到这个component但是是灰的或者斜的,不可用!

首先要知道workbench的搜索cdf tool只会在 target/config/comps/vxWorks这个目录下和BSP目录下去搜,所以能够搜到你的CDF文件,表现为你可以看见这个component,灰的或者斜的表示组件不可用,cdf文件的依赖关系有问题,最有可能的问题是找不到你的源文件。

比如:以Fresscale DMA driver comopent为例:

Component DRV_DMA_FSL {
    NAME        Freescale DMA Controller Driver
    SYNOPSIS    Freescale DMA Controller Driver
    MODULES     vxbFslDma.o
    REQUIRES    INCLUDE_VXBUS \
                INCLUDE_PLB_BUS \
                INCLUDE_DMA_SYS
    _CHILDREN   FOLDER_DRIVERS
    INIT_RTN    vxbFslDmaRegister();
    PROTOTYPE   void vxbFslDmaRegister(void);
    _INIT_ORDER hardWareInterFaceBusInit
    INIT_AFTER  INCLUDE_PLB_BUS
}

你要是把这样的cdf放在BSP下,workbench中看到的肯定是灰的,即使vxbFslDma.o在BSP目录下。因为” MODULES vxbFslDma.o“在BSP路径下找不到,原因很简单,root路径不是BSP目录。

这个有两个办法可以解决:

1)在Component 里删掉 MODULES 这行,在BSP的Makefile文件里通过EXTRA_MODULES 把它加进来。

Component DRV_DMA_FSL {
    NAME        Freescale DMA Controller Driver
    SYNOPSIS    Freescale DMA Controller Driver
    REQUIRES    INCLUDE_VXBUS \
                INCLUDE_PLB_BUS \
                INCLUDE_DMA_SYS
    _CHILDREN   FOLDER_DRIVERS
    INIT_RTN    vxbFslDmaRegister();
    PROTOTYPE   void vxbFslDmaRegister(void);
    _INIT_ORDER hardWareInterFaceBusInit
    INIT_AFTER  INCLUDE_PLB_BUS
}
EXTRA_MODULES += vxbFslDma.o   

2)指定源文件路径,让到你指定的路径下去找 用关键字CONFIGLETTES

Component DRV_DMA_FSL {
    NAME        Freescale DMA Controller Driver
    SYNOPSIS    Freescale DMA Controller Driver
    CONFIGLETTES ../../../config/bsp/vxbFslDma.c    ->> give the absolute path
    REQUIRES    INCLUDE_VXBUS \
                INCLUDE_PLB_BUS \
                INCLUDE_DMA_SYS
    _CHILDREN   FOLDER_DRIVERS
    INIT_RTN    vxbFslDmaRegister();
    PROTOTYPE   void vxbFslDmaRegister(void);
    _INIT_ORDER hardWareInterFaceBusInit
    INIT_AFTER  INCLUDE_PLB_BUS
} 

以上两种方法都可以解决问题!