如何从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服务函数”。独立构建您的程序与U-Boot无关,并且它将完全独立于U-Boot执行。
但是我无法使用bootm或U-Boot提供的任何其他引导命令来启动,因为我的二进制文件不是内核格式。
没有“内核格式”;这就是为什么U-Boot使用mkimage包装器来识别二进制文件的原因。
bootm命令专门设计用于满足操作系统(例如Linux内核)的引导要求(例如包含命令行参数的缓冲区),通过指定二进制文件的特征。
使用U-Boot的go命令执行任何类型的简单独立程序。
如果在使用go命令执行二进制文件时遇到问题,则问题出在您的程序上,例如控制处理器并初始化其C环境。
附录
当我使用术语独立程序时,我指的是通用定义(也称为裸机),而不是与其示例/目录相关的U-Boot特定定义。
顺便说一句,我已经使用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
命令。
go
命令仅仅是传输控制(即跳转指令到指定的内存位置),对该代码没有任何限制或要求(除了系统操作方面的合理要求)。
使用电路仿真器(ICE)或JTAG调试器解决代码问题,特别是当您的程序不使用现有堆栈时。
附录2
与模糊不清的go
命令不同,mkimage
包装器提供了standalone
镜像类型,可用于bootm
命令。
请参见创建裸机引导映像,但不要期望与go
命令有不同的结果。
使用包装器和bootm
的优点在于已下载的映像(uImage文件)可以:
- 使用
iminfo
命令进行识别/验证,
- 压缩(例如gzip、bzip2、lzo)或未压缩。
tftpboot
е’Њgo
е‘Ң令жқӨ执иҰЊд»»дҢ•з±»еһ‹зљ„独立程еғЏгЂ‚иҮ·еЏ‚иЂѓhttp://stackoverflow.com/questions/15340089/how-to-run-custom-kernel-on-beaglebone/15375308#15375308гЂ‚ - undefined