init_fnc_t *init_sequence[] = {
cpu_init, /* basic cpu dependent setup */
board_init, /* basic board dependent setup */
interrupt_init, /* set up exceptions */
env_init, /* initialize environment */
init_baudrate, /* initialze baudrate settings */
serial_init, /* serial communications setup */
console_init_f, /* stage 1 init of console */
display_banner, /* say that we are here */
#if defined(CONFIG_DISPLAY_CPUINFO)
print_cpuinfo, /* display cpu info (and speed) */
#endif
#if defined(CONFIG_DISPLAY_BOARDINFO)
checkboard, /* display board info */
#endif
dram_init, /* configure available RAM banks */
display_dram_config,
NULL,
};
init_fnc_t類型如下定義
typedef int (init_fnc_t) (void);
如何調用
在接下來的start_armboot函數中
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
hang ();
}
}
順序調用該類型的各個函數依次初始化
具體調用,依靠make xxx_config時指定體系結構和處理器類型, 編譯時就去指定的目錄下去編譯。
cpu_init()定義在uboot1.1.16/cpu/s3c64xx/cpu.c中,定義中斷棧和快速中斷棧空間的地址
board_init定義在uboot1.1.16/board/samsung/smdk6410/smdk6410.c中,cs8900相關初始化以及全局變量gd中bd的兩個成員初始化
interrupt_init定義在uboot1.1.16/cpu/s3c64xx/interupts.c中,PWM Timer的相關初始化
env_init環境初始化,目前不知道在哪裏定義
init_baudrate初始化波特率,並寫進gd->bd->bi_baudrate中,定義在uboot1.1.16/lib.arm/board.c函數中
serial_init串口初始化,定義uboot1.1.16/cpu/s3c64xx/serial.c
console_init_f重定位之前調用,初始化gd相關成員
display_banner,全是打印信息,打印uboot相關變量,定義在uboot1.1.16/lib.arm/board.c函數中
print_cpuinfo,打印CPU相關信息,uboot1.1.16/cpu/s3c64xx/speed.c
checkboard,打印開發板信息,Board: SMDK6410,定義uboot1.1.16/board/samsung/smdk6410/smdk6410.c
dram_init,DRAM的初始化,這裏只是對gd中的 bi_dram結構中的兩個成員賦值,也即BANK的起始地址和大小,定義uboot1.1.16/board/samsung/smdk6410/smdk6410.c
display_dram_config,打印DRAM的相關信息
NULL,表示數組結束
硬件相關的初始化函數到此結束