uboot启动流程--MPC8313E-RDB

来源:互联网 发布:龙卷风收音机知乎 编辑:程序博客网 时间:2024/05/07 14:34

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

Uboot启动过程如下:

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

2.        Start.s,设置MPC8349的E300核心;

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

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

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启动内核并加载文件系统等。

 

本文转自:http://blog.163.com/mcu_expert/blog/static/131245153201082810258785/

原创粉丝点击