TI中文支持网
TI专业的中文技术问题搜集分享网站

u-boot运行到spl_relocate_stack_gd()函数的时候卡死。

TI Support 你好,

            最近调试自己的单板,发现使用uart加载u-boot-spl之后,板子卡死,没有任何输出,然后通过在程序中添加uart打印消息,

发现:程序卡死在spl_relocate_stack_gd()这个函数里面,之后看了下注释说这个函数是将GD信息复制到DDR堆栈当中(DDR应该是在sdram_init()中初始化好了

的),那这样的话是不是代表我的DDR初始化并没有成功,才导致我要往上面copy数据的时候挂死?

           谢谢。

ulong spl_relocate_stack_gd(void)
{
puts("debug: entry spl_relocate_stack_gd()\n");
#ifdef CONFIG_SPL_STACK_R
gd_t *new_gd;
ulong ptr = CONFIG_SPL_STACK_R_ADDR;

#ifdef CONFIG_SPL_SYS_MALLOC_SIMPLE
if (CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN) {
if (!(gd->flags & GD_FLG_SPL_INIT))
panic_str("spl_init must be called before heap reloc");

ptr -= CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN;
gd->malloc_base = ptr;
gd->malloc_limit = CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN;
gd->malloc_ptr = 0;
}
preloader_console_init();
puts("debug: flg1\n");
#endif
/* Get stack position: use 8-byte alignment for ABI compliance */
ptr = CONFIG_SPL_STACK_R_ADDR – roundup(sizeof(gd_t),16);
new_gd = (gd_t *)ptr;
memcpy(new_gd, (void *)gd, sizeof(gd_t));
#if !defined(CONFIG_ARM)
gd = new_gd;
#endif
return ptr;
#else
return 0;
#endif
puts("debug: exit spl_relocate_stack_gd()\n");

}

Shine:

SPL是跑在内部ram上的,先通过sd卡,或者JTAG口把SPL下载到ram中运行, 看看在uart上是否有打印信息。

yang song4:

回复 Shine:

嗯,是的,我在spl代码中,比较早的初始化了UART,所以前面是有打印的,通过打印,可以确定的是,cpu运行到这个函数内就挂死了。这个函数是跟DDR堆栈有关,所以我想问下,为什么cpu会挂在这儿?

赞(0)
未经允许不得转载:TI中文支持网 » u-boot运行到spl_relocate_stack_gd()函数的时候卡死。
分享到: 更多 (0)