初级会员
- 积分
- 66
- 金钱
- 66
- 注册时间
- 2020-11-25
- 在线时间
- 20 小时
|
楼主 |
发表于 2020-12-1 10:23:11
|
显示全部楼层
unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc,
char * const argv[])
{
return entry (argc, argv);
}
static int do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
ulong addr, rc;
int rcode = 0;
if (argc < 2)
return CMD_RET_USAGE;
addr = simple_strtoul(argv[1], NULL, 16);
printf ("## Starting application at 0x%08lX ...\n", addr);
/*
* pass address parameter as argv[0] (aka command name),
* and all remaining args
*/
rc = do_go_exec ((void *)addr, argc - 1, argv + 1);
if (rc != 0) rcode = 1;
printf ("## Application terminated, rc = 0x%lX\n", rc);
return rcode;
}
u-boot的go指令应该是这段函数,其实就是把内存addr强制转换成一个函数指针,这个函数使用的是绝对地址跳转,传入的地址处必须包含实际的可执行有效代码,imx文件是包含了特殊头部信息的文件,并不是可执行函数,所以报undefined instruction。。。先胡乱分析一通,后面再慢慢看其它知识吧 |
|