您的位置:首页 > 其它

U-boot 命令使用详解[转载]

2009-05-05 23:03 387 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: