首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

U-Boot启动过程完全分析(8)

U-Boot启动过程完全分析(8)

2bd_t结构体


bd_t
include/asm-arm.u/u-boot.h中定义如下:

typedef struct bd_info {

int
bi_baudrate;

/*
串口通讯波特率 */

unsigned long
bi_ip_addr;

/* IP
地址*/

structenvironment_s

*bi_env;
/*
环境变量开始地址 */

ulong

bi_arch_number;
/*
开发板的机器码 */

ulong

bi_boot_params;
/*
内核参数的开始地址 */

struct
/* RAM
配置信息 */

{


ulongstart;


ulongsize;



}bi_dram[CONFIG_NR_DRAM_BANKS];

} bd_t;

U-Boot
启动内核时要给内核传递参数,这时就要使用gd_tbd_t结构体中的信息来设置标记列表。

3init_sequence数组


U-Boot
使用一个数组init_sequence来存储对于大多数开发板都要执行的初始化函数的函数指针。init_sequence数组中有较多的编译选项,去掉编译选项后init_sequence数组如下所示:

typedef int (init_fnc_t) (void);


init_fnc_t *init_sequence[] = {

board_init,


/*
开发板相关的配置--board/samsung/mini2440/mini2440.c */

timer_init,
/*
时钟初始化-- cpu/arm920t/s3c24x0/timer.c */

env_init,

/*
初始化环境变量--common/env_flash.c common/env_nand.c*/

init_baudrate,
/*
初始化波特率-- lib_arm/board.c */

serial_init,
/*
串口初始化-- drivers/serial/serial_s3c24x0.c*/

console_init_f,
/*
控制通讯台初始化阶段1-- common/console.c */

display_banner,
/*
打印U-Boot版本、编译的时间-- gedit lib_arm/board.c */

dram_init,
/*
配置可用的RAM-- board/samsung/mini2440/mini2440.c */

display_dram_config,
/*
显示RAM大小-- lib_arm/board.c*/

NULL,

};


其中的board_init函数在board/samsung/mini2440/mini2440.c中定义,该函数设置了MPLLCOMUPLLCON,以及一些GPIO寄存器的值,还设置了U-Boot机器码和内核启动参数地址

/* MINI2440开发板的机器码 */
gd->bd->bi_arch_number = MACH_TYPE_MINI2440;


/* 内核启动参数地址 */
gd->bd->bi_boot_params = 0x30000100;


其中的dram_init函数在board/samsung/mini2440/mini2440.c中定义如下:

int dram_init (void)
{

/*
由于mini2440只有 */

gd->bd->bi_dram[0].start= PHYS_SDRAM_1;


gd->bd->bi_dram[0].size= PHYS_SDRAM_1_SIZE;




return 0;

}
mini2440使用232MBSDRAM组成了64MB的内存,接在存储控制器的BANK6,地址空间是0x30000000~0x34000000

include/configs/mini2440.hPHYS_SDRAM_1PHYS_SDRAM_1_SIZE 分别被定义为0x300000000x0400000064M)。
继承事业,薪火相传
返回列表