常用 U-boot命令详解

发布者:Jinyu521最新更新时间:2024-08-30 来源: cnblogs关键字:U-boot命令  shell 手机看文章 扫描二维码
随时随地手机看文章

U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,在我编译的U-boot-2009.11中的命令行模式模式下支持“Tab”键的命令补全和命令的历史记录功能。而且如果你输入的命令的前几个字符和别的命令不重复,那么你就只需要打这几个字符即可,比如我想看这个U-boot的版本号,命令就是“ version”,但是在所有的命令中没有其他任何一个的命令是由“v”开头的,所以只需要输入“v”即可。

[u-boot@MINI2440]# version

U-Boot 2009.11 ( 4月 04 2010 - 12:09:25)
[u-boot@MINI2440]# v

U-Boot 2009.11 ( 4月 04 2010 - 12:09:25)
[u-boot@MINI2440]# base
Base Address: 0x00000000
[u-boot@MINI2440]# ba
Base Address: 0x00000000



    由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。所以下面我挑一些烧写和引导常用命令介绍一下,其他的命令大家就举一反三,或者“help”吧!
(1)获取帮助
命令:help 或 ?
功能:查看当前U-boot版本中支持的所有命令。

[u-boot@MINI2440]# help
? - alias for 'help'
askenv - get environment variables from stdin
base - print or set address offset
bdinfo - print Board Info structure
bmp - manipulate BMP image data
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
dhcp - boot image via network using DHCP/TFTP protocol
echo - echo args to console
editenv - edit environment variable
eeprom - EEPROM sub-system
erase - erase FLASH memory
exit - exit script
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
flinfo - print FLASH memory information
fsinfo - print information about filesystems
fsload - load binary file from a filesystem image
go - start application at address 'addr'
help - print online help
i2c - I2C sub-system
icache - enable or disable instruction cache
iminfo - print header information for application image
imls - list all images found in flash
imxtract- extract a part of a multi-image
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loadx - load binary file over serial line (xmodem mode)
loady - load binary file over serial line (ymodem mode)
loop - infinite loop on address range
ls - list files in a directory (default /)
md - memory display
mm - memory modify (auto-incrementing address)
mmc - MMC sub-system
mtest - simple RAM read/write 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
reginfo - print register information
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
showvar - print local hushshell variables
sleep - delay execution for some time
source - run script from memory
test - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
unzip - unzip a memory region
usb - USB sub-system
usbboot - boot from USB device
version - print monitor version


如果你想获取某条命令的更详细的帮助,可以使用:

help <你想要查的指令>
或者 ? <你想要查的指令> ,
甚至 h <你想要查的指令缩写>。


以bmp指令为例:

[u-boot@MINI2440]# help bmp
bmp - manipulate BMP image data

Usage:
bmp info  - display image info
bmp display  [x y] - display image at x,y
[u-boot@MINI2440]# ? bmp
bmp - manipulate BMP image data

Usage:
bmp info  - display image info
bmp display  [x y] - display image at x,y
[u-boot@MINI2440]# h bm
bmp - manipulate BMP image data

Usage:
bmp info  - display image info
bmp display  [x y] - display image at x,y


(2)环境变量(environment variables,简称ENV)与相关指令
和shell类似,U-Boot也有环境变量。一些U-boot默认的环境变量如下:

 

环境变量

 

 

解释说明

 

bootdelay执行自动启动(bootcmd中的命令)的等候秒数
baudrate串口控制台的波特率
netmask以太网的网络掩码
ethaddr以太网的MAC地址
bootfile默认的下载文件名
bootargs传递给Linux内核的启动参数
bootcmd自动启动时执行命令
serveripTFTP服务器端的IP地址
ipaddr本地的IP地址
stdin标准输入设备,一般是串口
stdout标准输出,一般是串口,也可是LCD(VGA)
stderr标准出错,一般是串口,也可是LCD(VGA)


要看到你的板上的ENV值可使用printenv命令,例如我的板子:
  

[u-boot@MINI2440]# printenv
bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
bootcmd=nfs 0x30008000 192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
ipaddr=192.168.0.2
serverip=192.168.0.1
gatewayip=192.168.0.1
netmask=255.255.255.0
tekkaman=bmp d 70000
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000

Environment size: 470/131068 bytes



      你会发现有些有的ENV我没有,还有一个“tekkaman”的ENV。原因是如果你没有设置这个环境变量就不会打印出,你也可以自己定义ENV,并在命令中使用${ENV}来调用它。同时你也可以删除这个ENV。设置ENV的命令是setenv,格式为:

setenv name value


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

例如:我先将”tekkaman”参数删除,再设置,最后在一个命令串中调用。

[u-boot@MINI2440]# printenv tekkaman
tekkaman=bmp d 70000
[u-boot@MINI2440]# setenv tekkaman
[u-boot@MINI2440]# printenv tekkaman
## Error: 'tekkaman' not defined
[u-boot@MINI2440]# setenv tekkaman echo 'I am Tekkaman Ninja!'
[u-boot@MINI2440]# printenv tekkaman
tekkaman=echo I am Tekkaman
[u-boot@MINI2440]# echo I Love Linux ;${tekkaman}
I Love Linux
I am Tekkaman


当你设置了ENV,它只保存在内存中,如果你要它保存在存放ENV的固态存储器中,请使用:saveenv。

[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 -- 0% complete.
Writing to Nand... done


如果在启动的时候会看到U-boot打印出:“Warning - bad CRC, using default environment”,说明U-boot没有在存放ENV的固态存储器中找到有效的ENV,只好使用你在编译的时候定义的默认ENV。如果U-boot存放ENV的固态存储器的驱动是OK的,那么只要运行 saveenv就可以把默认ENV写入固态存储器,下次启动就不会有这个警告了。
       ENV可以放在许多固体存储器中,对于mini2440来说Nor Flash、Nand Flash或EEPROM都可以,就看你如何配置了(include/configs下的配置文件)。例如:
      Nor Flash:

#define CONFIG_ENV_IS_IN_FLASH 1
#define CONFIG_ENV_OFFSET 0X40000
#define CONFIG_ENV_SIZE            0x20000    /* Total Size of Environment Sector */

Nand Flash:

#define CONFIG_ENV_IS_IN_NAND 1
#define CONFIG_ENV_OFFSET 0X40000
#define CONFIG_ENV_SIZE            0x20000    /* Total Size of Environment Sector */


EEPROM:

#define CONFIG_ENV_IS_IN_EEPROM 1 /* use EEPROM for environment vars */
#define CONFIG_ENV_OFFSET 0x000 /* environment starts at offset 0 */
#define CONFIG_ENV_SIZE     0x400 /* 1KB */



CONFIG_ENV_OFFSET是在整个存储器中的偏移地址;
CONFIG_ENV_SIZE是指其使用的大小。

注意 CONFIG_ENV_OFFSET和 CONFIG_ENV_SIZE 的设置,不要覆盖了其他分区。
四、U-boot的使用(二)

命令:
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)


功能:以不同的协议从串口获取文件.。
格式基本都为:
load? [ off ] [ baud ]
第1个参数是下载到SDRAM的地址,如果不填,就是用默认配置:CONFIG_SYS_LOAD_ADDR
第2个参数是波特率,一般不填,用默认的115200.


    在windows下的超级终端可以用这些协议发送文件,但是在ubuntu下基本只能用kermit协议。一下使用C-kermit来发送一个文件到mini2440。

 

[u-boot@MINI2440]# loadb
## Ready for binary (kermit) download to 0x30008000 at 115200 bps...


    上面已经启动了U-boot的kermit传输协议,这时按下 Ctrl + , 再按 c, 切换到C-kermit的命令行模式,输入命令:send  <文件路径>,回车。

 

[u-boot@MINI2440]# loadb
## Ready for binary (kermit) download to 0x30008000 at 115200 bps...

(Back at MAGI-Linux)
----------------------------------------------------
C-Kermit 8.0.211, 10 Apr 2004, for Linux
Copyright (C) 1985, 2004,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/tekkaman/桌面/) C-Kermit>send /home/tekkaman/development/share/zImage.img

C-kermit就开始传送,并且显示一个传送界面,并动态显示传送进度。

C-Kermit 8.0.211, 10 Apr 2004, MAGI-Linux

   Current Directory: /home/tekkaman/��~L�~]�
Communication Device: /dev/ttyUSB0
Communication Speed: 115200
              Parity: none
         RTT/Timeout: 01 / 02
             SENDING: /home/tekkaman/development/share/zImage.img => zImage.img
           File Type: BINARY
           File Size: 2277540
        Percent Done: 19 /////////-

                          ...10...20...30...40...50...60...70...80...90..100
Estimated Time Left: 00:03:35
  Transfer Rate, CPS: 8536
        Window Slots: 1 of 1
         Packet Type: D
        Packet Count: 557
       Packet Length: 1000
         Error Count: 0
          Last Error:
        Last Message:

X to cancel file, Z to cancel group,  to resend last packet,
E to send Error packet, ^C to quit immediately, ^L to refresh screen.


传送完毕后,输入c ,回到U-boot的串口界面。

[1] [2] [3] [4] [5]
关键字:U-boot命令  shell 引用地址:常用 U-boot命令详解

上一篇:在u-boot中添加命令
下一篇:使用BusyBox制作linux根文件系统(CramFS+mdev)

推荐阅读最新更新时间:2026-03-20 23:54

u-boot中添加命令
u-boot是嵌入式系统中广泛使用的一种bootloader。它不仅支持众多的平台和参考板,而且支持丰富的命令,可以让用户对开发板进行各种操作。关于u-boot使用和移植的资料很多,这里不再赘述。下面用问答的方式介绍u-boot中命令的实现机制。 Q1: u-boot中命令的实现代码在什么地方? A1: 在u-boot源码的common目录下。通常一个或多个命令在对应的某个C文件中实现。如果用户要增加一个新命令的话,要在common目录下添加对应的C文件,并在Makefile中指定编译该文件。 Q2: 能不能给个命令的实现模板先? A2: #include common.h #include command.h
[单片机]
1_5.1.5_U-boot分析与使用_u-boot分析之u-boot命令实现_P
使用u-boot的命令,首先就是输入一个命令(字符串),然后回车,u-boot接收到命令之后就会执行相应的动作(函数)。 猜测是u-boot中有一个命令结构体,里面包含了命令的name和fun,run_command()函数就是在这个结构体里面查找命令并调用对应的函数。 下面来分析一下run_command()函数。 下图是指令解析,通过注释可以知道,可以在同一行输入两个命令,两个命令用;隔开即可。 可以看到,输入print; md.w 0,u-boot依次执行了print操作和md.w 0操作。 然后是处理一些宏,我们使用网卡或usb下载程序或执行某些操作,会生成一些环境变量或者宏,这个函数就是来处理这些宏的
[单片机]
1_5.1.5_U-boot分析与使用_<font color='red'>u-boot</font>分析之<font color='red'>u-boot</font><font color='red'>命令</font>实现_P
迅为imx6ull开发板使用c语言调用shell命令控制led灯
用命令来控制 led 灯没有感觉,那可以使用程序来控制,让程序帮我们输入这些命令,我们可以使用system 函数来完成。 头文件:#include 格式:system(要执行的命令) 代码实现: #include void main(void) { system(“echo none /sys/class/leds/sys-led/trigger”);//设置触发方式 while(1) { system(“echo 1 /sys/class/leds/sys-led/brightness”);//点亮 led2 sleep(5); system(“echo 0 /sys/class/leds/sys-led/brightne
[单片机]
迅为imx6ull开发板使用c语言调用<font color='red'>shell</font><font color='red'>命令</font>控制led灯
迅为-iMX6ULL开发板--C程序调用shell
本章节介绍的是在 linux 系统环境下 linux-C 调用 shell 命令控制 GPIO 输入输出步骤。shell 作为 Linux操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称,它解释由用户输入的命令并且把它们送到内核。 使用 shell 命令直接操作/sys/下的 gpio 节点,首先在 imx6ull-14x14-evk.dts 注释掉设备树的 LED 和按键功能,LED 引脚为 GPIO0_3,key 引脚为 GPIO1_18。 在程序中通过 shell 命令读取按键值和控制 LED 灯。 1.通过 popen 执行 shell 命令 popen 和 pclose 函
[单片机]
迅为-iMX6ULL开发板--C程序调用<font color='red'>shell</font>
一个功能强大的嵌入式shell
1. letter-shell 本期给大家带来的开源项目是 letter-shell,一个功能强大的嵌入式shell,作者NevermindZZT,目前收获 155 个star,遵循 MIT 开源许可协议。 letter shell 3.0是一个C语言编写的,可以嵌入在程序中的嵌入式shell,通俗一点说就是一个串口命令行,可以通过命令行调用、运行程序中的函数。 目前 letter-shell 3.0版本支持的功能有: 命令自动补全 快捷键功能定义 命令权限管理 用户管理 变量支持 项目地址: https://github.com/NevermindZZT/letter-shell 2. 移植letter-shell 2.1.
[单片机]
迅为IMX6ULL开发板C程序调用shell
本章节介绍的是在 linux 系统环境下 linux-C 调用 shell 命令控制GPIO输入输出步骤。shell 作为 Linux 操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称,它解释由用户输入的命令并且把它们送到内核。 使用shell命令直接操作/sys/下的gpio节点,首先在imx6ull-14x14-evk.dts注释掉设备树的 LED 和按键功能,LED引脚为GPIO0_3,key引脚为GPIO1_18。 在程序中通过shell命令读取按键值和控制LED灯。 1.通过popen执行shell命令 popen和pclose函数实现的功能是创建一个管道,用来连接
[单片机]
迅为IMX6ULL开发板C程序调用<font color='red'>shell</font>
shell学习一:shell命令行实现
1:以s5pv210芯片的开发板为例。标准输入输出设置为串口的输入输出,通过开发板串口连接PC主机,使用SecureCRT软件,来构建一个类似uboot中的shell命令行界面; 2:shell命令行界面的实质就是提供人机交互,类似GUI、xwindows等; shell命令行界面的实现原理: 利用一个while死循环构建一个命令行终端,这个命令行终端可以读取、解析命令、并介串口来输出,把结果在SecureCRT中打印出来; 需要如下几个函数:start.S 用来做基本的初始化:如关开门狗、电源置锁、初始化时钟、初始化DDR等; 接下来初始化串口,构建一个以串口输入输出的标准化函数; 下面这段代码初始化了串
[单片机]
【Contiki学习】01.Contiki-stm32系统下实现serial-shell功能
一,背景介绍 之前通过网上收集资料(资料后期整理之后会在博客分享),在stm32上面跑通了,就是实现了简单的点灯程序,以及串口输出。 但是后期开发使用肯定需要用到shell,经过一番折腾后小有收获。 在这说一下开发环境:IAR+stm32vet6(ST官方库3.5+contiki3.0) 二,准备工作 1,在contiki源码中按照目录提取以下文件: ps. stm32_shell.c是自行添加的代码 三,源码分析 1,先看一下main函数: int main() { dbg_setup_uart(); led_init(); printf( Initialisingrn ); cl
[单片机]
【Contiki学习】01.Contiki-stm32系统下实现serial-<font color='red'>shell</font>功能
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved