另一篇文章曾经讲过如果想加一个驱动的话,需要在指定的目录下写对应的文件;如果你不想或者不能这样做的话,有没有别的办法呢?比如你想把新的驱动文件全部都放在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 }
以上两种方法都可以解决问题!