在我基于ARM的自定义板上,每当我进行更改(添加一些调试语句/修改)时,我会将u-boot闪存到NAND中。有没有办法直接将uboot映像加载到RAM内存中,而不是每次都刷写它?
对于Linux内核映像,我会将其加载到内存中,并使用bootm引导该映像。类似地,我正在尝试u-boot。请提供您的建议。
对于Linux内核映像,我会将其加载到内存中,并使用bootm引导该映像。类似地,我正在尝试u-boot。请提供您的建议。
source:http://www.denx.de/wiki/view/DULG/CanUBootBeConfiguredSuchThatItCanBeStartedInRAM
请注意(小心)您在修改 U-Boot 时配置的硬件。U-Boot 旨在初始化关键模块,其中一些模块无法在运行时重新配置,或者它们可能无法像在启动时初始化/配置那样执行。
是的,大多数编译结构在U-Boot的末尾提供了一个u-boot.bin文件,这是一个扁平化的二进制文件。如果您的目标支持USB/TFTP或任何其他当前U-Boot可以在目标环境中检测到的介质,那么我们可以将u-boot.bin文件加载到静态内存地址区域。该地址是U-Boot代码的入口点,U-Boot可以通过go 0x<memory_address>
来执行扁平化二进制文件。静态内存地址区域可以从u-boot.map文件中推导出来,该入口点基本上是编译程序的.text区域的地址,通常可以在.map文件中使用字符串“Address of section .text set to 0x.”进行搜索。以下是通过USB执行此操作的示例。
usb start
load usb 0x<memory_address> u-boot.bin
go 0x<memory_address>
这应该可以在不干扰当前代码的情况下从 USB 运行 U-Boot。
这里的问题在于你尝试做的与引导加载程序的哲学相悖。大多数处理器都要求代码从闪存开始运行。那个代码称为引导加载程序。这就是U-boot的作用。
然而,如果你想修改U-boot使其不是真正的引导加载程序,那么你可以做任何你想做的事情。它只是软件。但出于上述原因,不要期望有任何主线支持。
您可以使用USB启动。TI和Freescale提供了他们的USB启动工具。我不知道其他供应商是否也有。
#define CONFIG_SYS_TEXT_BASE 0x11000000
#define CONFIG_RESET_VECTOR_ADDRESS 0x1107fffc
#define CONFIG_SYS_RAMBOOT
- timmins