1、引导加载程序:包括固化在固件(firmware)中的boot代码(可选),和Boot Loader两打部分。
2、Linux内核:特定于嵌入式板子的指定内核以及内核的启动参数。
3、文件系统:包括根文件系统和建立于Flash内存设备之上的文件系统。通常用RAM DISK来作为root fs。
4、用户应用程序:特定于用户的应用程序。
Uboot是德国DENX小组开发用于多种嵌入式CPU的bootloader程序,Uboot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS嵌入式操作系统。Uboot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多通用的处理器。
Uboot代码目录构架
board:和一已有开发板有关的文件。每一个开发板都以一个子目录出现在当前目录中,比如:SMDK2410,子目录中存放与开发板相关的配置文件。
common:实现Uboot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令对应就是cmd_bootm.c。
cpu:与特定PCU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm920t等。
disk:对磁盘的支持。
doc:文档目录。Uboot有非常完善的文档,推荐大家参考阅读。
drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB等。
fs:支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。
include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统的支持的文件。该目录下configs目录有与开发板相关的配置头文件,如smdk2410.h。该目录下的asm目录有与CPU体系结构相关的头文件,asm对应的是asmarm9
.lib-xxxx:与体系结构相关的库文件。如与ARM相关的库放在.lib_arm中。
net:与网络协议栈相关的代码,BOOTP协议、TFTP洗衣、RARP协议和NFS文件系统的实现。
tools:生成Uboot的工具,如mkimage,crc等等。
(1)、硬件设备的初始化;
(2)、为加载Boot Loader的stage2准备RAM空间;
(3)、拷贝Boot Loader的stage2到RAM空间中;
(4)、设置好堆栈;
(5)、跳转到stage2的C入口点。
Boot Loader的stage2通常包括以下步骤(一执行的先后顺序):
(1)、初始化本阶段要使用到的硬件设备;
(2)、检测系统内存映射(memory map)
(3)、将kernel映像和根文件系统映像从flash上读到RAM空间中;
(4)、为内核设置启动参数;
(5)、调用内核。
Uoot的移植
为当前移植的板取名为teach2410,在Uboot中简历自己的开发板类型。
1、修改Makefile
在Uboot目录下:
# vi Makefile
为teach2410建立编译项(将smdk2410改为teach2410)如:
teach2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t teach2410 NULL s3c24x0
各项的意思如下:
arm:CPU的架构(ARCH)
arm920t:CPU的类型(CPU),其对应于cpu/arm920t子目录
teach2410:开发板的型号(BOARD),对应于teach2410目录
NULL:开发者或经销商(vender)
s3c24x0:片上系统(SOC)
2、在board子目录中建立teach2410
# cp rf board/smdk2410 board/teach2410
# cd board/teach2410
# mv smdk2410.c teach2410.c
3、在include/config/中简历配置头文件
#cp include/configs/smdk2410.h include/configs/teach2410.h
4、编译
# make teach2410_config
# make CROSS_COMPILE=arm-linux-
5、Uboot移植过程中的调试
使用Uboot命令查看信息、串口打印等。