Akagi201
8/15/2014 - 1:47 AM

bootloader.md

bootloader的主要任务

  • 硬件系统自检
  • 配置
  • 处理中断
  • 引导操作系统
  • 更新系统

bootloader与主机的通信方式

  • 串口: 传输协议通常是xmodem/ymodem/zmodem协议中的一种这种方式传输速度比较慢.
  • 网络: 通过TFTP服务器下载文件, 方便快速, 但要有TFTP客户端与服务器端.

u-boot的常用命令

  • help - 显示帮助信息
  • bdinfo - 查看开发板信息
  • printenv - 查看环境变量
  • setenv - 添加, 修改, 删除环境变量
setenv aaa 123 // 添加
setenv aaa 456 // 修改
setenv aaa // 删除
  • saveenv - 保存环境变量
  • md - 查看内存
md.b [address] // 按字节显示
md.w [address] // 按半直显示
md.l [address] // 按字显示

bootloader的实现

  • u-boot
  • barebox
  • syslinux

bootloader的概念

简单地说, bootloader就是操作系统内核运行之前运行的一段小程序. 通过这段小程序, 我们可以初始化硬件设备, 建立内存空间的映射图, 从而将系统的软硬件环境带到一个合适的状态, 以便为最终调用操作系统内核准备好正确环境.

bootloader的主要运行任务就是将内核映像从硬盘上读到RAM中, 然后跳转到内核的入口点去运行, 也即开始启动操作系统.

通常, bootloader是严重低依赖于硬件而实现的, 特别是在嵌入式世界. 因此, 在嵌入式世界建立一个通用的bootloader几乎是不可能的.

bootloader的安装媒介

系统加电或复位后, 所有CPU通常都从某个由CPU制造商预先安排的地址上取指令. 比如, 基于ARM7TDMI core的CPU在复位时通常都从地址0x00000000取它的第一条指令.

一个同时装有bootloader, 内核的启动参数, 内核映像和根文件系统映像的固态存储设备的典型空间分配结构图: bootloader + boot parameters + kernel + root filesystem

bootloader的主要任务与典型结构框架

bootloader的启动过程可分为单阶段(Single Stage)和多阶段(Multi-Stage)两种.

通常多阶段的bootloader能提供更为复杂的功能, 以及更好的可移植性. 从固态存储设备上启动的bootloader大多都是2阶段的启动过程, 也即启动过程可以分为stage 1和stage 2两个部分.

stage 1完成初始化硬件, 为stage 2准备内存空间, 将stage2复制到内存中, 设置堆栈然后跳转到stage 2.

多阶段的bootloader

bootloader的stage 1通常包括以下步骤(以执行的先后顺序)

  1. 硬件设备初始化.
  2. 为加载bootloader的stage 2准备RAM空间.
  3. 拷贝bootloader的stage 2到RAM空间中.
  4. 设置好堆栈.
  5. 跳转到stage 2的C入口点.

bootloader的stage 2通常包括以下步骤(以执行的先后顺序)

  1. 初始化本阶段要使用到的硬件设备.
  2. 检测系统内存映射(memory map).
  3. 将kernel映像和根文件系统映像从flash上读到RAM空间中.
  4. 为内核设置启动参数.
  5. 调用内核.