按照坛上朋友的建议,基本能用ccs调试uboot。但是现在仍有一个问题,需要继续请教各位,具体描述如下:
1. 能正常调试具体步骤
(1)在flash中把可以正常启动的uboot.bin烧写进去,上电,然后按enter键,卡住uboot向下挂载。
(2)在能正常启动的uboot源码中davinci.h头文件中添加一个宏定义#define CONFIG_SKIP_LOWLEVEL_INIT,不让cpu初始化(网上这么说的),重新编译uboot源码,然后在ccs下把该工程导入,链接板子,并加载相应的uboot.bin和uboot文件。
(3) 加载完uboot.bin和uboot文件,将寄存器中的pc指针指向/board/davinci/config.mk中TEXT_BASE的值,然后调试,此处的TEXT_BASE(调试代码)和flash中烧写进去的uboot.bin中的TEXT_BASE值是不一样的(看网上得知的)。
按照以上几个步骤进行,可以正常调试,可以在串口中打印出调试信息。
个人理解,ccs中调试uboot,不应该需要在flash中先烧一个可以正常启动的uboot.bin,于是进行如下操作
(1)擦除flash中刚烧写进去的uboot.bin,让flash中什么都没有,然后上电,此时串口无任何信息,由于flash中没有可加载的文件(uboot),所以无信息输出,正常。
(2)把davinci.h文件中,刚才定义#define CONFIG_SKIP_LOWLEVEL_INIT重新注释掉,编译uboot源码,然后在ccs下把该工程导入,链接板子,并加载相应的uboot.bin和uboot文件。
(3)加载完uboot.bin和uboot文件后,将寄存器中的pc指针指向/board/davinci/config.mk中TEXT_BASE的值,然后调试,此时出现问题,无法调试,而且会报错,无法访问的内存等信息。试了很多次,都是无法运行。个人理解,点击运行,应该在串口打印出信息,就像从flash中正常启动一个uboot.bin一样的打印信息。
现在问题是: 在不正常启动一个uboot下,用ccs去调试为啥出问题呢,是我哪里操作有误????希望各位帮忙分析一下,万分感谢。