Chinaunix首页 | 论坛 | 博客
  • 博客访问: 227763
  • 博文数量: 49
  • 博客积分: 2101
  • 博客等级: 大尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-07 10:38
文章分类

全部博文(49)

文章存档

2010年(49)

我的朋友

分类: 嵌入式

2010-09-07 11:39:54

0 本质

tornado编译实际上是执行工程底下的makefile,而使用的编译链是gnugcc。经测试,在dos命令行中直接执行make是可以完成编译的。

关于其中的gcc编译选项首先可以参考gcc的中文手册(已下载),而特殊的可以在tornad 的文档docs中对gnu的支持中找到。

 

1 执行configGen.tcl脚本

wtxtcl D:\Tornado2.0\host\src\hutils\configGen.tcl D:\Tornado2.0\target\proj\TC1600A\TC160

0A.wpj

执行该脚本后,生成文件:linkSyms.cprjComps.hprjConfig.cprjParams.h

问题:为什么建立工程后对config.hconfigall.h的修改没有作用?

tornado里面建立工程的时候,会把对组件的配置信息记录在xxx.wpj工程文件中,而在tornado里面执行添加或删除组件时会修改xxx.wpj文件中的组件配置信息;

prjConfig.c文件很重要,它是根据用户配置的组件而生成的工程配置文件,与usrconfig.c的关系:

bootrom编译bootConfig

1 I6 }1 `1 O& wvxworks命令行下编译usrConfig.c ,

0 r( @4 L+ c7 V5 x) U1 r# ~vxworks集成环境(Tornado2.2)下编译prjConfig.c

 

linkSyms.c里面是符号信息的集合;

2 编译工程文件并生成prjObjs.lst

ccppc -g -mcpu=860 -ansi -nostdinc -fvolatile -fno-builtin -fno-for-scope -P -x assembler-

with-cpp -ID:\Tornado2.0\target\proj\TC1600A -ID:\Tornado2.0\target\config\TC1600A -ID:\To

rnado2.0\target\h -ID:\Tornado2.0\target\config\comps\src -ID:\Tornado2.0\target\src\drv -

DCPU=PPC860 -DPRJ_BUILD  -c D:\Tornado2.0\target\config\TC1600A\sysALib.s -o sysALib.o

 

vxrm D:\Tornado2.0\target\proj\TC1600A\prjObjs.lst

Generating D:\Tornado2.0\target\proj\TC1600A\prjObjs.lst...

prjObjs.lst列出了用户工程.o文件

 

3 把工程文件生成的.o和静态链接库链接起来

ccppc -BD:\Tornado2.0\host\x86-win32\lib\gcc-lib\ -nostdlib -r -Wl,-X \

    -Wl,@D:\Tornado2.0\target\proj\TC1600A\prjObjs.lst  version.o  D:\Tornado2.0\target\li

b\libPPC860gnuvx.a -o partialImage.o

注:prjObjs.lst里是所有的工程.o目录;libPPC860gnuvx.appc860静态库文件;partialImage.o是链接出来的文件。

 

4 执行munch.tcl脚本

nmppc partialImage.o @D:\Tornado2.0\target\proj\TC1600A\prjObjs.lst | wtxtcl D:\Tornado2.0

\host\src\hutils\munch.tcl -asm ppc > ctdt.c

该脚本使得partialImage.o里的初始化先于工程.o,使得vxworks系统级的初始化比用户的初始化先执行。

 

5 生成符号表文件symTbl.c并编译

copy partialImage.o tmp.o

已复制         1 个文件。

D:\Tornado2.0\host\x86-win32\bin\makeSymTbl PPC tmp.o > symTbl.c

ccppc -c -fdollars-in-identifiers -g -mcpu=860 -ansi -nostdinc -DRW_MULTI_THREAD -D_REENTR

ANT -fvolatile -fno-builtin -fno-for-scope -ID:\Tornado2.0\target\proj\TC1600A -ID:\Tornad

o2.0\target\proj\TC1600A\alarmtask -ID:\Tornado2.0\target\proj\TC1600A\AppRoot -ID:\Tornad

o2.0\target\proj\TC1600A\Datar_Manager -ID:\Tornado2.0\target\proj\TC1600A\eOS -ID:\Tornad

o2.0\target\proj\TC1600A\Fomux_SM -ID:\Tornado2.0\target\proj\TC1600A\HDLCCtrl -ID:\Tornad

o2.0\target\proj\TC1600A\LCDCtrl -ID:\Tornado2.0\target\proj\TC1600A\SNMP -ID:\Tornado2.0\

target\proj\TC1600A\SMAgent -ID:\Tornado2.0\target\proj\TC1600A\RTL8366SR -ID:\Tornado2.0\

target\proj\TC1600A\TESTCTRL -ID:\Tornado2.0\target\config\TC1600A -ID:\Tornado2.0\target\

h -ID:\Tornado2.0\target\h\snmp -ID:\Tornado2.0\target\config\comps\src -ID:\Tornado2.0\ta

rget\src\drv -DCPU=PPC860 -DPRJ_BUILD  symTbl.c -o symTbl.o

 

6 编译dataSegPad.c

 

ccppc -g -mcpu=860 -ansi -nostdinc -DRW_MULTI_THREAD -D_REENTRANT -fvolatile -fno-builtin 

-fno-for-scope -ID:\Tornado2.0\target\proj\TC1600A -ID:\Tornado2.0\target\proj\TC1600A\ala

rmtask -ID:\Tornado2.0\target\proj\TC1600A\AppRoot -ID:\Tornado2.0\target\proj\TC1600A\Dat

ar_Manager -ID:\Tornado2.0\target\proj\TC1600A\eOS -ID:\Tornado2.0\target\proj\TC1600A\Fom

ux_SM -ID:\Tornado2.0\target\proj\TC1600A\HDLCCtrl -ID:\Tornado2.0\target\proj\TC1600A\LCD

Ctrl -ID:\Tornado2.0\target\proj\TC1600A\SNMP -ID:\Tornado2.0\target\proj\TC1600A\SMAgent 

-ID:\Tornado2.0\target\proj\TC1600A\RTL8366SR -ID:\Tornado2.0\target\proj\TC1600A\TESTCTRL

 -ID:\Tornado2.0\target\config\TC1600A -ID:\Tornado2.0\target\h -ID:\Tornado2.0\target\h\s

nmp -ID:\Tornado2.0\target\config\comps\src -ID:\Tornado2.0\target\src\drv -DCPU=PPC860 -D

PRJ_BUILD  -c D:\Tornado2.0\target\config\comps\src\dataSegPad.c

该文件申请了一个页,用于保护代码段,详见该文件内部的注释DESCRIPTION

 

7 链接生成vxworks

 ldppc -X -N -e _sysInit -Ttext 00010000  \

       dataSegPad.o partialImage.o ctdt.o symTbl.o -o vxWorks

 

8 检测vxworks大小是否越界

D:\Tornado2.0\host\x86-win32\bin\vxsize PPC -v 00200000  00010000  vxWorks

vxWorks: 1333300(t) + 322020(d) +  210668(b) = 1865988 (165628 unused)

其中0x00200000是内存的高址RAM_HIGH_ADRS0x00010000是内存低址RAM_LOW_ADRS;而vxworks映像是下载到低址和高址之间的,所以vxworks大小不能大于0x00200000 -0x00010000 = 0x001F0000

阅读(2905) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~