`
yidongkaifa
  • 浏览: 4052211 次
文章分类
社区版块
存档分类
最新评论

U-boot 命令使用详解(转)

 
阅读更多

U-boot是一个通用的bootloader,提供了很多有用的指令,可以用于程序的调试,非常方便.但程序运行时输出的帮助信息不是很详细,不是很清楚,而README文件中说得也不很详细,下在是记录了在调试过程中使用这些命令的一些总结,希望对初学者有所帮助,有些不知道怎么用,试了很多次,甚至仔细看了代码才知道怎么用的,通过本文,希望初学u-boot的朋友和使用u-boot调试程序的朋友学习起来更轻松.

u-boot的指令解析有模糊匹配功能,要使用某一条指令可以用任意长的前几个字母即可,如tftpboot命令可以略写为tftp,但必须没有重复,否则提示没有该指令,如saves,saveenv都是save开头,如果去掉saves指令,即去不支持saves指令时就可以通过save指令保存环境变量,如果u-boot中同时包含saves, saveenv指令,则发源再加长,可以使用savee命令执行saveenv
bdinfo– 显示或者设置地址偏移

=> help base

base

- print address offset for memory commands

base off

- set address offset for memory commands to ''''off''''

=>

你可以使用base命令(简写为ba)来显示或者设置一个“基地址”作为所有存储类命令的地址偏移值。默认的基址是0,所以你输入的所有地址都是实地址。但是,当你重复访问某一特定存储区域(如一些嵌入式PowerPc处理器的内存)时,如果设置此区域的开始地址作为基址,只需使用偏移地址,这将非常简便:

=> base

Base Address: 0x00000000

=> md 0 c

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

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

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

=> base 40000000

Base Address: 0x40000000

=> 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)......

bdinfo

=> help bdinfo

bdinfo - No help available.

=>

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

=> bdi

memstart = 0x00000000

memsize = 0x04000000

flashstart = 0x40000000

flashsize = 0x00800000

flashoffset = 0x00030000

sramstart = 0x00000000

sramsize = 0x00000000

immr_base = 0xFFF00000

bootflags = 0x00000001

intfreq = 50 MHz

busfreq = 50 MHz

ethaddr = 00:D0:93:00:28:81

IP addr = 10.0.0.99

baudrate = 115200 bps

=>

coninfo 打印环境变量,无需任何参数。

=> help conin

coninfo

=>

coninfo命令 (简写为conin) 显示可用的控制I/O设备信息。

=> conin

List of available devices:

serial 80000003 SIO stdin stdout stderr

=>

输出包括了设备名、标识和当前使用情况。以此为例:

serial 80000003 SIO stdin stdout stderr

crc32校验和计算

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

=> crc 100004 3FC

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

=>

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

=> crc 100004 3FC 100000

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

=> md 100000 4

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

printenv 打印环境变量,无需任何参数。

Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
Environment size: 80/8188 bytes

setenv 设置新的变量,命令格式为:
setenv env_var_name value
env_var_name 为要改变的变量名,value为其值,中间用空格开

Uboot> setenv myboard AT91RM9200DK
Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
myboard=AT91RM9200DK
Environment size: 102/8188 bytes

saveenv 保存变量,使用setenv命令修改了参数以后要执行此命令保存在Flash或EEPROM中,在使用这些指令的时候可以用缩写,即用指令的前几个字母,只要不与其它指令重复就行,u-boot便执行匹配的指令.saveenv可以运行save亦可执行该指令.

Loadb 通过串口Kermit协议下载二进制数据。指令格式
loadb address, address用十六进制格式,执行该指令后,可以用超级终端通过kermit协议向u-boot发送二进制文件,即可以通过该指令将程序下载到RAM中,然后通过go指令运行下载的程序.

go 跳转指令,跳转到目标地址执行程序,指令格式为:
go address.
address为程序所在地址,与loadb, tftpd等指令配合进行程序调试.

Tftp 通过网络下载程序,需要先设置好网络配置

Uboot> setenv ethaddr 12:34:56:78:9A:BC
Uboot> setenv ipaddr 192.168.1.1
Uboot> setenv serverip 192.168.1.254 (tftp服务器的地址)
下载bin文件到地址0x20000000处。
Uboot> tftp 20000000 application.bin (application.bin应位于tftp服务程序的目录)

Uboot> tftp 32000000 vmlinux
把server(IP=环境变量中设置的serverip)中/tftpdroot/ 下的vmlinux通过TFTP读入到物理内存32000000处。

md 显示内存区的内容。

mtest简单地RAM测试

=> help mtest

mtest [start [end [pattern]]]

- simple RAM read/write test

=>

mtest提供一个简单地存储器测试。

=> mtest 100000 200000

Testing 00100000 ... 00200000:

Pattern 0000000F Writing... Reading...

mm 修改内存,地址自动递增。
存储单元修正(自动增长)

=> help md

md [.b, .w, .l] address [# of objects]

- memory display

=>

mm提供了一种互动修改存储器内容的方法。它将会显示地址和当前值,然后提示用户输入。如果你输入了一个合法的十六进制数,这个新的值将会被写入该地址。然后提示下一个地址。如果你没有输入任何值,只是按了一下回车,那么该地址的内容保持不变。只要你输入任意非十六进制的数据(比如说.),此命令就立刻结束。

=> mm 100000

00100000: 27051956 ? 0

00100004: 50504342 ? AABBCCDD

00100008: 6f6f7420 ? 01234567

0010000c: 312e312e ? .

=> md 100000 10

00100000: 00000000 aabbccdd 01234567 312e312e .........#Eg1.1.

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

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

00100030: 00000000 00000000 00000000 00000000 ................

=>

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

=> mm.w 100000

00100000: 0000 ? 0101

00100002: 0000 ? 0202

00100004: aabb ? 4321

00100006: ccdd ? 8765

00100008: 0123 ? .

=> md 100000 10

00100000: 01010202 43218765 01234567 312e312e ....C!.e.#Eg1.1.

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

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

00100030: 00000000 00000000 00000000 00000000 ................

=>

=> mm.b 100000

00100000: 01 ? 48

00100001: 01 ? 61

00100002: 02 ? 6c

00100003: 02 ? 6c

00100004: 43 ? 6f

00100005: 21 ? 20

00100006: 87 ? 20

00100007: 65 ? 20

00100008: 01 ? .

=> md 100000 10

00100000: 48616c6c 6f202020 01234567 312e312e Hallo .#Eg1.1.

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

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

00100030: 00000000 00000000 00000000 00000000 ................

nm 修改内存,地址不自动递增。
存储单元修正(恒定地址)

=> help nm

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

- memory modify, read and keep address

=>

nm命令用于互动地往某个相同的地址写入不同的数据。在访问和修改设备寄存器的时候,这将会非常有用。

=> nm.b 100000

00100000: 00 ? 48

00100000: 48 ? 61

00100000: 61 ? 6c

00100000: 6c ? 6c

00100000: 6c ? 6f

00100000: 6f ? .

=> md 100000 8

00100000: 6f000000 115511ff ffffffff ffff1155 o....U.........U

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

Mw 用模型填充内存

mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设为0xFF)

=> help mw

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

- write memory

=>

mw是一种往存储器填写某些数据的方法。如果调用时没加计数参数,值将仅仅被写到某一给定的地址。当使用了计数参数时,整个存储区域都会写入该值。

=> md 100000 10

00100000: 0000000f 00000010 00000011 00000012 ................

00100010: 00000013 00000014 00000015 00000016 ................

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

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

=> mw 100000 aabbccdd

=> md 100000 10

00100000: aabbccdd 00000010 00000011 00000012 ................

00100010: 00000013 00000014 00000015 00000016 ................

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

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

=> mw 100000 0 6

=> md 100000 10

00100000: 00000000 00000000 00000000 00000000 ................

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

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

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

=>

它又是一条可以加标识符.l, .w和.b的命令:

=> mw.w 100004 1155 6

=> 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 ................

=> mw.b 100007 ff 7

=> 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 ................

=>

Cp 拷贝一块内存到另一块

=> help cp

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

- copy memory

=>

cp用来复制存储单元。

=> cp 40000000 100000 10000

=>

cp 可以使用类型标识符 .l , .w和.b。

md显示存储单元内容

=> help md

md [.b, .w, .l] address [# of objects]

- memory display

=>

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

=> md 100000

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

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

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

00100030: 00000000 00000000 00000000 00000000 ................

00100040: 00000000 00000000 00000000 00000000 ................

00100050: 00000000 00000000 00000000 00000000 ................

00100060: 00000000 00000000 00000000 00000000 ................

00100070: 00000000 00000000 00000000 00000000 ................

00100080: 00000000 00000000 00000000 00000000 ................

00100090: 00000000 00000000 00000000 00000000 ................

001000a0: 00000000 00000000 00000000 00000000 ................

001000b0: 00000000 00000000 00000000 00000000 ................

001000c0: 00000000 00000000 00000000 00000000 ................

001000d0: 00000000 00000000 00000000 00000000 ................

001000e0: 00000000 00000000 00000000 00000000< SPAN>

分享到:
评论

相关推荐

    U-BOOT命令详解

    U-BOOT命令详解,一些常用的U-BOOT命令

    u-boot命令详解

    u-boot命令详解,全面介绍了u-boot命令,并对给出 了命令使用方法,是学习u-boot命令的必备资料!

    U-Boot 常用命令 详解

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

    18-1-U-Boot启动参数详解.pdf

    1 U-Boot 启动参数解析 进入U-Boot命令行使用printenv命令可看到U-Boot启动参数,如使用默认启动参数, 类似如下:

    u-boot命令.doc

    这里收集了大量的U-boot命令,供大家学习参考

    u-boot

    常用 U-boot命令详解(z)

    uboot详细命令.pdf

    常用的U-boot命令详解 2 (1)获取帮助 2 (2)环境变量(environment variables,简称ENV)与相关指令 5 四、U-boot的使用(二) 7 (3)串口传输命令 7 (4)网络命令 9 (5)Nand Flash操作指令 11 四、U-boot的...

    u-boot移植详解

    详细的介绍了uboot各种命令,uboot工作原理,最后给出了非常详细的移植步骤,非常适合初学者。

    u-boot常用命令汇总

    一、nandflash分区信息 二、设置机器ID 三、设置环境变量 四、tftp烧写

    OMPL138及U.docx

    U-Boot命令--制作自己的U-Boot菜单(一) 26 检测网络是否畅通 27 基于OMAP-L138电路板的U-boot移植 28 嵌入还开发U-boot框架完整分析 32 U-boot中常用参数设定及常用宏的解释和说明 37 OMAPL138的启动顺序39 ...

    mini2440之U-boot移植详细手册-20100419

    4.2 常用U‐BOOT命令详解............................................................................................................................... ....... 13  4.2.1获取帮助 ........................

    uboot移植 的常用命令详解

    移植U-Boot手记,U-Boot的常用命令详解

    linux MDIO详解.pdf

    MII 是一个标准接口,用于连接 MAC 和 PHY。MII 是 IEEE-802.3 定义的以太网标准, MII 接口可以同时控制多个 PHY。

    uboot常用命令详解

    uboot使用中实用命令详解,由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。所以下面我挑一些烧写和引导常用命令介绍一下

    Uboot命令详细解析

    uboot命令详解

    嵌入式Linux应用程序开发详解

    153 5.2.2 U-Boot概述 155 5.2.3 U-Boot源码导读 156 5.2.4 U-Boot移植主要步骤 163 5.2.5 U-Boot常见命令 164 5.3 实验内容——移植Linux内核 164 本章小结 165 思考与练习 165 第6章 文件I/O编程 ...

    UBOOT详解.pdf

    然后介绍uboot的编译系统, 让你能了解到SPL和u-boot.bin是如何编译出来的, 哪些C代码会被编译进SPL和u-boot.bin. 接着会介绍uboot的启动流程, 从第一行汇编代码开始, 梳理一遍代码的运行流程. 最后一章会介绍...

Global site tag (gtag.js) - Google Analytics