标题:
U-Boot启动过程完全分析(8)
[打印本页]
作者:
yuyang911220
时间:
2015-9-22 16:32
标题:
U-Boot启动过程完全分析(8)
(
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
)。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0