在C中执行bootm命令

问题描述

对于上下文,我一直在为项目的u-boot添加一些补丁,并且已经将内核映像,设备树blob和initrd映像加载到u-boot内存中。

我过去通过各自的C函数调用命令行函数(如do_mem_cp)很幸运,但是我对bootm命令却不满意。我目前正在做:

char *argv[4] = {"bootm","a5001000","b0000000","a9000000"};
do_bootm(NULL,4,argv);

正如我所说,这过去在其他命令中仍然有效,但是在此调用过程中,我得到了错误"Synchronous Abort" handler,esr 0x96000004。有谁知道从C调用bootm(或类似命令)的更好方法

编辑:这是针对Jetson TX2i

解决方法

do_bootm()的定义是:

extern int do_bootm(struct cmd_tbl *cmdtp,int flag,int argc,char *const argv[]);

在发生错误的情况下,将取消引用cmdtp以打印已执行命令的名称。因此,您不应将NULL作为cmdtp传递。而是填充适当类型的结构并向其传递指针。