如何从U-Boot启动裸板二进制文件?

时间:2016-02-12 12:05:50

标签: u-boot

我们如何从U-Boot启动独立的裸板二进制文件(不是使用U-Boot环境而不是linux内核运行的独立二进制文件)。我的要求是使用我的二进制文件重新初始化电路板和驱动程序......

我可以用我的二进制文件替换引导介质(此处为NOR Flash)中的U-Boot,但我的要求是不要从NOR闪存中删除U-boot,我应该使用"从LAN网络加载我的二进制文件。 TFTP"命令。

谢谢和问候, Veerendranath

2 个答案:

答案 0 :(得分:4)

  

如何从U-Boot启动裸板二进制文件?

使用U-Boot的go命令执行任何类型的独立程序。

  

我们如何从U-Boot启动独立的裸板二进制文件(不是使用U-Boot环境而不是linux内核运行的独立二进制文件)。

使用U-Boot的go命令执行任何类型的独立程序。

  

...我应该使用" tftp"从LAN网络加载我的二进制文件。命令。

使用U-Boot的tftpbootgo命令执行任何类型的独立程序。 (缩写tftp命令已被弃用,因为它还有tftpput命令。)

  

这里的问题是当我使用go命令时我的程序必须使用U-Boot服务功能(我的意思是独立的二进制文件将在U-Boot环境中运行)...

您被误导,并不要求您必须<使用U-Boot服务功能&#34;。
独立于U-Boot构建独立程序,它将完全独立于U-Boot执行。

  

但我无法使用bootm或U-Boot提供的任何其他启动命令启动,因为我的二进制文件不是内核格式。

没有&#34;内核格式&#34; ;这就是为什么U-Boot使用mkimage包装器来识别二进制文件的原因 bootm命令是专门为Linux内核(例如包含命令行参数的缓冲区)等操作系统的引导要求而设计的,通过指定二进制文件的特征。 使用U-Boot的go命令执行任何类型的简单独立程序。

如果在使用go命令时执行二进制文件时遇到问题,则问题在于您的程序,例如控制处理器并初始化其C环境。

<强>附录
当我使用术语独立程序时,我指的是generic definition(也称为裸机),而不是与其示例相关的U-Boot-specific definition / 目录。
FWIW我已经将go命令用于两种&#34;独立&#34;节目。
U-Boot描述了它的独立&#34;如

 * "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命令。
go命令仅将控制(即分支指令)转移到指定的存储器位置,并且对该代码没有任何限制或要求(除了对系统操作有意义的除外)。

使用在线仿真器(ICE)或JTAG调试器来解决代码问题,尤其是当您的程序不使用现有堆栈时。

ADDENDUM 2
go包装器确实提供mkimage图像类型,而不是模糊standalone命令,以便与bootm命令一起使用。
请参阅Creating a bare metal boot image,但不要期望go命令产生不同的结果 使用包装器和bootm超过go的优点是下载的图像(uImage文件)可以是:

  • 使用iminfo命令
  • 进行识别/验证
  • 压缩(例如gzip,bzip2,lzo)或未压缩。

答案 1 :(得分:0)

  1. 您可以使用fsbl,bitstream,uboot.elf和应用程序创建boot.bin。然后闪入QSPI闪存并选择从中启动。
  2. 或者您可以从TFTP引导。在这里,您需要仅使用fsb,bitstream和uboot.elf创建boot.bin。您需要更改uboot头文件以强制其从tftp引导,例如tftpboot 0x0 hello.elf。一旦启动,它将使用tftp捕获elf / bin文件,并使用bootelf或go命令启动板。
  3. 如果有SD卡,则可以从SD卡引导。