博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uboot移植-内存分布
阅读量:4070 次
发布时间:2019-05-25

本文共 2504 字,大约阅读时间需要 8 分钟。

转自:http://blog.csdn.net/hailin0716/article/details/18504693

设置堆栈 uboot内存使用图

 1、uboot第一阶段start.S

       设置堆栈

       stack_setup:

                 ldr   r0, _TEXT_BASE            /* upper 128 KiB: relocated uboot   */

                 sub  r0, r0, #CONFIG_SYS_MALLOC_LEN   /* malloc area                */

                 sub  r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /*  跳过全局数据区               */

       #ifdef CONFIG_USE_IRQ

                sub  r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)

     #endif

                 sub  sp, r0, #12           /* leave 3 words for abort-stack    */只要将sp指针指向一段没有被使用的内存就完成栈的设置了。

 

注:在配置文件tx244.h定义

             #define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 128*1024)=192Kbyte

             #define CONFIG_SYS_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */

            #define CONFIG_ENV_SIZE   0x20000

 

2、uboot第二阶段 start_armboot()

      设置全局变量gd

        gd = (gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t));

       __asm__ __volatile__("": : :"memory");

        memset ((void*)gd, 0, sizeof (gd_t));//将gd所指向内存区域的前gd_t所需空间  置零

        gd->bd = (bd_t*)((char*)gd - sizeof(bd_t)); //申请bd_t区间
        memset (gd->bd, 0, sizeof (bd_t));

        gd->flags |= GD_FLG_RELOC; //Code was relocated to RAM   表示代码已经搬运到RAM中

        monitor_flash_len = _bss_start - _armboot_start;//计算uboot代码length

 

      根据上面的代码可以知道U-Boot内存使用情况了,如下图所示:

                        

         注:1、用户堆区_bss_start、_end地址如何得到?根据uboot.lds链接脚本,知道分布位置。但具体地址由编译后得到。             

                   uboot.lds内容:

                  OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

                   OUTPUT_ARCH(arm)
                   ENTRY(_start)
                   SECTIONS
                   {
                     。。。。。。。。。。。。。。。。。

                    . = ALIGN(4);

                   __bss_start = .;
                 .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
                 _end = .;
                  }

               2、查看uboot.map编译后地址

                 

                                                                          _bss_start地址

 

                

                                                 _end地址

其中1、gd_t结构说明:

[csharp]   
  1. typedef struct  global_data {  
  2.     bd_t        *bd;  
  3.     unsigned long   flags;  
  4.     unsigned long   baudrate;  
  5.     unsigned long   have_console;   /* serial_init() was called */  
  6.     unsigned long   env_addr;   /* Address  of Environment struct */  
  7.     unsigned long   env_valid;  /* Checksum of Environment valid? */  
  8.     unsigned long   fb_base;    /* base address of frame buffer */  
  9. #ifdef CONFIG_VFD  
  10.     unsigned char   vfd_type;   /* display type */  
  11. #endif  
  12. #ifdef CONFIG_FSL_ESDHC  
  13.     unsigned long   sdhc_clk;  
  14. #endif  
  15. #if 0  
  16.     unsigned long   cpu_clk;    /* CPU clock in Hz!     */  
  17.     unsigned long   bus_clk;  
  18.     phys_size_t ram_size;   /* RAM size */  
  19.     unsigned long   reset_status;   /* reset status register at boot */  
  20. #endif  
  21.     void        **jt;       /* jump table */  
  22. } gd_t;  

           2、bd_t结构说明:

[csharp]   
  1. typedef struct bd_info {  
  2.     int         bi_baudrate;    /* serial console baudrate */  
  3.     unsigned long   bi_ip_addr; /* IP Address */  
  4.     struct environment_s           *bi_env;  
  5.     ulong           bi_arch_number; /* unique id for this board */  
  6.     ulong           bi_boot_params; /* where this board expects params */  
  7.     struct              /* RAM configuration */  
  8.     {  
  9.     ulong start;  
  10.     ulong size;  
  11.     }           bi_dram[CONFIG_NR_DRAM_BANKS];  
  12. } bd_t;  
你可能感兴趣的文章
《软件体系结构》 第十章 软件产品线体系结构
查看>>
《软件过程管理》 第六章 软件过程的项目管理
查看>>
《软件过程管理》 第九章 软件过程的评估和改进
查看>>
《软件过程管理》 第八章 软件过程集成管理
查看>>
分治法 动态规划法 贪心法 回溯法 小结
查看>>
《软件体系结构》 练习题
查看>>
《数据库系统概论》 第一章 绪论
查看>>
《数据库系统概论》 第二章 关系数据库
查看>>
《数据库系统概论》 第三章 关系数据库标准语言SQL
查看>>
SQL语句(二)查询语句
查看>>
SQL语句(六) 自主存取控制
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>
堆排序完整版,含注释
查看>>
二叉树深度优先遍历和广度优先遍历
查看>>
生产者消费者模型,循环队列实现
查看>>
PostgreSQL代码分析,查询优化部分,process_duplicate_ors
查看>>
PostgreSQL代码分析,查询优化部分,canonicalize_qual
查看>>
PostgreSQL代码分析,查询优化部分,pull_ands()和pull_ors()
查看>>
ORACLE权限管理调研笔记
查看>>
移进规约冲突一例
查看>>