一、uboot简介

    U-Boot,全称 Universal Boot Loader,是遵循GPL条款的从FADSROM、8xxROM、PPCBOOT逐步发展演化而来的开放源码项目。

    在操作系统方面,U-Boot不仅支持嵌入式Linux系统的引导,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。目前支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。

    在CPU架构方面,U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。

U-Boot项目的开发目标是支持尽可能多的嵌入式处理器嵌入式操作系统

二、uboot的特性

Uboot的特性:

    1、开放源码;

    2、支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;

    3、支持多个处理器系列,如PowerPC、ARM、x86、MIPS;

    4、较高的可靠性和稳定性;

    5、高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;

    6、丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;

    7、较为丰富的开发调试文档与强大的网络技术支持;

三、主要功能

U-Boot支持的主要功能:

    1、系统引导支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持NFS挂载、从FLASH中引导压缩或非压缩系统内核

    2、基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;

    3、 CRC32校验可校验FLASH中内核、RAMDISK镜像文件是否完好;

    4、设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;

    5、上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;

    6、特殊功能XIP内核引导;

四、工作模式

    U-Boot的工作模式有启动加载模式和下载模式。

1、启动加载模式

    启动加载模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从FLASH中加载到SDRAM中运行,整个过程是自动的。

2、下载模式

        下载模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的FLASH中。用户可以利用Bootloader提供的一些命令接口来完成自己想要的操作。开发人员可以使用各种命令,通过串口连接或网络连接等通信手段从主机(Host)下载文件(比如内核映像、文件系统映像),将它们直接放在内存运行或是烧入Flash类固态存储设备中。

        板子与主机间传输文件时,可以使用串口的xmodem/ymodem/zmodem协议,还可以使用网络通过tftp、nfs协议来传输,以及USB下载等方法。

    一般来说,嵌入式开发人员采用下载模式进行开发嵌入式系统。通常采用交叉网线将PC与目标开发板连接,通过TFTP服务器下载内核,用NFS服务器挂载文件系统。

五、uboot常用命令

1、获取命令

命令:help 或 ?

    功能:查看当前U-boot版本中支持的所有命令。

2、环境变量命令

bootdelay

执行自动启动(bootcmd中的命令)的等候秒数

baudrate

串口控制台的波特率

netmask

以太网的网络掩码

ethaddr

以太网的MAC地址

bootfile

默认的下载文件名

bootargs

传递给Linux内核的启动参数

bootcmd

自动启动时执行命令

serverip

TFTP服务器端的IP地址

ipaddr

本地的IP地址

stdin

标准输入设备,一般是串口

stdout

标准输出,一般是串口,也可是LCD(VGA)

stderr

标准出错,一般是串口,也可是LCD(VGA)

    使用printenv命令可以打印出当前开发板的环境变量。

        setenv envname value设置环境变量的值,如果没有value,则表示删除env环境变量

    saveenv将修改的环境变量保存到固态存储器中。

    bootcmd 自动启动执行命令,uboot开机后会自动倒计时,在倒计时结束前如果没有外部按键打断自动计时,uboot将自动执行bootcmd变量保存的命令。

3、串口传输命令

    loadb   - load binary file over serial line (kermit mode)
    loadx   - load binary file over serial line (xmodem mode)
    loady   - load binary file over serial line (ymodem mode)

 

4、网络命令

    uboot可以通过网络来传输文件到开发板,直接用交叉网线连接开发板和电脑,也可以用普通直连网线连接路由器。

    ping hostname

网络不通的原因:

        A、U-boot网卡驱动有问题
    B、U-boot网络协议延时配置有问题
    C、网络参数配置问题,比如IP等,Host和Target都有可能有问题。

    如果网络连通,就可以通过tftp、NFS挂载开发板

    nfs     - boot p_w_picpath via network using NFS protocol
    tftpboot- boot p_w_picpath via network using TFTP protocol
    bootp   - boot p_w_picpath via network using BOOTP/TFTP protocol

5、NandFlash操作命令

nand info

显示可使用的Nand Flash

nand device [dev]

显示或设定当前使用的Nand Flash

nand read  addr off  size

Nand Flash读取命令,从Nand的off偏移地址处读取size字节的数据到SDRAM的addr地址。

nand write   addr off  size

Nand Flash烧写命令,将SDRAM的addr地址处的size字节的数据烧写到Nand的off偏移地址。

nand write[.yaffs[1]] addr off size

烧写yaffs 映像专用的命令,.yaffs1 for 512+16 NAND

nand erase [clean] [off size]

Nand Flash檫除命令,擦除Nand Flash的 off 偏移地址处的size 字节的数据

nand bad

显示Nand Flash的坏块

nand dump[.oob] off

显示Nand Flash中的数据(16进制)

nand scrub

彻底擦除整块Nand Flash中的数据,包括OOB。可以擦除软件坏块标志。

nand markbad off

标示 Nand的 off 偏移地址处的块为坏块

6、内存、寄存器操作命令

    nm      修改内存值 (指定地址)    
    格式: nm [.b, .w, .l] address

 

    mm     修改内存值(地址自动加一)
    格式:  mm [.b, .w, .l] address 

    md       显示内存值
    格式:  md [.b, .w, .l] address [# of objects] 

    mw     用指定的数据填充内存
    格式:  mw [.b, .w, .l] address value [count]

    cp      内存的拷贝(包括内存与Nor Flash间的数据拷贝)
    格式:cp [.b, .w, .l] source target count

7、USB操作命令

usb reset

初始化USB控制器

usb stop [f]

关闭USB控制器

usb tree

已连接的USB设备树

usb info [dev]

显示USB设备[dev]的信息

usb storage

显示已连接的USB存储设备

usb dev [dev]

显示和设置当前USB存储设备

usb part [dev]

显示USB存储设备[dev]的分区信息

usb read addr blk# cnt

读取USB存储设备数据

    使用USB操作命令前必须确保USB设备连接好,usb reset,以初始化USB控制器,获取设备信息。

8、SD/MMC操作命令

    mmc init [dev] - 初始化MMC子系统
    mmc device [dev] - 查看和设置当前设备

    使用SD/MMC操作命令前必须确保SD/MMC设备连接好,mmc init,以初始化MMC 控制器,获取设备信息。

六、uboot在Flash中的分区

    嵌入式系统中一般用Flash作为启动设备,Flash上存储着uboot、环境变量、内核映像和文件系统。uboot一般存放在Flash的起始地址,其所在的扇区位置一般由SoC规定,一般为扇区0或扇区1。uboot后存放环境变量,内核和文件系统的存放位置则可以有规划的自由分配。

 

Uboot官方下载地址:

ftp://ftp.denx.de/pub/u-boot/

git://git.denx.de/u-boot.git

       http://git.denx.de/u-boot.git