首页 > 解决方案 > 在 C 中执行 bootm 命令

问题描述

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

过去我很幸运通过它们各自的 C 函数调用命令行函数(如do_mem_cp),但我对bootm命令没有运气。我目前正在做:

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

正如我所说,这在过去适用于其他命令,但在这次通话中我得到了 error "Synchronous Abort" handler, esr 0x96000004。有谁知道从 C 调用 bootm (或类似命令)的更好方法?

编辑:这是为 Jetson TX2i

标签: u-boot

解决方案


do_bootm() 的定义是:

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

如果出现错误,cmdtp 将被取消引用以打印已执行命令的名称。因此,您不应将 NULL 作为 cmdtp 传递。而是填充适当类型的结构并将指针传递给它。


推荐阅读