u-boot - 在 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
解决方案
do_bootm() 的定义是:
extern int do_bootm(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[]);
如果出现错误,cmdtp 将被取消引用以打印已执行命令的名称。因此,您不应将 NULL 作为 cmdtp 传递。而是填充适当类型的结构并将指针传递给它。
推荐阅读
- elasticsearch - 如何将搜索查询参数传递给弹性搜索 url
- mongodb - Elixir 和 mongodb 聚合
- vb.net - VB.NET - 在流关闭之前不发送数据
- r - mutate_all 在 r 中的列表上使用 map 和 case_when / ifelse
- android - 无法进行其他活动
- python - 欧几里得 GCD 函数返回类型 None 而不是 int
- c++ - Steam 和 Blizzard Launcher 之类的东西如何在不使用默认操作系统窗口的情况下创建 GUI?
- python - 'list' 对象不可调用,试图访问列表中的项目并将其分配给对象
- kotlin - Spring DataJpaTest 中的 Kotlin 协程
- excel - 等到在 Outlook 中发送电子邮件,然后再移动到下一个单元格行