我想在u-boot时执行一些操作(加载一个小固件)
有人知道DRAM在DRAM的开头和结尾占用多少DRAM,
这样我就可以在没有被u-boot占用的未占用DRAM区域加载我的固件?
答案 0 :(得分:3)
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。