这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 对vxworks for Arm 生成映象的一点看法(老站转)

共1条 1/1 1 跳转至

对vxworks for Arm 生成映象的一点看法(老站转)

菜鸟
2002-05-18 05:59:05     打赏
对vxworks for Arm 生成映象的一点看法!(特别感谢serf兄) seasoblue 于 2002/05/13 10:53 加贴在 嵌入式系统论坛 设为精华 删除   最近在arm上作vxworks的开发,由于对arm不是很熟悉,费了不少劲,现在总算能正常启动、通过网络下载vxworks映象了。这还要多亏serf兄的无私帮助,再一次感谢serf。就这次的实战我有一些体会想写出来和大家一起讨论,希望能让大家少走一些弯路。   我用的cpu是samsung的S3C4510B,但不是samsung的snds100开发板。bootrom芯片是用的sst39vf040(8位数据宽度,512kBytes),sdram为2片hy57v641620(4bankX1MX16bit)。外接以太网口和串口。整体大致和snds100相同。但snds100的bootrom为两片29EE010组成16位宽度。   不管三七二十一,先将snds100的BSP编译后生成的bootrom写入,板子串口接上PC的串口,打开超级终端,上电!天啊,什么也没有!唉,慢慢分析吧!首先分析romInit.s。在可疑处插入如下的点灯指令: /*==============add by seasoblue===========*/ LDR r0,L$_IopModReg MOV r1,#0xff STR r1, {r0} LDR r0,L$_IopDat MOV r1,#0xfd /* Show 2 */ STR r1, [r0] /*==============end by seasoblue=================*/ 重复烧入->上电的过程,结果发现在初始化sdram(定位sdram的起始地址为0,bootrom的起始地址为16M)再跳转后的点灯失败。看来程序根本就没有跳到romStart去执行!通过反汇编bootrom和分析bootrom的符号表,结果发现romInit被定位到1M的位置,而bootrom这种映象的romInit既不在0也不在1M处,而是在0xa8处!通过修改程序,结果能跳到romStart了,但后面还是不对。真是黔驴技穷了。只好向Serf兄求救啦!将serf提供的原有bootrom写入但也不能正常启动,真是苦呀!后来无意中将bootrom.hex写入,谁知一上电居然能正常启动了,那一刻真是不知是喜还是悲!   原来bootrom.hex的0地址放的就是romInit,这才符合文档介绍嘛!而链接器将romInit定位到1M是因为bootrom后来要拷贝到sdram的RAM_HIGH_ADRS(1M)处运行。   分析完后将自己的BSP生成bootrom.hex烧入,上电,奇怪串口还是没有显示!一定是串口设置有问题。比较serf兄的sndsSio.h文件,结果发现EXT_CLK和SNDS_CNT0_38400不一样。这正是串口要用的波特率。一个字--改!一阵捣鼓后,串口终于有显示了!再修改IP,用户,登录密码,重启,vxworks映象顺利load! 成功啦!哈 ̄哈哈。。。。。   这就是我的实战过程,虽然短短几百字,但却花费了我和一同事一个星期的时间,其中的甘苦相信很多朋友都曾有过类似的体会!   我现在没弄明白,为什么bootrm这种映象不能用不能在arm上用,而在X86上却能用?它在romInit之前放置的是什么东东(好象是.bss之类的)?   还有就是一定要设成little Endian存储模式,尽管arm支持bit Endian。因为编译器是编成小端模式的。   串口设置我还没有去研究。   最后还有一个问题请教serf兄:)我将sysNvRamGet函数中你定义的table数组用字符串“secEnd(0,0)aman:/tornado/target/config/snds100/vxWorks h=192.168.0.110 e=192.168.0.221 u=2 pw=2 tn=snds100”来替代,但启动后显示的还是config.h中DEFAULT_BOOT_LINE所定义的信息。好象没起作用? 希望大家多多交流! -------------------------------- 到家了!^O^



关键词: vxworks     生成     映象     一点     看法     老站转    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]