2013-11-26 125 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 –