u-boot简述

原创 2012年03月24日 22:31:36

1、Bootloader的启动过程启动过程可以分为单阶段(Single Stage)、多阶段(Multi-Stage)两种。通常多阶段的Bootloader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的Bootloader大多都是 2 阶段的启动过程。这从前面的硬件实验可以很好地理解这点:第一阶段使用汇编来实现,它完成一些依赖于 CPU 体系结构的初始化,并调用第二阶段的代码。第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和可移植性。

一般而言,这两个阶段完成的功能可以如下分类,但这不是绝对的:

(1)Bootloader第一阶段的功能。

·         

    • 硬件设备初始化。
    • 为加载Bootloader的第二阶段代码准备RAM空间。
    • 拷贝Bootloader的第二阶段代码到 RAM 空间中。
    • 设置好栈。
    • 跳转到第二阶段代码的C入口点。

在第一阶段进行的硬件初始化一般包括:关闭WATCHDOG、关中断、设置CPU的速度和时钟频率、RAM初始化等。这些并不都是必需的,比如S3C2410/S3C2440的开发板所使用的U-Boot中,就将CPU的速度和时钟频率的设置放在第二阶段。

甚至,将第二阶段的代码复制到RAM空间中也不是必需的,对于NOR Flash等存储设备,完全可以在上面直接执行代码,只不过这相比在RAM中执行效率大为降低。

(2)Bootloader第二阶段的功能。

·         

    • 初始化本阶段要使用到的硬件设备。
    • 检测系统内存映射(memory map)。
    • 将内核映像和根文件系统映像从Flash上读到RAM空间中。
    • 为内核设置启动参数。
    • 调用内核。

为了方便开发,至少要初始化一个串口以便程序员与Bootloader进行交互。

所谓检测内存映射,就是确定板上使用了多少内存,它们的地址空间是什么。


2、将内核存放在适当的位置后,直接跳到到它的入口点即可调用内核。调用内核之前,下列条件要满足:

(1)CPU 寄存器的设置。

·         

    • R0=0
    • R1=机器类型ID;对于ARM结构的CPU,其机器类型ID可以参见 linux/arch/arm/tools/mach-types。
    • R2=启动参数标记列表在 RAM 中起始基地址

(2)CPU工作模式。

·         

    • 必须禁止中断(IRQs和FIQs)
    • CPU 必须 SVC 模式

(3)Cache 和 MMU 的设置。

·         

    • MMU 必须关闭
    • 指令 Cache 可以打开也可以关闭
    • 数据 Cache 必须关闭

3、U-Boot顶层目录说明

 

目录

特性

解释说明

board

开发板相关

对应不同配置的电路板(即使CPU相同),比如smdk2410、sbc2410x

cpu

平台相关

对应不同的CPU,比如arm920t、arm925t、i386等;在它们的子目录下仍可以进一步细分,比如arm920t下就有at91rm9200、s3c24x0

lib_i386类似

某一架构下通用的文件

 

include

通用的函数

头文件和开发板配置文件,开发板的配置文件都放在include/configs目录下,U-Boot没有make menuconfig类似的莱单来进行可视化配置,需要手动地修改配置文件中的宏定义

lib_generic

通用的库函数,比如printf等

common

通用的函数,多是对下一层驱动程序的进一步封装

disk

通用的设备驱动程序

硬盘接口程序

drivers

各类具体设备的驱动程序,基本上可以通用,它们通过宏从外面引入平台/开发板相关的函数

 

dtt

数字温度测量器或者传感器的驱动

 

fs

文件系统

 

nand_spl

U-Boot一般从ROM、NOR Flash等设备启动,现在开始支持从NAND Flash启动,但是支持的CPU种类还不多

 

net

各种网络协议

 

post

上电自检程序

 

rtc

实时时钟的驱动

 

doc

文档

开发、使用文档

examples

示例程序

一些测试程序,可以使用U-Boot下载后运行

tools

工具

制作S-Record、U-Boot格式映像的工具,比如mkimage


4、根据顶层Readme文件的说明,可以知道如果要使用开发板board/<board_name>,就先执行“make <board_name>_config”命令进行配置,然后执行“makeall”,就可以生成如下3个文件:

  • u-boot.bin:二进制可执行文件,它就是可以直接烧入ROM、NOR Flash的文件。
  • u-boot:ELF格式的可执行文件
  • u-boot.srec:Motorola S-Record格式的可执行文件

版权声明:原创文章,请注明出处。

简述U-boot的修改

uboot是一个通用的免费开放源码的boot程序,支持很多的处理器。以下是现在网上下载一个u-boot-1.1.1版本,用于at91rm9200系统的修改的例子。最后在redhat8.0上,用gcc2...
  • danforn
  • danforn
  • 2007年01月04日 10:49
  • 1349

u-boot基础简述

U-Boot是用于初始化目标板硬件,为嵌入式操作系统提供目标板硬件配置信息,完成嵌入式操作系统装载、引导和运行的固件程序。它能够将系统的软硬件紧密衔接在一起。S3C2410是三星公司的一款基于ARM9...
  • winheroii58
  • winheroii58
  • 2011年09月08日 15:07
  • 406

U-boot 官方源码FTP下载地址 及 主页

ftp://ftp.denx.de/pub/u-boot/
  • u013420428
  • u013420428
  • 2017年06月13日 10:10
  • 1233

U-boot简介

一、U-boot的起源 U-Boot是Das U-Boot的简称,其含义是Universal Boot Loader,是遵循GPL条款的开放源码项目。一开始德国DENX软件工程中心的Wolfgang...
  • a627088424
  • a627088424
  • 2013年11月05日 15:09
  • 1046

u-boot 详细介绍 .

Bootloader 对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序就叫作Bootloader。 6.1.1  Bootload...
  • maopig
  • maopig
  • 2011年11月16日 19:13
  • 2541

u-boot 的配置与编译

这里我是u-boot-
  • my_paopao
  • my_paopao
  • 2014年10月08日 10:32
  • 529

u-boot环境变量的配置

在移植好u-boot之后别忘了我们u-boot的zji
  • liuhb569620660
  • liuhb569620660
  • 2014年04月27日 12:09
  • 870

U-BOOT中文文档 概述与配置选项

前言:近期在学习U-Boot,学习过程不外乎学习文档,阅读代码。U-BOOT源码树提供的README文档讲得比较详细,可以作为一个起点,看了下网 上似乎也没有完全的中文翻译,因此才有翻译的打算,一方...
  • evilcode
  • evilcode
  • 2010年06月23日 21:01
  • 3833

U-boot各种配置 和U-boot源码最为详细的讲解

U-boot原厂版本移植 网址:http://blog.csdn.net/qq_28992301/article/details/51912763 今天开始移植三星...
  • a746742897
  • a746742897
  • 2016年11月12日 16:25
  • 2762

U-Boot的网络控制台netcon的使用

之前一直疑惑Linux下有netconsloe,那么U-Boot中的是否也有相应的工具使用,果然,发现了一个网络控制台的实现方法。 需要的工具:Hercules U-BOOT命令的源码: ...
  • j00362
  • j00362
  • 2016年01月06日 12:13
  • 494
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:u-boot简述
举报原因:
原因补充:

(最多只允许输入30个字)