OK6410 uboot1.1.16的board.c相关函数分析(init_sequence)

本文详细分析了OK6410 uboot1.1.16版本中board.c的init_sequence初始化序列,涵盖了从基本的CPU设置、板级初始化到中断处理、环境变量初始化、串口配置等多个环节。每个初始化函数的职责和实现位置都进行了说明,包括在不同源文件中的定义,如cpu_init、board_init、interrupt_init等。通过对这些函数的调用,UBoot完成了对硬件的全面初始化。

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,表示数组结束

硬件相关的初始化函数到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值