关闭

u-boot简述

769人阅读 评论(0) 收藏 举报

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格式的可执行文件

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1005564次
    • 积分:13437
    • 等级:
    • 排名:第957名
    • 原创:343篇
    • 转载:221篇
    • 译文:9篇
    • 评论:58条
    博客专栏
    文章分类
    最新评论