在介绍该函数之前,我们需要看一看几个数据结构,这些是 u-boot 中几个重要的数据结构:
1)、 gd_t 该数据结构保存了 u-boot 需要的配置信息(我暂时称它为全局信息表),
typedef struct global_data {
bd_t *bd; //与板子相关的结构,见下面
unsigned long flags;
unsigned long baudrate; //波特率
unsigned long have_console; /* serial_init() was called */
unsigned long reloc_off; /* Relocation Offset,重定位偏移 */
unsigned long env_addr; /* Addressof Environment struct ,存放环境变量结构的地址*/
unsigned long env_valid; /* Checksum of Environment valid? */
#ifdef CONFIG_VFD//我们一般没有配置这个,这个是 frame buffer 的首地址
unsigned long fb_base; /* base address of frame buffer,显存缓存区 基址*/
#endif
#if 0
unsigned long cpu_clk; /* CPU clock in Hz! CPU 的时钟频率*/
unsigned long bus_clk; //总线的时钟频率
unsigned long ram_size; /* RAM size, RAM 的大小*/
unsigned long reset_status; /* reset status register at boot */
#endif
void**jt;/* jump table ,保存着些函数的入口地址,在 common/Exports.c 中进行填充*/
} gd_t;
2)、 bd_t 保存与板子相关的配置参数
typedef struct bd_info {
int bi_baudrate; /* serial console baudrate ,串口波特率 */
unsigned long bi_ip_addr; /* IP Address ,IP 地址*/
unsigned char bi_enetaddr[6]; /* Ethernet adress ,以太网地址*/
struct environment_s *bi_env; //环境变量地址指针
ulong bi_arch_number; /* unique id for this board架构号码*/
ulong bi_boot_params; /* where this board expects params */
struct /* RAM configuration */
{
ulong start; //RAM 的起始地址
ulong size; //RAM 的大小
} bi_dram[CONFIG_NR_DRAM_BANKS];
} bd_t;
3). 初始化函数列表(以数组的形式)
init_fnc_t *init_sequence[] = {
cpu_init, /* basic cpu dependent setup|| cpu/arm920t/cpu.c ,cpu 的初始化,有待于分析*/
//这个是对板子的初始化,
board_init, /* basic board dependent setup|| board/smdk2440/smdk2440.c */
interrupt_init,/* set up exceptions || cpu/arm920t,s3c24x0/interrupts.c */
env_init, /* initialize environment */
init_baudrate,/* initialze baudrate settings */
serial_init,/* serial communications setup || cpu/arm920t/s3c24x0/serial.c */