原创 [博客大赛]U-Boot for AM335x (9) u-boot.img的运行

2014-8-27 14:54 3094 15 15 分类: MCU/ 嵌入式 文集: U-Boot

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条评论)

登录后参与讨论
我要评论
0
15
关闭 站长推荐上一条 /2 下一条