Board logo

标题: U-Boot启动过程完全分析(8) [打印本页]

作者: yuyang911220    时间: 2015-9-22 16:32     标题: 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)。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0