首页 > 代码库 > 移植 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(一)