U-boot移植(一)--基本概念

Bootloader基本概念:Bootloader是系统上电后,需要运行的第一段程序。主要完成硬件的初始化、准备软件环境,调用系统内核。Bootloader具有很强的硬件依赖性,根据不同的CPU和具体的硬件平台,需要做相对应的配置,移植是必须的。

Bootloader和BIOS是有区别的,个人理解从实现的功能上来说:Bootloader=BIOS+MBR(X86结构中Bootloader就在硬盘第一分区的MBR中),两者所要完成的工作基本上是一样的——硬件初始化和系统引导。

Bootloader启动方式——启动加载模式、下载模式。

CPU上电后都是从指定的地址开始程序的运行(不同的架构体系,首地址是不同的),例如:MIPS体系的CPU从0xBFC00000开始执行,而ARM则从0x00000000开始。

启动加载模式:产品发布后的工作模式。

下载模式:产品研发调试阶段使用,通过串口或网络等通信手段从主机下载文件。

Bootloader启动过程:大部分的Bootloader都是多阶段启动(通常是两个阶段,分别由汇编语言和C语言实现)

第一阶段(stage1)——依赖于CPU体系结构的代码,主要完成和CPU体系结构相关的初始化,主要功能如下:

  • 定义入口,通过修改连接器脚本来完成;
  • 设置异常向量
  • 硬件设备初始化——关闭开门狗、中断、设置cpu速度和时钟频率(不是必需的,s3c2410/s3c2440放在第二阶段)、RAM初始化等;
  • 为加载第二阶段代码准备RAM空间;
  • 复制第二阶段代码到RAM空间(也是非必需的,Norflash可直接执行代码,但效率太低,不推荐);
  • 配置并初始化栈;
  • 跳转到第二阶段代码的C入口点。

第二阶段(stage2)——剩余功能的实现

  • 初始化本阶段要使用到的硬件设备——系统时钟、定时器、串口控制台、网络设备、Flash等等
  • 检测内存映射
  • 复制内核映像到RAM空间(如果内核映像是经过压缩的,还需要解压,有些内核具有自解压功能则不用Bootloader实现)
  • 复制根文件系统映像到RAM空间(不是必需的,根据根文件系统的类型和内核访问方式决定——这个有待学习)
  • 设置内核启动参数
  • 调用内核
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章