作者:付汉杰,hankf@xilinx.com,文章转载自:博客园
UBoot作为boot loader,默认留给malloc分配的内存的大小有限。这个大小由宏TOTAL_MALLOC_LEN定义。它在include\Common.h文件里,从宏CONFIG_SYS_MALLOC_LEN派生出来。
初始化过程中,从board\xilinx\zynqmp\Board_r.c的initr_malloc( )开始,调用common\Dlmalloc.c中的mem_malloc_init( ),初始化了三个全局变量:mem_malloc_start,mem_malloc_end, mem_malloc_brk。
分配内存时,sbrk()分配内存,并增加mem_malloc_brk的值;如果mem_malloc_brk超出范围,就报告错误。
因此,增大CONFIG_SYS_MALLOC_LEN的值,可以增加增加UBoot的malloc分配的内存大小。
另外malloc_simple.c里的alloc_simple是UBoot在没有搬运之前,简单的malloc的实现。其中,gd->malloc_base是可用内存的开始地址, gd->malloc_ptr是当前可用的memory地址, gd->malloc_limit是可用内存的结束地址。