2013-11-26 51 views
1

我想在u-boot中执行一些操作(加载一个小的固件)。
是否有人知道在DRAM的开始和结束时,u-boot占用多少DRAM,
这样我就可以将我的固件加载到未被u-boot占用的DRAM的未占用区域中?u-boot占用多少DRAM?

回答

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形引导。
某些系统会执行ROM或NOR Flash中的U-Boot,然后U-Boot会将其自身重新定位到RAM。一些(旧?)文档是here

+0

谢谢锯末。在我的设置中,我有 #define CONFIG_SYS_TEXT_BASE 0xFF600000 这是u-boot所在的NOR地址。 RAM的起始地址是 的#define CONFIG_SYS_DDR_BASE 00000000 我的RAM的大小 的#define CONFIG_SYS_DDR_SIZE 256 你能好心帮我,像你上面提到的计算堆栈区? (U-Boot的将在SDRAM,或BASE + SIZE月底开始它的堆栈。所以CONFIG_SYS_TEXT_BASE U型BOOT.BIN的+(大小)和SDRAM的末端之间的区域是可用的堆栈区) –

+0

*“NOR的地址u-boot驻留在哪里“* - 这仅仅是为了存储,还是在原地执行? RAM从0x0开始,只有256的大小似乎不正确。你的主板上有什么SoC? – sawdust

+0

它是就地执行的。它是一个嵌入式系统,具有小型内存。 SOC是MPC8308 –