U-Boot命令大全(功能参数及用法)

时间:2021-08-31 16:48:26

U-Boot上电启动后,按任意键可以退出自动启动状态,进入命令行。

U-Boot 2010.03 (Sep 25 2011 - 16:18:50)
    DRAM: 64 MB
    Flash: 2 MB
    NAND: 64 MiB
    In: serial
    Out: serial
    Err: serial
    Net: CS8900-0
    Hit any key to stop autoboot: 1

在命令行提示符下,输入U-Boot的命令并执行。U-Boot可支持几十个常用命令,通过这些命令,可以对开发板进行调试,引导Linux内核,还可以擦写Flash完成系统部署等功能。掌握这些命令的使用,才能够顺利地进行嵌入式系统的开发。

输入help命令,可以得到当前U-Boot的所有命令列表。每一条命令后面是简单的命令说明。

U-Boot还提供了更加详细的命令帮助,通过help命令还可以查看每个命令的参数说明。由于开发过程的需要,有必要先把U-Boot命令的用法弄清楚。接下来,根据每一条命令的帮助信息,解释一下这些命令的功能和参数。

1)bootm命令

bootm命令可以引导启动存储在内存中的程序映像,这些内存包括RAM和可以永久保存的Flash。

# help bootm
    bootm - boot application image from memory
    Usage:
    bootm [addr [arg ...]]
        - boot application image stored in memory
            passing arguments 'arg ...'; when booting a Linux kernel,
            'arg' can be the address of an initrd image
    Sub-commands to do part of the bootm sequence. The sub-commands must beissued in
    the order below (it's ok to not issue all sub-commands):
            start [addr [arg ...]]
            loados - load OS image
            cmdline - OS specific command line processing/setup
            bdt - OS specific bd_t processing
            prep - OS specific prep before relocation or go
            go - start OS

● 第1个参数addr是程序映像的地址,这个程序映像必须转换成U-Boot的格式。
    ● 第2个参数对于引导Linux内核有用,通常作为U-Boot格式的RAMDISK映像存储地址;也可以是传递给Linux内核的参数(默认情况下传递bootargs环境变量给内核)。

2)bootp命令

bootp命令要求DHCP服务器分配IP地址,然后通过TFTP协议下载指定的文件到内存。

# help bootp
    bootp - boot image via network using BOOTP/TFTP protocol

Usage:
    bootp [loadAddress] [[hostIPaddr:]bootfilename]

● 第1个参数是load Address下载文件存放的内存地址。
    ● 第2个参数是bootfilename要下载的文件名称,这个文件应该在开发主机上准备好。

3)cmp命令

cmp命令可以比较两块内存中的内容。.b以字节为单位;.w以字为单位;.l以长字为单位。注意:cmp.b中间不能保留空格,需要连续输入命令。

# help cmp
    cmp - memory compare

Usage:
    cmp [.b, .w, .l] addr1 addr2 count

● 第1个参数addr1是第一块内存的起始地址。
    ● 第2个参数addr2是第二块内存的起始地址。
    ● 第3个参数count是要比较的数目,单位是字节、字或者长字。

4)cp命令

cp命令可以在内存中复制数据块,包括对Flash的读写操作。

# help cp
    cp - memory copy

Usage:
    cp [.b, .w, .l] source target count

● 第1个参数source是要复制的数据块起始地址。
    ● 第2个参数target是数据块要复制到的地址。这个地址如果在Flash中,那么会直接调用写Flash的函数操作。所以U-Boot写Flash就使用这个命令,当然需要先把对应Flash区域擦干净。
    ● 第3个参数count是要复制的数目,根据cp.b、cp.w、cp.l分别以字节、字、长字为单位。

5)crc32命令

crc32命令可以计算存储数据的校验和。

# help crc32
    crc32 - checksum calculation

Usage:
    crc32 address count [addr]
        - compute CRC32 checksum [save at addr]

● 第1个参数address是需要校验的数据起始地址。
    ● 第2个参数count是要校验的数据字节数。
    ● 第3个参数addr用来指定保存结果的地址。

6)echo命令

echo命令回显参数。

# help echo
    echo - echo args to console

Usage:
    echo [args..]
        - echo args to console; \c suppresses newline

7)erase命令

erase命令可以擦除Flash。参数必须指定Flash擦除的范围。

# help erase
    erase - erase FLASH memory

Usage:
    erase start end
        - erase FLASH from addr 'start' to addr 'end'
    erase start +len
        - erase FLASH from addr 'start' to the end of sect w/addr 'start'+'len'-1
    erase N:SF[-SL]
        - erase sectors SF-SL in FLASH bank # N
    erase bank N
        - erase FLASH bank # N
    erase all
        - erase all FLASH banks

按照起始地址和结束地址,start必须是擦除块的起始地址;end必须是擦除末尾块的结束地址,这种方式最常用。举例说明:擦除0x20000~0x3ffff区域命令为erase 20000 3ffff。

按照组和扇区,N表示Flash的组号,SF表示擦除起始扇区号,SL表示擦除结束扇区号。另外,还可以擦除整个组,擦除组号为N的整个Flash组。擦除全部Flash只要给出一个all的参数即可。

8)nand命令

nand命令可以通过不同的参数实现对Nand Flash的擦除、读、写操作。

常见的几种命令的含义如下(具体格式见help nand)。

# help nand
    nand - NAND sub-system

Usage:
    nand info - show available NAND devices
    nand device [dev] - show or set current device
    nand read - addr off|partition size
    nand write - addr off|partition size
        read/write 'size' bytes starting at offset 'off'
        to/from memory address 'addr', skipping bad blocks.
    nand erase [clean] [off size] - erase 'size' bytes from
        offset 'off' (entire device if not specified)
    nand bad - show bad blocks
    nand dump[.oob] off - dump page
    nand scrub - really clean NAND erasing bad blocks (UNSAFE)
    nand markbad off [...] - mark bad block(s) at offset (UNSAFE)
    nand biterr off - make a bit error at offset (UNSAFE)

● nand erase:擦除Nand Flash。
    ● nand read:读取Nand Flash,遇到flash坏块时会出错。
    ● nand write:写Nand Flash,nand write命令遇到flash坏块时会出错。

9)flinfo命令

flinfo命令打印全部Flash组的信息,也可以只打印其中某个组。一般嵌入式系统的Flash只有一个组。

# help flinfo
    flinfo - print FLASH memory information

Usage:
    flinfo
        - print information for all FLASH memory banks
    flinfo N
        - print information for FLASH memory bank # N

10)go命令

go命令可以执行应用程序。

# help go
    go - start application at address 'addr'

Usage:
    go addr [arg ...]
        - start application at address 'addr'
        passing 'arg' as arguments

● 第1个参数addr是要执行程序的入口地址。
    ● 第2个可选参数是传递给程序的参数,可以不用。

11)iminfo命令

iminfo命令可以打印程序映像的开头信息,包含了映像内容的校验(序列号、头和校验和)。

# help iminfo
    iminfo - print header information for application image

Usage:
    iminfo addr [addr ...]
        - print header information for application image starting at
        address 'addr' in memory; this includes verification of the
        image contents (magic number, header and payload checksums)

第1个参数addr指定映像的起始地址。可选的参数是指定更多的映像地址。

12)loadb命令

loadb命令可以通过串口线下载二进制格式文件。

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

Usage:
    loadb [ off ] [ baud ]
        - load binary file over serial line with offset 'off' and baudrate 'baud'

13)loads命令

loads命令可以通过串口线下载S-Record格式文件。

# help loads
    loads - load S-Record file over serial line

Usage:
    loads [ off ]
        - load S-Record file over serial line with offset 'off'

14)mw命令

mw命令可以按照字节、字、长字写内存,.b、.w、.l的用法与cp命令相同。

# help mw
    mw - memory write (fill)

Usage:
    mw [.b, .w, .l] address value [count]

● 第1个参数address是要写的内存地址。
    ● 第2个参数value是要写的值。
    ● 第3个可选参数count是要写单位值的数目。

15)nfs命令

nfs命令可以使用NFS网络协议通过网络启动映像。

# help nfs
    nfs - boot image via network using NFS protocol

Usage:
    nfs [loadAddress] [[hostIPaddr:]bootfilename]

16)printenv命令

printenv命令打印环境变量。可以打印全部环境变量,也可以只打印参数中列出的环境变量。

# help printenv
    printenv - print environment variables

Usage:
    printenv
        - print values of all environment variables
    printenv name ...
        - print value of environment variable 'name'

17)protect命令

protect命令是对Flash写保护的操作,可以使能和解除写保护。

help protect
    protect - enable or disable FLASH write protection

Usage:
    protect on start end
        - protect FLASH from addr 'start' to addr 'end'
    protect on start +len
        - protect FLASH from addr 'start' to end of sect w/addr 'start'+'len'-1
    protect on N:SF[-SL]
        - protect sectors SF-SL in FLASH bank # N
    protect on bank N
        - protect FLASH bank # N
    protect on all
        - protect all FLASH banks
    protect off start end
        - make FLASH from addr 'start' to addr 'end' writable
    protect off start +len
        - make FLASH from addr 'start' to end of sect w/addr 'start'+'len'-1 wrtable
    protect off N:SF[-SL]
        - make sectors SF-SL writable in FLASH bank # N
    protect off bank N
        - make FLASH bank # N writable
    protect off all
        - make all FLASH banks writable

● 第1个参数on代表使能写保护;off代表解除写保护。
    ● 第2和3个参数是指定Flash写保护操作范围,与擦除的方式相同。

18)rarpboot命令

rarpboot命令可以使用TFTP协议通过网络启动映像,也就是把指定的文件下载到指定地址,然后执行。

# help rarpboot
    rarpboot - boot image via network using RARP/TFTP protocol

Usage:
    rarpboot [loadAddress] [[hostIPaddr:]bootfilename]

● 第1个参数是loadAddress映像文件下载到的内存地址。
    ● 第2个参数是bootfilename要下载执行的镜像文件。

19)run命令

run命令可以执行环境变量中的命令,后面参数可以跟几个环境变量名。

# help run
    run - run commands in an environment variable

Usage:
    run var [...]
        - run the commands in the environment variable(s) 'var'

20)setenv命令

setenv命令可以设置环境变量。

# help setenv
    setenv - set environment variables

Usage:
    setenv name value ...
        - set environment variable 'name' to 'value ...'
    setenv name
        - delete environment variable 'name'

● 第1个参数是name环境变量的名称。
    ● 第2个参数是value要设置的值,如果没有第2个参数,表示删除这个环境变量。

21)sleep命令

sleep命令可以使用TFTP协议通过网络下载文件,按照二进制文件格式下载。另外,使用这个命令,必须配置好相关的环境变量,例如serverip和ipaddr。

help sleep
    sleep - delay execution for some time

Usage:
    sleep N
        - delay execution for N seconds (N is _decimal_ !!!)

sleep命令可以延迟N秒执行,N为十进制数。

22)nm命令

nm命令可以修改内存,可以按照字节、字、长字操作。

# help nm
    nm - memory modify (constant address)

Usage:
    nm [.b, .w, .l] address

参数address是要读出并且修改的内存地址。

23)tftpboot命令

tftpboot命令可以通过使用TFTP协议在网络上下载二进制格式文件。

tftpboot - boot image via network using TFTP protocol

Usage:
    tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

24)saveenv 命令

saveenv命令可以保存环境变量到存储设备。

# help saveenv
    saveenv - save environment variables to persistent storage

Usage:
    saveenv

这些U-Boot命令为嵌入式系统提供了丰富的开发和调试功能。在Linux内核启动和调试过程中,都可以用到U-Boot的命令。但是一般情况下,不需要使用全部命令。比如已经支持以太网接口,可以通过tftpboot命令来下载文件,那么就没有必要使用串口下载的loadb。反过来,如果开发板需要特殊的调试功能,也可以添加新的命令。

节选《从实践中学嵌入式Linux应用程序开发》