我想在 u-boot 中执行一些操作(加载一个小固件)。
有谁知道u-boot在DRAM的开头和结尾占用了多少DRAM,
这样我就可以在 DRAM 未被 u-boot 占用的未占用区域加载我的固件?
最佳答案
U-Boot 是可配置的,因此答案取决于您的具体构建。 配置到 U-Boot 中的命令和功能将决定其实际大小。通常,U-Boot 被构建为驻留在主内存的上部/执行,而低内存的其余部分可用于任何用途。
在主板的配置文件中,CONFIG_SYS_TEXT_BASE
的定义设置 U-Boot 的起始地址。 (旧版本的 U-Boot 有不同的方法来指定此起始地址符号。)
检查生成的 System.map 文件(与 u-boot.bin 可执行文件位于同一目录中)以查找链接器分配给每个入口点的地址。
在你的开发板的配置文件中,还有类似的内容:
#define CONFIG_SYS_SDRAM_BASE ATMEL_BASE_CS6
#define CONFIG_SYS_SDRAM_SIZE 0x08000000
定义主存的物理地址范围。
U-Boot 将在 SDRAM 或 BASE+SIZE 末尾启动其堆栈。
所以CONFIG_SYS_TEXT_BASE
+(u-boot.bin的大小)和SDRAM末尾之间的区域是可用的堆栈区域。
U-Boot 还将使用 CONFIG_SYS_TEXT_BASE
下面的内存作为其 malloc()
池。该区域的大小由 CONFIG_SYS_MALLOC_LEN
定义。
所以CONFIG_SYS_SDRAM_BASE
和
之间的内存
CONFIG_SYS_TEXT_BASE
-CONFIG_SYS_MALLOC_LEN
应该可用。
附录
上述注释适用于在主内存(即 DRAM)中加载和执行的 U-Boot。
有些系统在 ROM 或 NOR Flash 中执行 U-Boot,然后 U-Boot 会将自身重新定位到 RAM。一些(旧的?)文档是 here .
关于memory - u-boot 占用多少 DRAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20208171/