从 U-boot 使用 tftpboot 时,软件映像是否加载到非易失性 RAM 中?

Is a software image loaded into non-volatile RAM when using tftpboot from U-boot?

我有一个连接到 RHEL 工作站的 Xilinx 开发板。

我通过 JTAG 加载了 U-boot 并使用 minicom 连接到它。

然后我 tftpboot helloworld 独立应用程序。

这些图片去了哪里?

我知道我在指定一个loadaddr,但是我不完全理解它的意思。

当我 运行 独立应用程序时,我在串行控制台上得到各种输出。

我第一次让它正常工作,但后来在构建时开始尝试不同的东西。

感觉好像我在破坏记忆,但我认为在电源循环后任何 tftp 都会丢失。

问题仍然是通过电源循环出现的。

Where do these images go?

U-Boot 命令语法为:

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

您可以明确指定内存目标地址作为 loadAddress 参数。

当命令中省略loadAddress参数时,内存目标地址默认为环境变量loadaddr.
的值 请注意,其他几个 U-Boot 命令也使用此 loadaddr 变量,例如“bootp”、“rarpboot”、“loadb”和“diskboot”。

I understand I am specifying a loadaddr, but I don't fully understand the meaning.

When I run the standalone application, I get various outputs on the serial console.

loadAddress 只是内存中的起始地址,传输的文件将写入该地址。
对于独立应用程序,此 loadAddress 应与用于 link 此程序的 CONFIG_STANDALONE_LOAD_ADDR 相匹配。

同样,执行此独立应用程序的“go”命令也应使用相同的 CONFIG_STANDALONE_LOAD_ADDR。


例如,假设您的开发板的物理内存从 0x20000000 开始。
为了让程序使用最大数量的可用内存,程序配置为开始于:

#define CONFIG_STANDALONE_LOAD_ADDR        0x20000000

为了加载方便,定义环境变量(在U​​-Boot提示符下):

setenv loadaddr 0x20000000   

假设serverip变量定义了TFTP服务器的IP地址,那么U-Boot命令

tftpboot hello_world.bin  

应该从服务器检索该文件,并将其存储在 0x20000000。
使用

go 20000000  

执行程序。


I assumed after a power cycle anything tftp'd would be lost.

应该。
但是,在电源循环之后可能会在“易失性”内存中持续存在的内容是不可预测的。您也不能确定默认值,例如全零或全一。动态 RAM 的内容应该始终被假定为未知,除非你知道它已经被初始化并被写入。

Is a software image loaded into non-volatile RAM when using tftpboot from U-boot?

仅当您的电路板具有非易失性主存储器(例如铁氧体磁芯或电池供电的 SRAM,这不太可能)。
您可以使用“md”(内存显示)命令来检查 RAM。