编译VxWorks BSP出现的MMUCR_L4_ENABLE的问题
作者:makethyme
在编译VxWorks的过程中,出现如下的错误:
$ /cygdrive/c/Tornado2.2_for_arm/host/x86-win32/bin/make build
1)ccarm -M -MG -w -mapcs-32 -mbig-endian -march=armv5-ansi -O2 -fno-builtin -fvolatile -Wall -I/h -I.
-IC:/Tornado2.2_for_arm/target/config/all -IC:/Tornado2.2_for_arm/target/h -IC:/Tornado2.2_for_arm/target/src/config
-IC:/Tornado2.2_for_arm/target/src/drv 。。。
2)ccarm -mapcs-32 -mbig-endian -march=armv5 -ansi -O2 -fno-builtin -fvolatile -I/h -I. -IC:/Tornado2.2_for_arm/target/config/all
-IC:/Tornado2.2_for_arm/target/h -IC:/Tornado2.2_for_arm/target/src/config -IC:/Tornado2.2_for_arm/target/src/drv 。。。
-DCPU_926EJ -DARMMMU=ARMMMU_926E -DARMCACHE=ARMCACHE_926E -P -xassembler-with-cpp -c -o romInit.o romInit.s
关于第一个问题:可以看出是cygdrive下“/”和windows下“/”下的冲突问题,根据分析,Makefile文件最终会根据:
export WIND_HOST_TYPE=x86-win32
export SEQ_HOST=windows32
包含c:/Tornado2.2_for_arm/target/h/make/ defs.x86-win32,将其中的“/”改为“/”,例如
BIN_DIR = $(WIND_BASE)/host/$(WIND_HOST_TYPE)/bin
改为
BIN_DIR = $(WIND_BASE)/host/$(WIND_HOST_TYPE)/bin
关于第二个问题,经过查找,分析,最后发现在装Tornado for arm时,居然漏掉(也可能时安装的版本较老的缘故) target/h/arch/arm下的cacheArm926eLib.h。从别人处拷贝来该文件。
另外,分析后发现target/h/arch/arm/下的文件mmuArmLib.h不完整,经过比较发现,有如下区别
7a8
> 01r,11may04,dmh add ARM926EJ, remove bits from variants configured incorrectly
271c272,273
< #if ((ARMMMU == ARMMMU_740T) || (ARMMMU == ARMMMU_940T) || (ARMMMU == ARMMMU_946E))
---
> #if ((ARMMMU == ARMMMU_740T) || (ARMMMU == ARMMMU_926E) || /
> (ARMMMU == ARMMMU_940T) || (ARMMMU == ARMMMU_946E))
335a338,343
> #if ((defined CPU_926EJ) || (defined CPU_926EJ_T))
> #define MMUCR_ALTVECT (1<<13) /* alternate vector select */
> #define MMUCR_ROUND_ROBIN (1<<14) /* round-robin placement */
> #define MMUCR_L4_ENABLE (1<<15) /* L4 enable, ARMv4 behavior */
> #endif /* CPU_926EJ */
>
472,475c480
< /* W bit is Should Be One */
<
< #define MMU_INIT_VALUE (MMUCR_PROG32 | MMUCR_DATA32 | MMUCR_L_ENABLE | /
< MMUCR_W_ENABLE)
---
> #define MMU_INIT_VALUE (MMUCR_PROG32 | MMUCR_DATA32 | MMUCR_L_ENABLE)
503,507c508
< /*
< * W bit is Should Be One, select ARMv4 behaviour for LDR to PC, ITCM and DTCM
< * are also SBO.
< */
<
---
> /* W bit is Should Be One */
509,510c510
< MMUCR_ROM | MMUCR_W_ENABLE | MMUCR_L4_ENABLE | /
< MMUCR_DTCM_ENABLE | MMUCR_ITCM_ENABLE)
---
> MMUCR_ROM)
549d548
< /* W bit is Should Be One, select ARMv4 behaviour for LDR to PC */
551,552c550
< MMUCR_W_ENABLE | MMUCR_BIGEND | MMUCR_ROM | /
< MMUCR_L4_ENABLE)
---
> MMUCR_BIGEND | MMUCR_ROM)
经过改正,最后能够编译完成了。