Uboot中start.S原始碼的指令級的詳盡解析(二)
阿新 • • 發佈:2019-02-01
2.2. Uboot中的記憶體的Layout
總結了start.S做的事情之後,另外想在此總結一下,uboot中,初始化部分的程式碼執行後,對應的記憶體空間,都是如何規劃,什麼地方放置了什麼內容。此部分內容,雖然和start.S沒有直接的關係,但是start.S中,堆疊sp的計算等,也和這部分內容有關。
下面這部分的uboot的記憶體的layout,主要是根據:
- start.S中關於設定堆疊指標的部分的程式碼
/* Set up the stack */ stack_setup: ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */ sub r0, r0, #CFG_MALLOC_LEN /* malloc area */ sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo */ #ifdef CONFIG_USE_IRQ sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ) #endif sub sp, r0, #12 /* leave 3 words for abort-stack */ bl clock_init
u-boot-1.1.6_20100601\opt\EmbedSky\u-boot-1.1.6\cpu\arm920t\cpu.c
中的程式碼int cpu_init (void) { /* * setup up stacks if necessary */ #ifdef CONFIG_USE_IRQ IRQ_STACK_START = _armboot_start - CFG_MALLOC_LEN - CFG_GBL_DATA_SIZE - 4; FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ; FREE_RAM_END = FIQ_STACK_START - CONFIG_STACKSIZE_FIQ - CONFIG_STACKSIZE; FREE_RAM_SIZE = FREE_RAM_END - PHYS_SDRAM_1; #else FREE_RAM_END = _armboot_start - CFG_MALLOC_LEN - CFG_GBL_DATA_SIZE - 4 - CONFIG_STACKSIZE; FREE_RAM_SIZE = FREE_RAM_END - PHYS_SDRAM_1; #endif return 0; }
u-boot-1.1.6_20100601\opt\EmbedSky\u-boot-1.1.6\board\EmbedSky\config.mk
中的定義TEXT_BASE = 0x33D00000
分析而得出的。
uboot的記憶體的layout,用圖表表示就是:
圖 2.1. Uboot中的記憶體的Layout