如何从 U-Boot 启动裸板二进制文件?
使用U-Bootgo
命令执行任何类型的独立程序。
我们如何从 U-Boot 启动独立的裸板二进制文件(不是使用 U-Boot 环境运行的独立二进制文件,而不是 Linux 内核)。
使用U-Bootgo
命令执行任何类型的独立程序。
...我应该使用“tftp”命令从 LAN 网络加载我的二进制文件。
使用U-Boottftpboot
and go
执行任何类型的独立程序的命令。 (缩写为tftp
命令已被弃用,现在还有一个tftpput
命令。)
这里的问题是,当我使用 go 命令时,我的程序必须使用 U-Boot 服务功能(我的意思是独立的二进制文件将在 U-Boot 环境中运行)...
你被误导了,没有要求你必须“使用U-Boot服务功能".
独立于 U-Boot 构建独立程序,并且它将完全独立于 U-Boot 执行。
但我无法使用 bootm 或 U-Boot 提供的任何其他启动命令启动,因为我的二进制文件不是内核格式。
没有“内核格式”;这就是为什么 U-Boot 使用mkimage
包装器来识别二进制文件。
The bootm
command 是通过指定二进制文件的特性专门针对 Linux 内核等操作系统的启动要求(例如包含命令行参数的缓冲区)而设计的。
使用U-Bootgo
命令来执行任何类型的简单、独立的程序。
如果您在使用时执行二进制文件时遇到问题go
命令,那么问题出在你的程序上,例如控制处理器并初始化其 C 环境。
ADDENDUM
当我使用这个词时独立的程序,我指的是通用定义(又名裸机),而不是U-Boot 特定定义与其有关的例子/目录。
FWIW我用过go
两种“独立”程序的命令。
U-Boot 将其“独立”描述为
* "Standalone Programs" are directly runnable in the environment
* provided by U-Boot; it is expected that (if they behave
* well) you can continue to work in U-Boot after return from
* the Standalone Program.
请注意,U-Boot 环境的使用是可选的。
使用 U-Boot 环境不需要独立程序,特别是在不打算返回 U-Boot 的情况下。
U-Boot 中没有任何东西可以检测或限制独立程序的行为。
如果您无法让您的独立程序与go
命令,那么问题出在你的程序上,而不是出在go
命令。
The go
命令仅传输控制(即,将分支指令转移到指定的内存位置),并且对该代码不施加任何限制或要求(除了对系统操作有意义的内容之外)。
使用在线仿真器 (ICE) 或 JTAG 调试器来解决代码问题,尤其是当您的程序不使用现有堆栈时。
附录2
而不是暧昧go
命令,该mkimage
包装器确实提供了standalone
与使用的图像类型bootm
命令。
See 创建裸机启动映像,但不要期望得到不同的结果go
命令。
使用包装器的优点和bootm
over go
下载的图像(uImage 文件)可以是:
- 识别/验证
iminfo
命令,
- 压缩(例如 gzip、bzip2、lzo)或未压缩。