一 bootloader的概念
bootloader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。
二 bootloader的特征
1 初始化硬件,特别是内存控制器
2 提供linux内核的启动参数
3 启动linux内核
简化开发过程的一些特征:
1 读写存储器
2 通过串口/网口下载文件到RAM
3 从RAM复制文件到FLASH中
三 bootloader安装
系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C44B0在复位后都从地址0X00000000取它的第一条指令。而嵌入式系统通常都有某种类型的固态存储设备(比如:ROM,EEPROM或FLASH等)被安排在这个起始地址上,因此在系统加电后,CPU将首先执行bootloader程序。也就是说对于基于S3C44B0的这套系统,我们的bootloader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。
四 控制bootloader的设备或机制
串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在bootloader中主机和目标机之间都通过串口建立连接,bootloader程序在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为出口通讯速度不够,也可以采用网络或USB通讯,那么相应的在bootloader中就需要编写各自的驱动。
五 bootloader的启动过程
多阶段的bootloader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的bootloader大多都是2阶段的启动过程,也即启动过程可以分为stase1和stase2两部分。
六 bootloader的操作模式
1 启动加载模式:这种模式也称为“自主”模式,也即bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是bootloader的正常工作模式。
2 下载模式:在这种模式下,目标机上的bootloader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序,数据文件,内核映像等,从主机下载的文件通常首先被bootloader保存到目标机的RAM中然后再被bootloader写到目标机上的固态存储设备中。bootloader的这种模式通常在系统更新时使用。
七 bootloader的重要功能
1 烧写falsh
2 烧写内核
3 烧写文件系统
4 使用jtag口或其他
八 u-boot启动过程
1 stage1:
a 基本的硬件初始化
b 为加载stage2准备RAM空间
c 拷贝stage2到RAM中
d 设置堆栈指针sp
e 跳到stage2的入口点
2 stage2:
a 初始化本阶段要使用到的硬件设备
b 检测系统的内存映射
c 加载内核映像和文件系统映像
d 设置内核的启动参数
e 调用内核
九 移植u-boot的步骤
1 下载源代码
2 阅读readme文件
3 了解u-boot结构
4 添加修改
5 编译
6 调试
7 发布