http://www.360doc.com/content/12/0825/03/7775902_232197662.shtml
在函数中board_init_f()中,进行了一系列的初始化,主要通过调用初始化序列中的函数来实现。
初始化序列定义如下,这里只留下了我用到的初始化函数:
init_fnc_t *init_sequence[] = {
get_clocks,
init_timebase,
env_init,
init_baudrate,
serial_init,
console_init_f,
display_options,
checkcpu,
checkboard,
init_func_i2c,
init_func_ram,
NULL, /* Terminate this list */
};
下面逐个对这些函数进行说明:
get_clocks在文件./include/common.h中定义,在文件./cpu/mpc824x/Speed.c中实现,用于设置global_data中的gd->cpu_clk和gd->bus_clk。
init_timebase在文件./include/common.h中定义,在文件./lib_ppc/time.c中实现,用于设置Time Base寄存器TBU和TBL,将其都设置成0。
env_init在文件./include/common.h中定义,在文件./common/Env_flash.c中实现,用于设置global_data中的gd->env_addr和gd->env_valid。
init_baudrate在文件./lib_ppc/board.c中定义和实现,用于设置global_data中的gd->baudrate。
serial_init在文件./include/common.h中定义,在文件./drivers/serial.c中实现,通过调用函数 NS16550_init,对UART相关的寄存器进行初始化。NS16550_init在文件./include/ns16550.h中定义,在文件. /drivers/ns16550.c中实现。
console_init_f在文件./include/common.h中定义,在文件./common/console.c中实现,用于设置global_data中的gd->have_console。
display_options在文件./include/common.h中定义,在文件./lib_generic/display_options.c中实现,用于打印版本信息version_string。
checkcpu在文件./include/common.h中定义,在文件./cpu/mpc824x/cpu.c中实现,用于检测并打印CPU版本、CPU时钟频率、Cache大小等信息。
checkboard在文件./include/common.h中定义,在文件. /board/sandpoint/sandpoint.c中实现,用于打印板子名称等信息。
init_func_i2c在文件./include/common.h中定义和实现。其中调用i2c_ini,用于初始化I2C单元相关的寄存器。 i2c_init在文件./include/i2c.h中定义,在文件./cpu/mpc824x/drivers/i2c/i2c.c中实现。
init_func_ram在文件./lib_ppc/board.c中定义和实现。其中调用initdram,initdram在文件. /include/common.h中定义,在文件. /board/sandpoint/sandpoint.c中实现。Initdram又调用get_ram_size,get_ram_size在在文 件./include/common.h中定义,在文件. /common/memsize.c中实现,用于检测实际可用RAM的大小。【get_ram_size函数首先将特定的数据分别写入地址 0,1,2,4,8,……处,然后依次读出。如果读出的数据和之前写入的数据一致,则可用内存大小倍增,如果不一致,则说明该内存位置不可用,以后的就不 再检测了。这样可用的内存大小就是(0,1,2,4,8,……)×sizeof(long)中的某一个值。之后,init_func_ram打印可用 RAM大小】【此为UBOOT检测内存大小的原理】。