- 论坛徽章:
- 0
|
DENX U-Boot及Linux使用手册(续上2)
分类:
技术笔记
2005.6.13 12:39 作者:
coosign
|
评论:0
| 阅读:246
5.9 U-Boot命令介绍
这一节将介绍U-Boot中最重要的指令。U-Boot可配置性非常强,所以并不是所有的命令都已经在你的硬件平台上安装,此外可能也有这儿没提到的命令。你可以使用help命令来显示根据你的配置所有可用的命令列表。
对于大多数命令,你不必打全这些命令,只需输入一些字符足以。比如,help可以简写为h。
一些命令的执行依赖于U-Boot的配置以及U-Boot中一些环境变量的定义。
所有的U-Boot命令都把输入的数字当作十六进制的格式。
不要使用除了退格键之外的其它编辑键,因为在诸如环境变量中隐藏的字符是很难被发现的。
5.9.1 信息类命令
5.9.1.1 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
=>
5.9.1.2 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
这个输出结果意为串口设备是一个系统设备(标志‘S’),它提供输入(标志‘I’)和输出(标志‘O’)功能,而且当前已经指派给3个标准I/O流:tdin,stdout 和stderr。
5.9.1.3 flinfo – 显示Flash存储信息
=> help flinfo
flinfo
- print information for all FLASH memory banks
flinfo N
- print information for FLASH memory bank # N
=>
flinfo命令 (简写为fli) 用于获取可用的flash存储信息(参见后面的Flash存储命令)。
=> fli
Bank # 1: FUJITSU AM29LV160B (16 Mbit, bottom boot sect)
Size: 4 MB in 35 Sectors
Sector Start Addresses:
40000000 (RO) 40008000 (RO) 4000C000 (RO) 40010000 (RO) 40020000 (RO)
40040000 40060000 40080000 400A0000 400C0000
400E0000 40100000 40120000 40140000 40160000
40180000 401A0000 401C0000 401E0000 40200000
40220000 40240000 40260000 40280000 402A0000
402C0000 402E0000 40300000 40320000 40340000
40360000 40380000 403A0000 403C0000 403E0000
Bank # 2: FUJITSU AM29LV160B (16 Mbit, bottom boot sect)
Size: 4 MB in 35 Sectors
Sector Start Addresses:
40400000 40408000 4040C000 40410000 40420000
40440000 40460000 40480000 404A0000 404C0000
404E0000 40500000 40520000 40540000 40560000
40580000 405A0000 405C0000 405E0000 40600000
40620000 40640000 40660000 40680000 406A0000
406C0000 406E0000 40700000 40720000 40740000
40760000 40780000 407A0000 407C0000 407E0000
=>
5.9.1.4 iminfo – 显示映像文件头部信息
=> help iminfo
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)
=>
iminfo (简写为imi) 用于显示像Linux内核或者ramdisk之类的映像文件的头部信息。 它显示映像名、类型、大小以及CRC32校验和以验证文件没问题。
=> imi 100000
## Checking Image at 00100000 ...
Image Name: Linux-2.4.4
Created: 2002-04-07 21:31:59 UTC
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 605429 Bytes = 591 kB = 0 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
=>
跟其它很多命令一样,imi命令的精确操作可由U-Boot的一些环境变量控制(这儿的是变量verify)。参见后面的详细介绍。
5.9.1.5 help – 显示在线帮助
=> help help
help [command ...]
- show help information (for 'command')
'help' prints online help for the monitor commands.
Without arguments, it prints a short usage message for all commands.
To get detailed help information for specific commands you can type
'help' with one or more command names as arguments.
=>
help指令(简写为h或者?)显示在线帮助。如果不加任何参数,它会打印出所有当前U-Boot可用命令列表。你可以把某一指令名作为help的参数来获得这一命令的具体信息。比如:
=> help protect
protect on start end
- protect FLASH from addr 'start' to addr 'end'
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 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
=>
5.9.2 存储类指令
5.9.2.1 base – 显示或者设置地址偏移
=> 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)......
=>
5.9.2.2 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'.
=>
可以看到,CRC32的校验和不仅显示出来了,还存储在地址为0x10000000的存储单元里。
5.9.2.3 cmp – 存储单元比较
=> help cmp
cmp [.b, .w, .l] addr1 addr2 count
- compare memory
=>
使用cmp命令你可以比较两个存储区域的内容是否一致。这个命令不仅可以测试由第3个参数确定的整个区域,还可以在第一个不同的地方停下来。
=> cmp 100000 40000000 400
word at 0x00100004 (0x50ff4342) != word at 0x40000004 (0x50504342)
Total of 1 word were the same
=> md 100000 C
00100000: 27051956 50ff4342 6f6f7420 312e312e '..VP.CBoot 1.1.
00100010: 3520284d 61722032 31203230 3032202d 5 (Mar 21 2002 -
00100020: 2031393a 35353a30 34290000 00000000 19:55:04)......
=> md 40000000 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)......
=>
跟很多的存储类命令一样,cmp可以采用不同的长度访问存储器:可以是32bit(长字),16bit(字)或者8bit(字节)数据。默认使用32bit,或者使用cmp.l代替,结果是一样的。如果你想以16bit或者字数据访问存储器,你可以用cmp.w代替;如果是8bit或者字节数据,请用cmp.b。
必须注意到计数参数确定了需要被处理的数据的总长度,也就是有多少长字、字或者字节需要被比较。
=> cmp.l 100000 40000000 400
word at 0x00100004 (0x50ff4342) != word at 0x40000004 (0x50504342)
Total of 1 word were the same
=> cmp.w 100000 40000000 800
halfword at 0x00100004 (0x50ff) != halfword at 0x40000004 (0x5050)
Total of 2 halfwords were the same
=> cmp.b 100000 40000000 1000
byte at 0x00100005 (0xff) != byte at 0x40000005 (0x50)
Total of 5 bytes were the same
=>
5.9.2.4 cp – 存储器拷贝
=> help cp
cp [.b, .w, .l] source target count
- copy memory
=>
cp用来复制存储单元。
=> cp 40000000 100000 10000
=>
cp 可以使用类型标识符 .l , .w和.b。
5.9.2.5 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 ................
001000f0: 00000000 00000000 00000000 00000000 ................
=>
00100100: 3c60fff0 7c7e9ba6 3aa00001 4800000c ..|~..:...H...
00100110: 3aa00002 48000004 38601002 7c600124 :...H...8`..|`.$
00100120: 7c7b03a6 7c7422a6 7c000278 7c1c23a6 |{..|t".|..x|.#.
00100130: 7c1d23a6 7c1623a6 7c1723a6 7c708aa6 |.#.|.#.|.#.|p..
00100140: 7c788aa6 3c600a00 7c708ba6 7c788ba6 |x..p..|x..
00100150: 3c600c00 7c708ba6 7c788ba6 3c600400 ..|p..|x..
00100160: 7c788ba6 3c600200 7c708ba6 7c0002e4 |x....|...
00100170: 4c00012c 3c604000 60630000 38630188 L..,..8c..
00100180: 7c6803a6 4e800020 3c60fff0 60612ec0 |h..N.. a..
00100190: 9401fffc 9401fffc 38400007 7c5e23a6 ........8@..|^#.
001001a0: 3c400000 60420000 7c5523a6 48000005 ..`B..|U#.H...
001001b0: 7dc802a6 800e22bc 7dc07214 48019d41 }.....".}.r.H..A
001001c0: 7ea3ab78 4800c05d 00000000 00000000 ~..xH..]........
001001d0: 00000000 00000000 00000000 00000000 ................
001001e0: 00000000 00000000 00000000 00000000 ................
001001f0: 00000000 00000000 00000000 00000000 ................
=>
这条命令同样可以采用类型标识符 .l, .w和.b :
=> md.w 100000
00100000: 2705 1956 5050 4342 6f6f 7420 312e 312e '..VPPCBoot 1.1.
00100010: 3520 284d 6172 2032 3120 3230 3032 202d 5 (Mar 21 2002 -
00100020: 2031 393a 3535 3a30 3429 0000 0000 0000 19:55:04)......
00100030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00100040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00100050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00100060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00100070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
=> md.b 100000
00100000: 27 05 19 56 50 50 43 42 6f 6f 74 20 31 2e 31 2e '..VPPCBoot 1.1.
00100010: 35 20 28 4d 61 72 20 32 31 20 32 30 30 32 20 2d 5 (Mar 21 2002 -
00100020: 20 31 39 3a 35 35 3a 30 34 29 00 00 00 00 00 00 19:55:04)......
00100030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
=>
上次显示的存储单元地址和计数参数值会被记忆,所以你可以不加任何参数仅仅输入md,它将会自动地显示下一个地址,使用相同的计数参数:
=> md.b 100000 20
00100000: 27 05 19 56 50 50 43 42 6f 6f 74 20 31 2e 31 2e '..VPPCBoot 1.1.
00100010: 35 20 28 4d 61 72 20 32 31 20 32 30 30 32 20 2d 5 (Mar 21 2002 -
=> md.w 100000
00100000: 2705 1956 5050 4342 6f6f 7420 312e 312e '..VPPCBoot 1.1.
00100010: 3520 284d 6172 2032 3120 3230 3032 202d 5 (Mar 21 2002 -
00100020: 2031 393a 3535 3a30 3429 0000 0000 0000 19:55:04)......
00100030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
=> 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 ................
=>
5.9.2.6 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 ................
=>
5.9.2.7 mtest – 简单地RAM测试
=> help mtest
mtest [start [end [pattern]]]
- simple RAM read/write test
=>
mtest提供一个简单地存储器测试。
=> mtest 100000 200000
Testing 00100000 ... 00200000:
Pattern 0000000F Writing... Reading...
=>
它往存储器写入数据,这样会修改存储单元。如果遇到ROM或者flash存储单元,它会写入失败。
如果测试的存储范围包括U-Boot使用的区域(如中断向量表,或者内部程序代码,堆栈或者堆存放的单元),此命令可能会使系统崩溃。
5.9.2.8 mw – 写存储器
=> 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 ................
=>
5.9.2.9 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 ................
=>
nm同样可以加上标识符 .l, .w和.b。
5.9.2.10 loop – 在地址范围内无限循环
=> help loop
loop [.b, .w, .l] address number_of_objects
- loop on a set of addresses
=>
loop命令非常快速地读某个存储范围。因为这个命令力图最快速地读取存储单元,所以被用作一种特殊的存储器测试。
这个命令永远不会结束。除了重启开发板,没有其它办法可以停止它!
=> loop 100000 8
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/60243/showart_471146.html |
|