Chinaunix首页 | 论坛 | 博客
  • 博客访问: 120200
  • 博文数量: 17
  • 博客积分: 1450
  • 博客等级: 上尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-13 16:45
文章分类

全部博文(17)

文章存档

2011年(2)

2010年(15)

我的朋友

分类: 嵌入式

2010-08-19 14:58:10

u-boot启动代码分析(ARM S3C2410为例)

u-boot启动过程分为两个阶段

第一阶段在/cpu/arm920t目录下的start.S(汇编语言),主要是cpu的一些设置

 

定义异常向量表

设置ARM工作在SVC32模式下

关闭看门狗

禁止所有中断

设置cpu工作时钟频率(采用的默认的120MHz),设置其它时钟与cpu时钟比例

配置ARM的存储控制器

u-boot搬移到RAM中去执行

初始化堆栈

bss段地址清零

跳转到第二阶段start_armboot

 

第二阶段代码在/lib_arm/目录下的board.c(C语言实现),主要是外围设置的初始化

入口函数为start_armboot顺序执行init_sequence数组中的初始化函数

init_sequence[]数组保存着基本的初始化函数指针,包括

init_fnc_t *init_sequence[] = {

cpu_init,   /* 基本的处理器相关配置 -- cpu/arm920t/cpu.c */

board_init, /* 基本的板级相关配置 -- board/smdk2410/smdk2410.c */

interrupt_init,/* 初始化中断处理 -- cpu/arm920t/s3c24x0/interrupt.c */

env_init,      /* 初始化环境变量 -- common/env_flash.c */

init_baudrate,  /* 初始化波特率设置 -- lib_arm/board.c */

serial_init,  /* 串口通讯设置 -- cpu/arm920t/s3c24x0/serial.c */

console_init_f,       /* 控制台初始化阶段1 -- common/console.c */

display_banner,       /* 打印u-boot信息 -- lib_arm/board.c */

dram_init,     /* 配置可用的RAM -- board/smdk2410/smdk2410.c */

display_dram_config,  /* 显示RAM的配置大小 -- lib_arm/board.c */

NULL,

};

flash_init()配置可用的flash   /*board/smdk2410/flash.c*/

env_relocate ()配置环境变量

getenv_IPaddr ("ipaddr")从环境变量中获取ip地址等等

for (;;) {

       main_loop ();   /*common/main.c*/

}

无限循环,处理执行用户命令

阅读(1892) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~