Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17397
  • 博文数量: 9
  • 博客积分: 427
  • 博客等级: 下士
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-04 17:41
文章分类

全部博文(9)

文章存档

2011年(1)

2010年(8)

我的朋友
最近访客

分类: LINUX

2010-09-11 23:38:44

本文诊断MPC83XX处理器,描述uboot的启动流程。

Uboot启动过程如下:

1.        Start.s,设置IMMR寄存器,复位时IMMR映射到0xFF400000,该空间与Flash的影射空间冲突,启动后重新映射到0xE0000000

2.        Start.s,设置MPC8349E300核心;

3.        Start.s,初始化MPC8349LCS0,该位置是Flash0,存放在复位控制字和Uboot代码;

4.        Start.s,设置MPC8349BAT表,该表完成物理地址到虚拟地址的影射;

5.        Start.s,使能地址译码、使能CACHE

6.        CACHE当作RAM,初始化C语言运行环境;

7.        Start.s,调用cpu_init_f C函数;

8.        cpu_init_f函数,初始化各种CPU相关的寄存器;

9.        Start.s,跳转到board_init_f函数,不返回;

10.    board_init_f函数,根据init_sequence表,逐个运行初始化函数;

11.    init_sequence表,调用init_timebase函数,初始化时钟基准;

12.    init_sequence表,调用env_init函数,初始化uboot环境参数;

13.    init_sequence表,调用init_baudrate函数,初始化调试波特率;

14.    init_sequence表,调用serial_init函数,初始化串口硬件;

15.    init_sequence表,调用console_init_f函数,初始化控制台;

16.    init_sequence表,调用display_options函数,初始化显示参数;

17.    init_sequence表,调用print_clock_conf打印MPC8349板卡信息;

18.    init_sequence表,调用checkcpu函数,读取CPU ID,打印CPU版本号;

19.    init_sequence表,调用init_func_ram函数,初始DDR RAM

20.    board_init_f函数,在DDR RAM中建立C语言运行环境以及uboot环境;

21.    board_init_f函数,代码重定位,跳转到main_loop函数,不返回;

 

   至此,uboot启动完毕,在main_loop函数中,执行交互式的底层操作,可对用户输入的各种命令进行解析并执行。这些命令包含以下的功能:从以太网下载Linux内核映像和文件系统映像并在RAM中执行、将下载到RAM的内核和文件系统映像烧写到Flash、从Flash启动内核并加载文件系统等。

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

chinaunix网友2010-09-13 14:42:07

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com