下载VX映像的奇怪问题
你描述的现象存在多种可能的问题.单从现象来分析: bootrom_res是驻留型映像,只有数据段被复制到RAM0,文本段在ROM里面,程序在ROM里执行.而bootrom和bootrom_uncmp则将数据段和文本段都复制到RAM,再跳到RAM中执行.如果后两种执行不起来,从与第一种的区别来讲,有可能是跳转到RAM没有成功,或者跳转后不能执行,这有可能是内存本身有问题,或者MMU的配置有问题.可以检查一下配置,如果有仿真器,最好能跟踪一下bootrom_uncmp的执行过程,看到底哪里出的问题.
从你的FTP下载VxWorks映像也有问题来看,,,,,还有一种有可能的情况,就是你的目标板内存太小了:把数据段,文本段复制到到RAM以及FTP下载VxWorks映像,都需要比bootrom_res更多的内存空间,,,,,这两种情况都出了问题,所以怀疑到这里.
可否提供更多的参考信息,比如CPU,内存大小等等.
关注
谢谢及时回复,
自己是44B0X平台,2 M NOR FLASH,8M SDRAM.ROMSIZE 定义为512K.
刚看了电路原理图,应该是没有错的.板子是别人做的,参考了优龙的原理图.
加载BOOTROM_UNCMP后,运行串口不能输出BOOTROM的信息.
以前是可以的.
谢谢,版主的热心哈.
今天用REDBOOT测试了下SDRAM,正常的啊.
REDBOOT里面的测内在命令测试的.
先写再读.应该正常的吧.
太慢,后面就重启了.
啊哈,看来你的目标机不是x86,很有可能是ARM、PPC、MIPS之类的处理器了。而且有调试器,那就好办了。。可以做如下测试:
使用bootrom_uncmp作为映象,烧写到Flash。。。
用反汇编工具反汇编这个映象文件,用于调试静动态比照。
首先比较romInit.s中的代码是否执行正常(应该与反汇编中的代码完全一致)
接下来看是否正确跳转到C语言入口(第一行C语言代码是否执行到了),并检查一下堆栈设置是否合法。
在bootConfig.c中的usrInit()函数中添加一个死循环(如果你的调试器可以支持C语言断点,就不用这么麻烦了,直接设置断点),比如:
int a = 0;
while (a == 0){;}
这样,程序运行在这里将进入死循环,用调试器将运行挂起,再进行SDRAM的测试(在调试器中写入再读出)。确认SDRAM再经过VxWorks的初始化之后是OK的。检查一下堆栈寄存器是否在预定的地方(一定要在RAM中,有些情况下,会搞错)。如果都OK。则通过修改寄存器,把变量a变成1,让程序继续往下走。
接下来的代码都在C语言里面,如果目标机有点灯的硬件,可以在代码中中插入点灯代码,用每次增加一次点灯的方法,一步一步往前调试。
既然没有运行起来,肯定是在某个步骤的执行上出了问题。。。。可结合Vxworks的相关文档和反汇编代码,采用以上方法逐步跟踪,发现问题所在。这样虽然麻烦,但是肯定可以调出来,而且对于学习整个代码结构和执行顺序很有好处。
如果一时弄不清各个函数的执行顺序和调用关系,可以结合反汇编代码来看,还有,一个比较老的VxworksBSP Trainning 文档是很有用的。如果要完全靠自己搞清楚这些东西,则可结合makefile规则和编译输出信息看看它到底引用了哪些文件。
继续关注。但近期要出国,回来应该是12号左右了。
祝好运。
我装了IDA,以前把BOOTROM_UNCMP放进去,反汇编出来好像不正确啊.
不知道怎么用?有没有什么使用介绍的的文档哦
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |