U-Boot for AM335x (9) u-boot.img的运行
当u-boot.img在SDRAM中运行后,它从board_init_f开始,执行一系列初始化动作,它的位置在:
arch/arm/lib/board.c
包含语句:
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
hang ();
}
}
init_sequence是函数指针数组,它包含了各种各样的初始化动作,timer、serial、console、i2c、dram等等:
init_fnc_t *init_sequence[]
数组元素之init_func_i2c,会打印出“I2C: ready”
board_init_f还会调用下面两个比较重要的函数:
dram_init_banksize();
display_dram_config(); /* and display it */
之后会打印出“DRAM: 512 MiB”
之后再调用board_init_r,注意它和spl中同名函数的区别,这个board_init_r的位置在:
arch/arm/lib/board.c
而之前调试spl时出现的board_init_r在:
common/spl/spl.c
board_init_r会调用一大堆的初始化函数,并最终进入mainloop。下面是对其中被调用函数的说明:
1、board_init()
由用户定义在target目录下,它主要完成的工作是执行hw_watchdog_init和gpmc_init(未执行,因暂时没有用到NAND/NOR FLASH)。
2、mmc_initialize(gd->bd)U-Boot#
初始化SD卡(更接近注册的功能?)
3、int board_late_init(void)
4、int board_eth_init(bd_t *bis)
初始化网络接口,由于前面调试spl的时候清理得太彻底了,这个地方被卡住了,因此将这个函数的内容直接注释掉,直接返回。
此时就能在kermit上面看到提示符了:
U-Boot#
文章评论(0条评论)
登录后参与讨论