我们如何从U-Boot启动独立的裸板二进制文件(不是使用U-Boot环境而不是linux内核运行的独立二进制文件)。我的要求是使用我的二进制文件重新初始化电路板和驱动程序......
我可以用我的二进制文件替换引导介质(此处为NOR Flash)中的U-Boot,但我的要求是不要从NOR闪存中删除U-boot,我应该使用"从LAN网络加载我的二进制文件。 TFTP"命令。
谢谢和问候, Veerendranath
答案 0 :(得分:4)
如何从U-Boot启动裸板二进制文件?
使用U-Boot的go
命令执行任何类型的独立程序。
我们如何从U-Boot启动独立的裸板二进制文件(不是使用U-Boot环境而不是linux内核运行的独立二进制文件)。
使用U-Boot的go
命令执行任何类型的独立程序。
...我应该使用" tftp"从LAN网络加载我的二进制文件。命令。
使用U-Boot的tftpboot
和go
命令执行任何类型的独立程序。 (缩写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
命令答案 1 :(得分:0)