【问题标题】:Is a software image loaded into non-volatile RAM when using tftpboot from U-boot?从 U-boot 使用 tftpboot 时是否将软件映像加载到非易失性 RAM 中?
【发布时间】:2017-01-21 13:55:10
【问题描述】:

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

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

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

这些图片去哪里了?

我知道我正在指定一个 loadaddr,但我不完全理解其含义。

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

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

感觉就像我正在破坏记忆,但我认为重启电源后任何 tftp 都会丢失。

但问题仍然存在于电源循环中。

【问题讨论】:

    标签: ram u-boot tftp


    【解决方案1】:

    这些图片去哪里了?

    U-Boot 命令语法为:

    tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
    

    您可以将内存目标地址显式指定为 loadAddress 参数。

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

    我知道我正在指定一个 loadaddr,但我不完全理解其含义。

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

    loadAddress 只是内存中的起始地址,传输的文件将写入该地址。
    对于独立应用程序,此 loadAddress 应与用于链接此程序的 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  
    

    执行程序。


    我假设重启后任何 tftp'd 都会丢失。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多