首页 > 代码库 > 移植 U-Boot(一)

移植 U-Boot(一)

1.Bootloader作用:

    在系统上电时,初始化硬件设备、准备好软件环境、最后调用操作系统内核,将系统内核复制到内存中运行。

2.Bootloader的起始地址:

    ARM架构的CPU从地址0x0000000开始取第一条指令,该地址也是Bootloader的起始地址。

3.Bootloader的启动方式:

  • 启动加载模式:上电后,Bootloader从板子的某个固态存储设备上将操作系统加载到RAM中运行,整个过程不需要用户的介入,用于产品发布。
  • 下载模式:开发人员各种命令,通过串口连接或者网络连接等通信手段从主机下载文件(比如内核映像、文件系统映像),将它们直接放在内存运行或是烧入Flash类固态存储设备

4.Bootloader的两个启动阶段功能:

    (1)第一阶段,主要使用汇编实现,完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码:

  • 硬件设备的初始化;
  • 为加载Bootloader的第二阶段代码准备RAM空间;
  • 复制Bootloader的第二阶段代码到RAM空间;
  • 设置好堆栈;
  • 跳转到第二阶段代码的C入口。

    硬件初始化包括:关闭WD、关中断、设置CPU的速度和时钟频率、RAM初始化。但都不是必须

    (2)Bootloader第二阶段使用C实现,实现更为复杂的功能:

  • 初始化本阶段使用到的硬件设备;
  • 检测系统内存映射;
  • 将内核映像和根文件系统映像从Flash上读到RAM空间;
  • 为内核设置启动参数;
  • 调用内核。

将内核存放于适当位置后,直接跳到它的入口点即可调用内核。调用内核前,需要满足以下条件:

    (1)CPU寄存器设置:

  • R0=0;
  • R1=机器类型ID;
  • R2=启动参数标记列表在RAM中起始基地址。

    (2)CPU工作模式:

  • 必须禁止中断(IRQs和FIQs);
  • CPU必须为SVC模式。

    (3)Cache和MMU设置:

  • MMU必须关闭;
  • 指令Cache可以打开也可以关闭;
  • 数据Cache必须关闭。

5.Bootloader与内核的交互:

    Bootloader与内核单向交互,将各类参数按照约定存放于固定位置后,再启动内核,内核启动后从该位置获得参数。

    参数具有固定的结构,以标记列表(tagged list)的形式来传递启动参数。标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。

    标记的数据结构为tag,包含一个tag_header结构和一个联合(union)组成。

  • tag_header表示标记的类型及长度,比如表示内存还是命令行参数等;
  • union(联合)表示使用不同类型的标记,表示内存使用tag_mem32,表示命令行用tag_cmdline。

6.U-BOOT分析与移植

    u-boot(universal boot loader),是遵循GPL条款的开源项目。具有如下特点:

  • 开放源码;
  • 支持多种嵌入式操作系统内核,如Linux,Vxworks,NetBSD,QNX,RTEMS,ARTOS,LynxOS;
  • 丰富的设备驱动源码:串口、以太网、SDRAM、Flash、LCD、eeprom、TRC、键盘等;
  • 支持NFS挂载、RAMDISK形式的根文件系统;
  • 支持NFS挂载,从Flash中引导压缩或非压缩系统内核;
  • 支持目标板环境变量多种存储方式,如Flash、NVRAM、EEPROM;
  • 上电自检功能:SDRAM、Flash大小自动检测,SDRAM故障检测,CPU型号;
  • 特殊功能:XIP内部引导。

 

目录

特性

解释说明

Board

开发板相关

对应不同配置的电路板(即使CPU相同),比如smdk2410,sbc410x

Cpu

平台相关

存放cpu关的目录文件,如arm920t,arm925t,i386等

lib_arm

 

存放对ARM体系结构通用文件,主要用于实现ARM平台通用的函数

Include

通用

头文件和开发板配置文件,所有开发板的配置文件都在include/configs目录下,需要手动的修改配置文件中的宏定义

Common

 

通用的多功能函数实现,多是对下一层驱动程序的封装

lib_generic

 

通用库函数的实现

Net

通用设备驱动

存放网络相关程序

Fs

 

存放文件系统相关程序

Post

 

存放上电自检程序

Drivers

 

各类具体设备的驱动程序,基本可以通用

Disk

 

硬盘接口程序

Rtc

 

RTC的驱动程序

Dtt

 

数字温度测量器或者传感器的驱动

Example

示例程序

一些独立运行的应用程序的例子,如helloworld

Tools

工具

存放制作S-Record或者U-Boot格式的镜像等工具,如mkimage

Doc

文档

开发使用文档

 

移植 U-Boot(一)