Chinaunix首页 | 论坛 | 博客
  • 博客访问: 112559
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-23 17:29
文章分类
文章存档

2014年(39)

2013年(10)

我的朋友

分类: 嵌入式

2014-02-07 11:53:51

原文地址:1. gd_t && bd_t 作者:changyongID


uboot汇编后就直接跳入start_armboot中。

start_armboot 在执行一系列的工作之后,最终进入内核。start_armboot这个函数可以说是uboot第二阶段的主干,抓住这条线,来摸清uboot的工作。

对于bootloader的分析,除了流程之外,我感觉最重要的是理清 sdram 和 nandflash 的空间分配。特别是sdram的布局,这对把握bootloader的脉络很关键。

在进入start_armboot之前,先来看两个数据结构。

gd_t 结构,定义在 include/asm-arm/global_data.h中保存了uboot的配置信息

typedef    struct    global_data {
    bd_t        *bd;
    unsigned long    flags;
    unsigned long    baudrate;
    unsigned long    have_console; 

    unsigned long    reloc_off;   
    unsigned long    env_addr;
    unsigned long    env_valid;
    unsigned long    fb_base;  
    void        **jt;    
} gd_t;


bd_t在include/asm-arm/u-boot.h中,定义一些板子的信息

typedef struct bd_info {
    int bi_baudrate;             /*板子串口的波特率 */
    unsigned long bi_ip_addr;    /* 目标板的ip地址,注意为ulong型 */

    unsigned char bi_enetaddr[6]; /* 网卡地址 */
    struct environment_s *bi_env;

    //下面两个参数在进入内核时会做为r1, r2传递给内核
    ulong bi_arch_number;       /* 目标板ID,smdk2410是193 */
    ulong bi_boot_params;       /* 向内核传递参数taglist的地址 */


    struct /*内存信息,起始地址和大小 */
    {
    ulong start;
    ulong size;
    } bi_dram[CONFIG_NR_DRAM_BANKS];
} bd_t;

这里CONFIG_NR_DRAM_BANKS 指的是内存的块数,这里定义为1,即只有一块内存

在进入start_armboot之后,上面的两个数据结构是放在内存中的CFG_GBL_DATA_SIZE这一块的。此时的内
存布局为
在configs/smdk2410中定义的CFG_GBL_DATA_DIZE为128, gd_t 和 bd_t结构放在其中。保证这里分的足够大,能放得下gd_t 和 bd_t.

阅读(713) | 评论(0) | 转发(0) |
0

上一篇:7. bootm命令

下一篇:7. dram_init

给主人留下些什么吧!~~