U-Boot简介
2011年03月23日
Uboot 是德国DENX 小组的开发用于多种嵌入式CPU 的bootloader 程序, UBoot 不仅仅支持嵌入式Linux 系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot 除了支持PowerPC 系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale 等诸多常用系列的处理器。
1 uboot顶层目录关系:
board
和一些已有开发板有关的文件。每一个开发板都以一个子目录出现在当前目录中,
子目录中存放与开发板相关的配置文件。它的每个子文件夹里都有如下文件:
makefile
config.mk
smdk2410.c 和板子相关的代码(以smdk2410 为例)
flash.c Flash 操作代码
lowlevel.s 初始化 SDRAM 代码
u-boot.lds 对应的连接文件
common
实现uboot 命令行下支持的命令,每一条命令都对应一个文件。例如bootm 命令
对应就是 cmd_bootm.c。
cpu
与特定CPU 架构相关目录,每一款Uboot 下支持的CPU 在该目录下对应一个子目录,
比如有子目录arm920t 等。cpu/ 它的每个子文件夹里都有如下文件:
makefile
config.mk
cpu.c 和处理器相关的代码
interrupts.c 中断处理代码
serial.c 串口初始化代码
start.s 全局开始启动代码
disk
对磁盘的支持。
doc:
文档目录
drivers
Uboot 支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI 的Flash、串口
和USB 等。
fs
支持的文件系统,Uboot 现在支持cramfs、fat、fdos、jffs2 和registerfs 。
Include
Uboot 使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对
文件系统支持的文件。该目录下configs 目录有与开发板相关的配置头文件,如smdk2410.h。
该目录下的asm 目录有与CPU 体系结构相关的头文件,asm 对应的是 asmarm.。
lib_xxxx
与体系结构相关的库文件。如与ARM 相关的库放在lib_arm 中。
net:
与网络协议栈相关的代码,BOOTP 协议、TFTP 协议、RARP 协议和NFS 文件系统的
实现。
tools:
生成Uboot 的工具,如:mkimage, crc 等等。
Uboot的层次关系如图
2 uboot 的启动过程及工作原理
大多数Boot Loader都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,Boot Loader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。 启动加载(Boot loading )模式:这种模式也称为" 自主" (Autonomous )模式。也即 Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下。 下载(Downloading )模式:在这种模式下,目标机上的 Boot Loader将通过串口连接或网络连接等通信手段从主机(Host )下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 BootLoader保存到目标机的 RAM中,然后再被 BootLoader 写到目标机上的FLASH类固态存储设备中。BootLoader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用BootLoader 的这种工作模式。 工作于这种模式下的Boot Loader通常都会向它的终端用户提供一个简单的命令行接口。UBoot 这样功能强大的Boot Loader同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。 Uboot的启动分为阶段 1(stage1)和阶段2(stage2)两大部分。依赖于CPU 体系结构的代码(如CPU 初始化代码等)通常都放在阶段 1 中且通常用汇编语言实现,而阶段2 则通常用C 语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。
stage1 (start.s 代码结构)
u-boot 的stage1 代码通常放在 start.s 文件中,它用汇编语言写成,其主要代码部分如下:
(1) 定义入口由于一个可执行的Image 必须有一个入口点,并且只能有一个全局入口, 通常这个入口放在ROM(Flash)的0x0 地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。
(2) 设置异常向量(Exception Vector) 。
(3) 设置CPU 的速度、时钟频率及中断控制寄存器。
(4) 初始化内存控制器
(5) 将ROM 中的程序复制到RAM 中。
(6) 初始化堆栈
(7) 转到RAM 中执行,该工作可使用指令ldr pc 来完成。
stage2(C 语言代码部分)
lib_arm/board.c 中的start_armboot 是C 语言开始的函数,也是整个启动代码中 C 语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数主要完成如下操作: (1) 调用一系列的初始化函数。
(2) 初始化Flash 设备。
(3) 初始化系统内存分配函数。
(4) 如果目标系统拥有NAND 设备,则初始化NAND 设备。
(5) 如果目标系统有显示设备,则初始化该类设备。
(6) 初始化相关网络设备,填写IP、MAC 地址等。
(7) 进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。
整个启动流程如下图
发表评论
-
Papervision3D Essentials 要点整理
2012-01-20 00:35 557Papervision3D Essentials 要点 ... -
使用Loader载入和组织资源分布
2012-01-20 00:35 796使用Loader载入和组织资源分布 2010年10月23日 ... -
Dragon-Studio 之 Flash Alternativa 3D引擎 进阶教程-1.内置模型
2012-01-20 00:35 771Dragon-Studio 之 Flash Alternati ... -
[AS3]root,this,stage关系
2012-01-20 00:35 639[AS3]root,this,stage关系 201 ... -
WinCE驱动开发问题精华集锦
2012-01-17 00:53 622WinCE驱动开发问题精华 ... -
Entity Framework 4 in Action读书笔记―第一章:数据访问重载:(一)
2012-01-17 00:53 810Entity Framework 4 in Action读书笔 ... -
关于PHP的缓存
2012-01-17 00:53 448关于PHP的缓存 2011年05 ... -
WinCE驱动开发问题精华集锦(一)
2012-01-17 00:53 510WinCE驱动开发问题精华 ... -
MySql安装、优化和安全配置(转)
2012-01-17 00:53 481MySql安装、优化和安全配置(转) 2010年11月21日 ... -
???
2012-01-15 19:38 369??? 2012年01月10日 ... -
我的日志
2012-01-15 19:38 371我的日志 2012年01月14日 护卫队的战士C ... -
我的日志
2012-01-15 19:38 621我的日志 20小时前 ... -
BusyBox 简化嵌入式 Linux 系统 (转载)
2012-01-15 19:38 523BusyBox 简化嵌入式 Linux 系统 (转载) 20 ... -
编译Touchlib出现问题(仍然尚未解决!)
2012-01-15 19:38 841编译Touchlib出现问题(仍然尚未解决!) 2009年1 ...
相关推荐
u-boot-1.0.0.tar.bz2~u-boot-1.3.4.tar.bz2 u-boot-2008.10.tar.bz2~u-boot-2019.10.tar.bz2 u-boot-2010.03.tar.bz2 u-boot-2020.01.tar.bz2 u-boot-2020.04.tar.bz2 u-boot-2020.07.tar.bz2 u-boot-2020.10.tar....
包括: 1、解锁U-boot的固件openwr-ar71xx-generic-tl-wr741nd-v1-squashfs-factory.bin,功能简单,只为方便刷入不死U-boot 2、适用wr741nd-v1的不死U-boot及其升级版breed 3、刷入工具
◆ board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。 ◆ common:与体系结构无关的文件,实现各种命令的C文件。 ◆ cpu:CPU相关文件,其中的子目录都是以U-...
u-boot-1.1.6.tar.bz & u-boot-1.1.6_jz2440.patch
U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBS D, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, ...
u-boot.bin_tekkaman_2009.11.bz2 参考网站:Tekkaman Ninja ...已经针对mini2440 编译好的U-boot-2009.11 的bin文件在Tekkaman Ninja 的博客中有,可以直接烧入, 链接:u-boot.bin_tekkaman_2009.11.tar.bz2
TI的AM335X EVM板的Uboot源码u-boot-2011.09-psp04.06.00.08.tar.gz
资源来源于tekkamanninja ... 经试验可用 ...解压后得到的两个bz2文件,需要在linux环境下解压,解压后得到两个u-boot.bin文件,分别为u-boot2009.11和u-boot2010.03,烧写到mini2440后就可以看出是哪个
U-Boot详解 U-Boot详解 U-Boot详解 U-Boot详解
hackpascal的不死U-boot最后一个版本 2015-04-27,完全版、最终版!这是hackpascal开发的最后一个版本的U-boot,然后他就开始开发Breed了,U-boot至此也就不再有更新了,详见压缩包内的说明文档。
1 U-Boot简介 2 U-Boot主要目录结构 3 U-Boot支持的主要功能 4 移植前的准备 5 U-Boot移植过程 6. U-Boot移植方法 7. U-Boot移植主要修改的文件 8. U-Boot移植要点
本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上: 1、u-boot工程的总体结构 2、u-boot的流程、主要的数据结构、内存分配。 3、u-boot的重要细节,主要分析流程中各函数的功能。 4、基于FS2410板子的u-boot...
The binaryfor the 2nd U-Boot stage is simply referred to as U-Boot.SPL is a non-interactive loader and is a specially builtversion of U-Boot. It is built concurrently when building U-Boot.
u-boot-ar9331-pisen.bin 品胜路由进入 U-Boot 控制台,请先开机再按复位键,否则无法开机,这是硬件设计造成的。可以超频,但限制到 500MHz 不能用于 TP-LINK TL-WR720N v3 和 TP-LINK TL-WR710N,否则无法开机。...
u-boot-sunxi-with-spl-vga
本人原创, 最新u-boot-2012.07 mini2440基于nandflash启动的移植, 新鲜出炉, 与旧版本不同, 本资源是基于nand_boot函数移植的, 应该说这种移植方法才是u-boot官方推荐的nandflash启动方法。 不多吹了, 见运行...
开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot启动函数。函数调用顺序如图6.3所示。 看一下board/smsk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。第一个要链接的是cpu/arm920t/...
描述如何在Winodows下用MSYS & MinGW 建立环境用Sourcery 的编译器编译u-boot源码,进一步在ECLIPSE 下编译调试u-boot代码
U-Boot简介 U-Boot,全称Universal BootLoader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源...
U-Boot 源码分析(u-boot-2009.03),后续会有移植详细教程。