(2)bd_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_t,bd_t结构体中的信息来设置标记列表。
(3)init_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中定义,该函数设置了MPLLCOM,UPLLCON,以及一些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使用2片32MB的SDRAM组成了64MB的内存,接在存储控制器的BANK6,地址空间是0x30000000~0x34000000。
在include/configs/mini2440.h中PHYS_SDRAM_1和PHYS_SDRAM_1_SIZE 分别被定义为0x30000000和0x04000000(64M)。 |