U-Boot 移植
一、BootLoader 原理
1. 嵌入式linux软件分布
一般情况下嵌入式linux软件分为以下几部分:
a. 引导加载程序,包括厂商在内部ROM中固化的启动代码,(其主导作用是为了引导BootLoader)和BootLoader两部分。
b. linux内核和driver。
c. 根文件系统和文件系统(建立在Flash内存设备之上的文件系统,比如:EXT4,UBI,CRAMFS等)。
d. 应用程序,位于文件系统内。
在Flash存储器中的分布如下:
------------------------------------------------------------------------
|BootLoader |BootLoader参数区 |Linux kernel | 根文件系统 |其它文件系统 |
------------------------------------------------------------------------
以上只是大部分情况下的分布,也有可能文件系统是initramfs被压缩到内核映像中,
或者没有BootLoader参数区等等。
2. 在嵌入式linux中BootLoader的必要条件
a. CPU寄存器的设置:
R0 = 0;
R1 = Machine ID;
R2 = 内核启动参数在RAM中的起始地址。
b. CPU模式
必须禁止中断(IRQ and FIQ)
CPU必须是SVC模式
c. Cache 和 MMU的设置
MMU必须关闭
指令cache 可以关闭也可以打开
数据cache 必须关闭
在CPU刚上电的时候,由于内存控制器还没有初始化,根本无法在内存中运行程序,更谈不上启动Linux内核,
所以在启动内核前,需要一小段程序完成内核启动之前的cpu和外设的初始化,启动代码的最终目的就是启动内核。
3. BootLoader的定义
其是在内核启动之前的一小段程序,其最终的目的就是启动内核;通过这小段程序,我们可以初始化硬件设备,
从而将系统的软硬件环境带到一个合适的状态,最后通过Flash 网络 或 串口 载入内核映像到主存,并跳到入口地址。
由于启动代码严重依赖硬件,所以很难做到通用,但是u-boot 是目前比较出 {MOD}的一个产品。
二、网上经典文章,嵌入式系统BootLoader内幕.