EVK安装包安装后会在\WINCE600\PLATFORM\COMMON\SRC\SOC下生成COMMON_FSL_V2和MX51_FSL_V2这两个文件夹,为了修改和编译方便,需要迁移到BSP\SRC\SOC目录下。
1. COMMON_FSL_V2和MX51_FSL_V2目录的内容
COMMON_FSL_V2目录的代码对于所有飞思卡尔基于ARM的SOC是可重复使用的,也就是说,对于基于ARM的SOC,这部分代码都是适用的,比如IMX27、IMX35和IMX515等。
MX51_FSL_V2可适用于任何基于IMX515 EVK平台。
这两个目录的代码被编译为一系列的静态库,这些静态库最后和特定平台的库链接一起来创建系统的驱动。
2. 编译涉及环境变量及路径的修改
涉及修改的地方包括BSP所有大的目录,比如bootloader、KITL、common、drivers、OAL、SOC,其中修改最多的就是SOC和drivers,
BSP\sources.cmn文件比较重要,先来看相关部分:
_COMMONSOCNAME=common
_COMMONSOCVENDOR=fsl
_COMMONSOCLIBVERSION=v2
_COMMONSOCDIR=$(_COMMONSOCNAME)_$(_COMMONSOCVENDOR)_$(_COMMONSOCLIBVERSION)
由此可得_COMMONSOCDIR环境变量的值是COMMON_FSL_V2。
_SOCNAME=mx51
_SOCVENDOR=fsl
_SOCLIBVERSION=v2
_SOCDIR=$(_SOCNAME)_$(_SOCVENDOR)_$(_SOCLIBVERSION)
由此可得_SOCDIR环境变量的值是MX51_FSL_V2。
再来看INCLUDES后面包含的内容:
INCLUDES=$(_TARGETPLATROOT)\src\inc; \
$(_PLATFORMROOT)\common\src\soc\$(_COMMONSOCDIR)\inc; \
$(_PLATFORMROOT)\common\src\soc\$(_SOCDIR)\inc; \
$(_PLATFORMROOT)\common\src\inc;
这里的_PLATFORMROOT指向F:\WINCE600\platform(我的WINCE6.0是安装在F盘的),因为我们把COMMON_FSL_V2和MX51_FSL_V2这两个文件夹迁移到BSP\SRC\SOC目录下,所以需要改为如下内容:
INCLUDES=$(_TARGETPLATROOT)\src\inc; \
$(_TARGETPLATROOT)\src\soc\$(_COMMONSOCDIR)\inc; \
$(_TARGETPLATROOT)\src\soc\$(_SOCDIR)\inc; \
$(_PLATFORMROOT)\common\src\inc;
其中_TARGETPLATROOT环境变量的值为F:\WINCE600\platform\BSP(BSP代表BSP名称)
其他目录下的主要的修改归类如下:
2.1 Sources文件下面INCLUDES内容的修改
⑴由INCLUDES包含路径的修改,比如把SRC\BOOTLOADER\COMMON目录下sources文件INCLUDES下面的内容:
INCLUDES= \
$(INCLUDES); \
$(_PLATFORMROOT)\common\src\soc\$(_COMMONSOCDIR)\boot\fmd\sdmmc; \
改为:
INCLUDES= \
$(INCLUDES); \
$(_TARGETPLATROOT)\src\soc\$(_COMMONSOCDIR)\boot\fmd\sdmmc; \
⑵还有就是把INCLUDES下包含了本来不存在的文件夹内容去掉,比如把SRC\SOC\COMMON_FSL_V2\PMIC\MC13892\PDK\sources下面:
INCLUDES=\
..\..\inc; \ //去掉,因为不存在此inc文件夹
⑶ 重新指定正确的路径
编译SRC\SOC\COMMON_FSL_V2\BOOT的错误信息:
bootshell.c(28) : fatal error C1083:Cannot open include file: 'oal.h': No such file or directory
把SRC\SOC\COMMON_FSL_V2\BOOT\SHELL\sources下面的内容:
INCLUDES= \
..\..\..\inc; \
..\..\..\..\..\inc; \
改为:
INCLUDES= \
..\..\..\inc; \
$(_PLATFORMROOT)\common\src\inc;\
2.2 Sources文件INCETARGETFILE0和WINCETARGETFILES下内容的修改
比如把SRC\SOC\COMMON_FSL_V2\ADC\PDK\sources下面的内容
WINCETARGETFILE0=$(_PLATCOMMONLIB)\$(_CPUINDPATH)\$(TARGETNAME).def
改为下面的内容:
WINCETARGETFILE0=$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\$(TARGETNAME).def
WINCETARGETFILE0用于告诉编译系统在编译当前路径下的源码文件之前,要先由Build.exe编译的非标准目标文件,比如,如果一个目标二进制文件(.res)需要拷贝到不同的位置,这个宏定义可以指定此文件的路径和文件名。
_TARGETPLATROOT在WINCE600\PUBLIC\COMMON\OAK\MISC\wince.bat定义,如下:
set _TARGETPLATROOT=%_PLATFORMROOT%\%_TGTPLAT%
_CPUDEPPATH在WINCE600\PUBLIC\COMMON\OAK\MISC\source.default定义,如下:
_CPUINDPATH=$(_TGTCPU)\$(WINCEDEBUG)
_CPUDEPPATH=$(_TGTCPU)\$(WINCEDEBUG)
这里的_TGTCPU值为ARMV4I,WINCEDEBUG如果工程为release则为retail
SRC\SOC\COMMON_FSL_V2\BACKLIGHT\CTLPNL
WINCETARGETFILES=$(_PLATCOMMONLIB)\$(_CPUINDPATH)\$(TARGETNAME).res
WINCETARGETFILES=$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\$(TARGETNAME).res
WINCETARGETFILES:用于告诉编译系统在链接当前路径下所有的目标文件之前,要先由Build.exe编译的目标文件。
2.3 重复定义
编译SRC\SOC\MX51_FSL_V2\CSPDDK\DDK_IOMUX\ soc_ddk_iomux.c
error C2371: 'CSP_IOMUX_REGS' :redefinition; different basic types
error C2371: 'PCSP_IOMUX_REGS' :redefinition; different basic types
修改CSPDDK \dirs的内容,不编译DDK_IOMUX文件件,因为我们CPU版本是TO2,但要编译DDK_IOMUX_TO2文件夹