U-Boot-1.2.0源码学习(2)

书接上回,执行流进入到 lib_arm/board.c 中的 start_armboot 函数:

 

1.为 gd, bd 分配空间:

gd = (gd_t *)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t));

 

gd_t 在 include/asm-arm/global_data.h 中有如下定义:

 

typedef struct global_data { .....} gd_t;

 

gd->bd = (bd_t *)((char *)gd - sizeof(bd_t));

 

bd_t 在 include/asm-arm/u-boot.h 中有下列定义:

 

typedef struct bd_info { ... } bd_t;

 

2. 执行初始化函数列表:

 其中 init_fnc_ptr 的类型为 init_fnc_t,其定义为 typedef int (init_fnc_t)(void);

init_sequence 是一个函数指针数组,成员有 cpu_init, board_init, interrupt_init, env_init, init_baudrate,serial_init .....

 

其中 cpu_init 在 cpu/arm920t 中的 cpu.c 中定义,由于没有定义 CONFIG_USE_IRQ 宏,故该函数直接返回:

 

board_init 函数定义在 board/smdk2410/smdk2410.c 中,完成板子时钟设置,IO口设置,打开数据与指令缓存的操作:

 interrupt_init 函数设置并启动定时器,其定义在 cpu/arm920t/s3c24x0 下的 interrupts.c 中:

env_init 函数有多个版本,在common目录下的 env_dataflash.c env_flash.c env_nand.c env_nowhere.c env_nvram.c env_eeprom.c 中均有定义,具体使用哪个则根据这些C文件开头的宏来决定,比如如果定义了 CFG_ENV_IS_IN_NAND 则使用 env_nand.c中的版本:

  

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值