U-boot commands

来源:互联网 发布:怎样选淘宝上的人参 编辑:程序博客网 时间:2024/04/29 00:52

U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot是从PPCBOOT逐步发展演化而来,其源码目录、编译形式与Linux内核很相似。U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBSD。VxWorks、QNX、RTEMS、ARTOS、LynxOS嵌入式操作系统。其目前要支持的目标操作系统包括OPenBSD 、NetBSD、FreeBSD、4 4BSD 、Linux、SVR4、Esix、Solaris、Irix、SCO、Dell、NCR、VxWorks、LynxOS、pSOS、QNX、RTEMS和ARTOS。这是U-Boot中Universal的一层含义。另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM 、Nios、XScale等诸多常用系列的处理器。除了硬件初始化之外,U-Boot的大部分功能的代码是可以跨硬件平台使用的。只需要对U-Boot的硬件部分代码做一些修改,就可以运行在不同的平台上。

U-Boot支持系统引导、上电自检功能、设备驱动等功能,它的主要特性如下:

  • 支持NFS挂载、RAMDISK 系统引导(压缩或非压缩)形式的根文件系统
  • 支持NFS挂载,从Flash中引导压缩或非压缩系统内核
  • 强大的操作系统接口功能,可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布
  • 支持目标板环境参数的多种存储方式,如Flash、NVRAM、EEPROM
  • CRC32校验,可校验Flash中内核、RAMDISK镜像文件是否完好
  • 串口、SDRAM、Flash、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持
  • SDRAM、Flash大小自动检测;SDRAM 故障检测;CPU型号
  • XIP内核引导

可从U-Boot的官方网站http://sourceforge.net/projects/U-Boot上获得发布的最新版本U-Boot源码。以下是U-Boot最重要的目录:

目录名

说明

Board

目标板相关文件,主要包含SDRAM、Flash驱动;

Common

独立于处理器体系结构的通用代码,如内存大小探测与故障检测;

Cpu

与处理器相关的文件,如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;

Driver

通用设备驱动,如CFI Flash驱动

Examples

可在U-Boot下运行的示例程序;

Lib-XXX

处理器体系相关的文件,如lib-PPC,lib-arm 目录分别包含与PowerPC、ARM体系结构相关的文件;

Net

与网络功能相关的文件目录,如bootp、nfs、tftp;

Post

上电自检文件目录

Rtc

RTC驱动程序

Tools

用于创建BIN镜像文件等的工具

表1  U-Boot重要的目录

为了使U-Boot支持新的开发板,必须对代码进行修改。最简便的做法是在U-Boot已经支持的开发板中选择一种和目标板接近的,并在其基础上进行修改。例如如果处理器是S3C2410,可以参照board目录下的smdk2410目录。U-Boot上电启动后,敲任意键可以退出自动启动状态,进入命令行:

U-Boot 1.1.4 (Nov 12 2007 - 21:58:00)

U-Boot code: 33F80000 -> 33F9C2FC  BSS: -> 33FA045C

RAM Configuration:

Bank #0: 30000000 64 MB

Flash:  2 MB

NAND:  64 MB

*** Warning - bad CRC, using default environment

In:    serial

Out:   serial

Err:   serial

YL2410 #

在命令行提示符下,可以输入U-Boot的命令并执行。U-Boot可以支持几十个常用命令,通过这些命令,可以对开发板进行调试,可以引导Linux内核,还可以擦写Flash完成系统部署等功能。掌握这些命令的使用,才能够顺利地进行嵌入式系统的开发。输入help命令,可以得到当前U-Boot的所有命令列表。每一条命令后面是简单的命令说明。

YL2410 # help

?       - alias for 'help'

autoscr - run script from memory

base    - print or set address offset

bdinfo  - print Board Info structure

boot    - boot default, i.e., run 'bootcmd'

bootd   - boot default, i.e., run 'bootcmd'

bootelf - Boot from an ELF image in memory

bootm   - boot application image from memory

bootp      - boot image via network using BootP/TFTP protocol

bootvx  - Boot vxWorks from an ELF image

cmp     - memory compare

coninfo - print console devices and information

cp      - memory copy

crc32   - checksum calculation

date    - get/set/reset date & time

dcache  - enable or disable data cache

echo    - echo args to console

erase   - erase FLASH memory

flinfo  - print FLASH memory information

go      - start application at address 'addr'

help    - print online help

icache  - enable or disable instruction cache

iminfo  - print header information for application image

imls    - list all images found in flash

itest- return true/false on integer compare

loadb   - load binary file over serial line (kermit mode)

loads   - load S-Record file over serial line

loop    - infinite loop on address range

md      - memory display

mm      - memory modify (auto-incrementing)

mtest   - simple RAM test

mw      - memory write (fill)

nand    - NAND sub-system

nboot   - boot from NAND device

nfs   - boot image via network using NFS protocol

nm      - memory modify (constant address)

ping- send ICMP ECHO_REQUEST to network host

printenv- print environment variables

protect - enable or disable FLASH write protection

rarpboot- boot image via network using RARP/TFTP protocol

reset   - Perform RESET of the CPU

run     - run commands in an environment variable

saveenv - save environment variables to persistent storage

setenv  - set environment variables

sleep   - delay execution for some time

tftpboot- boot image via network using TFTP protocol

version - print monitor version

下面介绍各条命令的具体用法:

1)bdinfo – 显示开发板信息

bdinfo命令在终端显示诸如内存地址和大小、时钟频率、MAC地址等板级信息。这些信息在传递给Linux内核一些参数时会用到。

2)coninfo – 显示控制台设备和信息

coninfo命令可以显示可用的控制I/O设备信息。

serial   80000003 SIO stdin stdout stderr

这个输出结果意为串口设备是一个系统设备(标志‘S’),它提供输入(标志‘I’)和输出(标志‘O’)功能,而且当前已经指派给3个标准I/O流:tdin,stdout 和stderr。

3)flinfo – 显示Flash存储信息

flinfo命令用于获取可用的flash存储信息。

4)iminfo – 显示映像文件头部信息

iminfo (简写为imi) 用于显示像Linux内核或者ramdisk之类的映像文件的头部信息。它显示映像名、类型、大小以及CRC32校验和以验证文件没问题。

5)base – 显示或者设置地址偏移

可以使用base命令来显示或者设置一个基地址作为所有存储类命令的地址偏移值。默认的基址是0,这时输入的所有地址都是实地址。当需要重复访问某一特定存储区域时,如果设置此区域的开始地址作为基址,命令地址只需使用偏移地址,这会带来许多方便。

YL2410 # base

Base Address: 0x00000000

YL2410 # md 0 c

00000000: feffffff 00000000 7cbd2b78 7cdc3378    ........|.+x|.3x

00000010: 3cfb3b78 3b000000 7c0002e4 39000000    <.;x;...|...9...

00000020: 7d1043a6 3d000400 7918c3a6 3d00c000    }.C.=...y...=...

YL2410 # base 40000000

Base Address: 0x40000000

YL2410 # md 0 c

40000000: 27051956 50504342 6f6f7420 312e312e    '..VPPCBoot 1.1.

40000010: 3520284d 61722032 31203230 3032202d    5 (Mar 21 2002 -

40000020: 2031393a 35353a30 34290000 00000000     19:55:04)......

6)crc32 – 校验和计算

crc32(简写为crc)用来计算在某一范围内存储区域的CRC32校验和。

YL2410 # crc 100004 3FC

CRC32 for 00100004 ... 001003ff ==> d433b05b

YL2410 #

    当后面加了3个参数时,此命令会把计算结果保存在给定存储地址内。

YL2410 # crc 100004 3FC 100000

CRC32 for 00100004 ... 001003ff ==> d433b05b

YL2410 # md 100000 4

00100000: d433b05b ec3827e4 3cb0bacf 00093cf5    .3.[.8'.<.....<.

YL2410 #

可以看到,CRC32的校验和不仅显示出来了,还存储在地址为0x10000000的存储单元里。

7) cmp – 存储单元比较

使用cmp命令可以比较两个存储区域的内容是否一致。这个命令不仅可以测试由第3个参数确定的整个区域,还可以在第一个不同的地方停下来。

YL2410 # cmp 100000 40000000 400

word at 0x00100004 (0x50ff4342) != word at 0x40000004 (0x50504342)

Total of 1 word were the same

8)cp – 存储器拷贝

cp用来复制存储单元。cp 可以使用类型标识符.l , .w和.b。.b以字节为单位;.w以字为单位;.l以长字为单位。

YL2410 # cp.b 40000000 100000 10000

9) md – 显示存储单元内容

md采用十六进制和ASCII码两种形式来显示存储单元的内容。

YL2410 # md 0x10000000

10000000: d123d123 ad75ad75 a535a535 f800f800    #.#.u.u.5.5.....

10000010: 00000000 00000000 e164e164 582c582c    ........d.d.,X,X

10000020: ce79ce79 07e007e0 bdf7bdf7 001f001f    y.y.............

   这条命令同样可以采用类型标识符.l, .w和.b :

YL2410 # md.b 0x10000000

10000000: f7 bd d7 d9 b7 b5 96 32 76 ad 55 58 e0 a5 b3 e0    .......2v.UX....

10000010: e0 f8 94 00 00 00 70 00 00 58 68 58 2c 00 00 58    ......p..XhX,..X

10000020: 18 e1 1f be 1f 9c 94 bd b6 b5 64 ad 75 9c a4 a5    ..........d.u...

10000030: b3 e0 1f 07 00 e1 00 00 00 00 94 00 00 58 64 58    .............XdX

10)mtest – 简单的RAM测试

mtest提供一个简单的存储器测试。mtest会向存储器写入数据,如果测试的存储范围包括中断向量表、内核映像、堆栈或者堆存放的单元等区域,可能导致系统崩溃,所以使用时要格外小心。

YL2410 # help mtest

mtest [start [end [pattern]]]

    - simple RAM read/write test

YL2410 # mtest 100000 200000

Testing 00100000 ... 00200000:

Pattern 0000000F  Writing...  Reading...

YL2410 #

11) mw – 写存储器

   mw是一种向存储器写数据的方法。mw也可以带.l, .w和.b等标识符表示写入的单位。Mw的主要参数包括写入地址,写入内容,写入大小。

YL2410 #mw.w 100004 1155 6

YL2410 # md 100000 10

00100000: 00000000 11551155 11551155 11551155    .....U.U.U.U.U.U

00100010: 00000000 00000000 00000015 00000016    ................

00100020: 00000017 00000018 00000019 0000001a    ................

00100030: 0000001b 0000001c 0000001d 0000001e    ................

YL2410 #mw.b 100007 ff 7

YL2410 #md 100000 10

00100000: 00000000 115511ff ffffffff ffff1155    .....U.........U

00100010: 00000000 00000000 00000015 00000016    ................

00100020: 00000017 00000018 00000019 0000001a    ................

00100030: 0000001b 0000001c 0000001d 0000001e    ................

YL2410 #

12)bootm – 启动存储器中的映像

       bootm可以启动flash或SDRAM中的内核映像。使用方法是bootm [addr [arg ...]]。addr是映像地址,arg是可选的内核参数。

YL2410 # bootm 0x10000000

13)erase – 擦除FLASH

erase的用法有以下几种:

erase start end:擦除从start地址开始到end地址结束的区域。

erase bank N:擦除第N块Flash。

erase N:SF [ -SL ]:擦除第N块Flash的从扇区SF到SL扇区的区域。

erase all:擦除所有Flash的内容。

Flash的擦除操作必须以块为最小单位,因此地址start必须为某块的起始地址,end地址则必须为某块的结束地址,如Flash的基地址为0x34000000,块大小为0x20000,则操作erase 0x34000000 0x3401FFFF为可操作的。而erase 0x34000003 0x3401FFFF或者erase 0x340000000x3401FF00均不可操作。

14)setenv –设置环境变量

u-boot环境变量是一些参数,这些参数有些是系统默认的,也可以是自定义的。系统默认的环境变量包括:

环境变量

说明

实例

ipaddr

设置系统IP地址

setenv ipaddr 192.168.0.100

bootdelay

启动延迟

setenv bootdelay 6

bootargs

Linux内核参数

setenv bootargs  root=1f02 console=ttyS0,115200

netmask

子网掩码

setenv netmask 255.255.255.0

serverip

TFTP服务器IP

setenv serverip 192.168.0.101

ethaddr

MAC地址

setenv ethaddr 06:01:3f:21:1b:44

bootcmd

u-boot启动命令

setenv bootcmd bootm 0x10000000

表2  u-boot环境变量

使用printenv命名可以打印u-boot中所有的环境变量。

15)saveenv –保存环境变量

YL2410 # saveenv

16)tftp  – 通过tftp协议下载数据

tftp [loadAddress] [bootfilename]

       loadAddress为下载地址,bootfilename为tftp服务器下的文件。

原创粉丝点击