JZ2440平台移植uboot 2016.11(三)
2018-01-17 10:07
1381 查看
本节中,试着梳理 uboot 的内存分配结构.
内存分配从arch/arm/lib/crt0.S中的_main函数开始
第一部分内存分配
此时,可以看出,全局变量区位于如下示意图
之后开始调用board_init_f
之后,从setup_dest_addr函数开始进一步分配内存空间
之后分配MMU内存
如果定义了LCD, video等,在这之后为他们分配存储空间
下面是为uboot分配存储空间,uboot最后为bss段
gd->relocaddr 停留着这, gd->start_addr_sp继续
下面重新为global data分配存储空间
下面是设置malloc分配空间
经过上面的分配,现在内存分布如下图
到此,内存分布分析便结束了,里面有什么不合适的地方,还请各位朋友指正,非常感谢!
内存分配从arch/arm/lib/crt0.S中的_main函数开始
第一部分内存分配
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) #sp = 0x30000000 + 0x1000
mov r0, sp bl board_init_f_alloc_reserve mov sp, r0 #sp = 0x30001000 - sizeof(struct global_data)
mov r9, r0 bl board_init_f_init_reserve #r9 = 0x30001000 - sizeof(struct global_data)
此时,可以看出,全局变量区位于如下示意图
之后开始调用board_init_f
initcall_run_list(init_sequence_f)
gd->mon_len = (ulong)&__bss_end - (ulong)_start; bss_start = (ulong)&__bss_start; bss_end = (ulong)&__bss_end; text_base = CONFIG_SYS_TEXT_BASE; #__bss_start __bss_end 在代码连接文件中定义 gd->ram_size = PHYS_SDRAM_1_SIZE; #gd->ram_size = 0x04000000
之后,从setup_dest_addr函数开始进一步分配内存空间
gd->ram_top += get_effective_memsize(); gd->relocaddr = gd->ram_top; #gd->ram_top = gd->relocaddr = 0x34000000
之后分配MMU内存
gd->arch.tlb_size = PGTABLE_SIZE; gd->relocaddr -= gd->arch.tlb_size; /* round down to next 64 kB limit */ gd->relocaddr &= ~(0x10000 - 1); gd->arch.tlb_addr = gd->relocaddr;
如果定义了LCD, video等,在这之后为他们分配存储空间
下面是为uboot分配存储空间,uboot最后为bss段
gd->relocaddr -= gd->mon_len; gd->relocaddr &= ~(4096 - 1); gd->start_addr_sp = gd->relocaddr;
gd->relocaddr 停留着这, gd->start_addr_sp继续
gd->start_addr_sp = gd->start_addr_sp - TOTAL_MALLOC_LEN; gd->start_addr_sp -= sizeof(bd_t);
下面重新为global data分配存储空间
gd->start_addr_sp -= sizeof(gd_t); gd->new_gd = (gd_t *)map_sysmem(gd->start_addr_sp, sizeof(gd_t));
gd->start_addr_sp -= 16; gd->start_addr_sp &= ~0xf;
下面是设置malloc分配空间
malloc_start = gd->relocaddr - TOTAL_MALLOC_LEN; mem_malloc_init((ulong)map_sysmem(malloc_start, TOTAL_MALLOC_LEN), TOTAL_MALLOC_LEN);
经过上面的分配,现在内存分布如下图
到此,内存分布分析便结束了,里面有什么不合适的地方,还请各位朋友指正,非常感谢!
相关文章推荐
- JZ2440平台移植uboot 2016.11(一)
- JZ2440平台移植uboot 2016.11(五)
- JZ2440平台移植uboot 2016.11(四)
- JZ2440平台移植uboot 2016.11(六)
- JZ2440平台移植uboot 2016.11(十一)
- JZ2440平台移植uboot 2016.11(二)
- JZ2440平台移植uboot 2016.11(八)
- JZ2440平台移植uboot 2016.11(十)
- UBOOT-2012-10在OK6410平台的移植(三)uboot 2012.10编译配置
- u-boot在nuc972平台上的移植过程(启动篇)
- u-boot-2009.08移植笔记七,平台TQ2440
- Linux开发环境在pxa270平台上的搭建(1)——u-boot移植
- U-Boot在MPC8265平台上的移植与分析【转】
- U-BOOT 6410平台DM9000AE的移植
- S5PV210平台下uboot移植
- u-boot-2016.11移植uboot-spl.bin
- 手把手教你移植u-boot(目标平台S3C2410)
- S3C2440移植 u-boot-2016.11
- UBOOT-2012-10在OK6410平台的移植(四)uboot 2012.10 raise: Signal # 8 caught的问题
- u-boot12.04移植到jz2440 --- 环境变量