《s3c2416裸跑环境配置》一文已经发表很长一段时间了,前两天突然收到邮件提示有人回复,原来网友jxyggg按照文中所讲去调试,却始终不能成功。问题的描述见原文后的回复,经过QQ交流,问题得到解决,下面简单描述下问题及解决方法。
调试界面
如上图所示,出问题的调试界面显示,“ROM”中的代码与编译器的代码根本不是一回事,全是跳转指令,看上去似乎是个中断向量表。可以肯定,代码没有被写进0x00000000开始的“ROM”。但是在本人开发板上测试,发现jxyggg给的工程能正常调试,最让人揪心的问题往往是这些似是而非的问题。通过交流,发现jxyggg同学把开发板启动开关打到SD位置,原因是担心调试会影响NAND里面的uboot和kernel。本人在板子上也把启动开关打到SD位置,结果本人的板子也出现了如上图一模一样的情况。
问题似乎解决了,就是调试时要把启动开关打到NAND位置。可是为什么从SD启动就不能调试呢?我进行了如下思考:1.不是不能调试,只是“ROM”中的代码不对;2.s3c2416上电首先启动的是IROM中的代码,它会去SD Card中寻找下一步的代码,可是现在根本没有SD Card,IROM会做什么?它会一直查询,也就是IROM一直没有把IRAM映射到0x00000000处。我们把代码下载到真正的IROM中去会成功吗?当然要失败!
如果上述推论正确,那么在0x40000000处能访问到IRAM,于是把原文中提到的相关内存地址换成0x40000000,运行成功!
在0x40000000处调试
如上图所示,程序在0x40000000处正常调试。
这些测试工作也得到了jxyggg的验证,问题圆满解决!