u-boot


 

init_fnc_t *init_sequence[] = {

#if defined(CONFIG_ARCH_CPU_INIT)

arch_cpu_init, /* basic arch cpu dependent setup */

#endif

timer_init, /* initialize timer before usb init */

board_init, /* basic board dependent setup */

#if defined(CONFIG_USE_IRQ)

interrupt_init, /* set up exceptions */

#endif

// timer_init, /* initialize timer */

#ifdef CONFIG_FSL_ESDHC

get_clocks,

#endif

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

#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)

init_func_i2c,

#endif

dram_init, /* configure available RAM banks */

#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI)

arm_pci_init,

#endif

/* display_dram_config */

NULL,

};

1 初始化函数解析

timer_init

SYS_CTRL_REG_BASE + REG_SC_CTRL
系统定时器的的设置

board_init

1 set uart clk form XTAL OSC 24M
2

2 一些关键的要点

2.1 DECLARE_GLOBAL_DATA_PTR

这个宏在include/global_data.h中,

#define DECLARE_GLOBAL_DATA_PTR registter volatile gd_t *gd asm("r8")

  1. 声明一个寄存器变量gd 占用r8,这个宏在所有需要引用全局数据指针gd_t *gd的源码中都有声明
  2. 这个声明也避免编辑器把r8分配给其他的变量,所以gd就是r8,这个指针变量不占用内存,
  3. register 表示变量对执行速度非常重要,因此应该放在cpu的寄存器中,寄存器独立于内存。
  4. volatile 用于指定变量的值可以由外部过程异步修改,例如中断例程
  5. 这个声明告诉编译器要使用寄存器r8来存储gd_t类型的指针gd,即这个定义声明了一个指针,并且指明了它的存储位置

2.2 gd_t里面有什么东西,即这个gd全局数据区要保存哪些所谓重要的数据?

arch/arm/include/asm/u-boot.h

typedef struct global_data {

bd_t *bd;

unsigned long flags;

unsigned long baudrate;

unsigned long have_console; /* serial_init() was called */

unsigned long env_addr; /* Address of Environment struct */

unsigned long env_valid; /* Checksum of Environment valid? */

unsigned long fb_base; /* base address of frame buffer */

#ifdef CONFIG_VFD

unsigned char vfd_type; /* display type */

#endif

#ifdef CONFIG_FSL_ESDHC

unsigned long sdhc_clk;

#endif

#if 0

unsigned long cpu_clk; /* CPU clock in Hz! */

unsigned long bus_clk;

phys_size_t ram_size; /* RAM size */

unsigned long reset_status; /* reset status register at boot */

#endif

void **jt; /* jump table */

} gd_t;

2.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值