u-boot Command

U-boot 发展到现在,他的命令行模式已经非常接近Linux 下的shell 了,命令行模式模式下支持“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 <imageAddr> - display image info
bmp display <imageAddr> [x y] - display image at x,y
[u-boot@MINI2440]# ? bmp
bmp - manipulate BMP image data
Usage:
bmp info <imageAddr> - display image info
bmp display <imageAddr> [x y] - display image at x,y
[u-boot@MINI2440]# h bm
bmp - manipulate BMP image data
Usage:
bmp info <imageAddr> - display image info
bmp display <imageAddr> [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 自动启动时执行命令
serverip TFTP 服务器端的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/&#65533;&#65533;~L&#65533;~]&#65533;
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, <CR> to resend last packet,
E to send Error packet, ^C to quit immediately, ^L to refresh screen.
传送完毕后,输入c ,回到U-boot 的串口界面。
[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
(/home/tekkaman/桌面/) C-Kermit>c
Connecting to /dev/ttyUSB0, speed 115200
Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------
## Total Size = 0x0022c0a4 = 2277540 Bytes
## Start Addr = 0x30008000
(4)网络命令
只要你的网卡驱动没问题,那么你就可以通过网络来传输文件到开发板,这可比串口快多了。你
可以直接用交叉网线连接开发板和电脑,也可以用普通直连网线连接路由器,再连到电脑,不过记得
配置好网络,关闭防火墙哦。
先测试网络是否通了,现在开发板使用ping 命令,看看是否可以ping 通电脑:
[u-boot@MINI2440]# ping 192.168.1.100
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
host 192.168.1.100 is alive
如果出现:
[u-boot@MINI2440]# ping 192.168.1.100
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
ping failed; host 192.168.1.100 is not alive
这样无法 ping 通的事,可能是:
1、U-boot 网卡驱动有问题
2、U-boot 网络协议延时配置有问题
3、网络参数配置问题,比如IP 等,Host 和Target 都有可能有问题。Host 最好关闭IPv6。
实在找不到原因,用Wireshark 抓包看看。
如果网络畅通,下面就可以使用下面的命令从tftp 目录或者nfs 目录下载文件到SDRAM 了。
命令:
dhcp - boot image via network using DHCP/TFTP protocol
rarpboot- boot image via network using RARP/TFTP protocol
nfs - boot image via network using NFS protocol
tftpboot- boot image via network using TFTP protocol
bootp - boot image via network using BOOTP/TFTP protocol
这几个命令的格式都是:<指令> [目的SDRAM 地址] [[主机IP:]文件名]
注意:
要使用 dhcp、rarpboot 或 bootp 等功能要路由器或Host 的支持。
如果没有输入[目的SDRAM 地址],系统就是用编译时定义的CONFIG_SYS_LOAD_ADDR 作为目
的SDRAM 地址
如果 tftpboot 和nfs 命令没有定义[主机IP:],则使用ENV 中的serverip
其它命令必需定义[主机IP:],否则会使用提供动态IP 服务的主机IP 作为[主机IP:]。
使用范例:
[u-boot@MINI2440]# nfs 0x30008000192.168.1.100:/home/tekkaman/development/share/u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101
Filename '/home/tekkaman/development/share/u-boot.bin'.
Load address: 0x30008000
Loading: ###################################################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# tftp u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: T ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# dhcp 192.168.1.100:u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.1.101
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# bootp 192.168.1.100:u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.1.101
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# rarpboot 192.168.1.100:u-boot.bin
我的路由器没有开rarp 协议,所以rarpboot 无法使用,要使用dhcp 或 bootp 也是要路由或Host
支持的。
(5)Nand Flash 操作指令
常用的 Nand Flash 指令如下:
指令功能
nand info 显示可使用的Nand Flash
nand device [dev] 显示或设定当前使用的Nand Flash
nand read
addr off
size
Nand Flash 读取命令,从Nand 的 off 偏移
地址处读取size 字节的数据到SDRAM
的 addr 地址。
nand write
addr off
size
Nand Flash 烧写命令,将SDRAM 的 addr
地址处的size 字节的数据烧写到Nand
的 off 偏移地址。
nand write[.yaffs[1]]
addr off size
烧写 yaffs 映像专用的命令,.yaffs1 for
512+16 NAND
nand erase [clean] [off size]
Nand Flash 檫除命令,擦除Nand Flash
的 off 偏移地址处的size 字节的数据
nand bad 显示 Nand Flash 的坏块
nand dump[.oob] off 显示 Nand Flash 中的数据(16 进制)
nand scrub
彻底擦除整块Nand Flash 中的数据,包括
OOB。可以擦除软件坏块标志。
nand markbad off 标示 Nand 的 off 偏移地址处的块为坏块
使用范例:
[u-boot@MINI2440]# nand info
Device 0: NAND 128MiB 3,3V 8-bit, sector size 128 KiB
[u-boot@MINI2440]# nand device 0
Device 0: NAND 128MiB 3,3V 8-bit... is now current device
[u-boot@MINI2440]# nand read 0x30008000 0x60000 200000
NAND read: device 0 offset 0x60000, size 0x200000
2097152 bytes read: OK
[u-boot@MINI2440]# nand bad
Device 0 bad blocks:
030a0000
030c0000
030e0000
07ee0000
[u-boot@MINI2440]# nand markbad 0x500000
block 0x00500000 successfully marked as bad
[u-boot@MINI2440]# nand bad
Device 0 bad blocks:
00500000
030a0000
030c0000
030e0000
07ee0000
[u-boot@MINI2440]# nand scrub
NAND scrub: device 0 whole chip
Warning: scrub option will erase all factory set bad
There is no reliable way to recover them.
Use this command only for testing purposes if you
are sure of what you are
Really scrub this NAND flash? <y/N>
Erasing at 0x2f4000008000000 -- 0% complete.
NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5
NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5
NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5
Erasing at 0x7ea000008000000 -- 0% complete.
NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5
Erasing at 0x7fe000008000000 -- 0% complete.
OK
[u-boot@MINI2440]# nand bad
Device 0 bad blocks:
030a0000
030c0000
030e0000
07ee0000
[u-boot@MINI2440]# nand dump 0x8000
Page 00008000 dump:
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
(略)
OOB:
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
[u-boot@MINI2440]# tftp u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: T ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# nand write 0x30008000 0 40000
NAND write: device 0 offset 0x0, size 0x40000
Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK
[u-boot@MINI2440]# nand dump 0x8000
Page 00008000 dump:
00 00 53 e1 01 00 00 2a 15 40 e0 e3 19 00 00 ea
(略)
60 30 97 e5 03 00 54 e1 f6 ff ff ba 00 40 a0 e3
OOB:
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
65 a9 6b f3 ff 33 fc 30
f3 33 cf 33 0f f0 ff 00
cc 0f 59 55 57 96 a5 5b
nboot 指令也是一条Nand Flash 读取指令,它是将Nand Flash 的 offset 偏移地址的内核映像
读取到SDRAM 的loadAddr 位置。它会自动读取到内核映像(使用mkimage 处理过的)的结束,所
以不用给出读取大小。
格式:nboot loadAddr dev offset
使用范例:
[u-boot@MINI2440]# tftp 192.168.1.100:zImage.img
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'zImage.img'.
Load address: 0x30008000
Loading: T #################################################################
#################################################################
##########################
done
Bytes transferred = 2277540 (22c0a4 hex)
[u-boot@MINI2440]# nand erase 0x100000 300000
NAND erase: device 0 offset 0x100000, size 0x300000
Erasing at 0x3e000001800000 -- 0% complete.
OK
[u-boot@MINI2440]# nand write 0x30008000 0x100000 300000
NAND write: device 0 offset 0x100000, size 0x300000
Writing at 0x3e000000020000 -- 100% is complete. 3145728 bytes written: OK
[u-boot@MINI2440]# nand device 0
Device 0: NAND 128MiB 3,3V 8-bit... is now current device
[u-boot@MINI2440]# nboot 30008000 0 0x100000
Loading from NAND 128MiB 3,3V 8-bit, offset 0x100000
Image Name: tekkaman
Created: 2010-03-29 12:59:51 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2277476 Bytes = 2.2 MB
Load Address: 30008000
Entry Point: 30008040
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...
Image Name: tekkaman
Created: 2010-03-29 12:59:51 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2277476 Bytes = 2.2 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2(crosstool-NG-1.6.1-tekkaman) ) #5 Mon
Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)
四、U-boot 的使用(三)
(6) 内存/寄存器操作指令
nm 修改内存值 (指定地址)
格式: nm [.b, .w, .l] address
mm 修改内存值(地址自动加一)
格式: mm [.b, .w, .l] address
md 显示内存值
格式: md [.b, .w, .l] address [# of objects]
mw 用指定的数据填充内存
格式: mw [.b, .w, .l] address value [count]
cp 内存的拷贝(包括内存与Nor Flash 间的数据拷贝)
格式:cp [.b, .w, .l] source target count
上面是查看和修改内存值的指令,可以查看和修改SDRAM 和寄存器值。
[.b, .w, .l]代表了查看和修改形式:bit、word、long
使用范例:
[u-boot@MINI2440]# md.b 0x30008000 20
30008000: cc 33 fe 33 cc b3 4c 33 ac 33 de 33 5c 13 cc 33 .3.3..L3.3.3\..3
30008010: cc 32 cc 31 dc 33 cf 33 cc 33 4e 33 8f 13 cc 33 .2.1.3.3.3N3...3
[u-boot@MINI2440]# md.w 0x30008000 20
30008000: 33cc 33fe b3cc 334c 33ac 33de 135c 33cc .3.3..L3.3.3\..3
30008010: 32cc 31cc 33dc 33cf 33cc 334e 138f 33cc .2.1.3.3.3N3...3
30008020: 338c 33cd 33cc 7bcc 3bcc 33cc 135e 734c .3.3.3.{.;.3^.Ls
30008030: 7bdc 37cc 31dc 33c4 038c 33e8 77cc 13cc .{.7.1.3...3.w..
[u-boot@MINI2440]# md.l 0x30008000 20
30008000: 33fe33cc 334cb3cc 33de33ac 33cc135c .3.3..L3.3.3\..3
30008010: 31cc32cc 33cf33dc 334e33cc 33cc138f .2.1.3.3.3N3...3
30008020: 33cd338c 7bcc33cc 33cc3bcc 734c135e .3.3.3.{.;.3^.Ls
30008030: 37cc7bdc 33c431dc 33e8038c 13cc77cc .{.7.1.3...3.w..
30008040: 234c77ce 33dc339c 33ec3ece f3cc36ec .wL#.3.3.>.3.6..
30008050: 37dc33cc 73cc3f5c 17dd314c 33cc62e8 .3.7\?.sL1...b.3
30008060: b6cc33dc 33c233cc 33cc32cc 33cc3f68 .3...3.3.2.3h?.3
30008070: 73cc31cc b3cc33cc 33cc37c9 33df13cc .1.s.3...7.3...3
[u-boot@MINI2440]# nm 0x30008000
30008000: 33fe33cc ? 12345678
30008000: 12345678 ? 34567890
30008000: 34567890 ? q
[u-boot@MINI2440]# nm.b 0x30008000
30008000: 90 ? 11
30008000: 11 ? 12
30008000: 12 ? q
[u-boot@MINI2440]# mm 0x30008000
30008000: 34567812 ? 54321123
30008004: 334cb3cc ? 12345678
30008008: 33de33ac ? 21234543
3000800c: 33cc135c ? q
[u-boot@MINI2440]# md.b 0x30008000 20
30008000: 23 11 32 54 78 56 34 12 43 45 23 21 5c 13 cc 33 #.2TxV4.CE#!\..3
30008010: cc 32 cc 31 dc 33 cf 33 cc 33 4e 33 8f 13 cc 33 .2.1.3.3.3N3...3
[u-boot@MINI2440]# mw.b 0x30008000 aa 10
[u-boot@MINI2440]# mw.b 0x30008010 55 10
[u-boot@MINI2440]# md.b 0x30008000 20
30008000: aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................
30008010: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 UUUUUUUUUUUUUUUU
[u-boot@MINI2440]# cp.b 0x30008000 0x30008010 10
[u-boot@MINI2440]# md.b 0x30008000 20
30008000: aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................
30008010: aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................
你可以试着修改LED 相连的GPIO 寄存器的数据寄存器值,可以控制LED 的点亮!
先熄灭后点亮LED1 的范例:(这个实验要结合芯片数据手册和mini2440 的原理图来
理解)
[u-boot@MINI2440]# md 0x56000014 1
56000014: 00000600 ....
[u-boot@MINI2440]# nm.w 0x56000014
56000014: 0600 ? 620 (熄灭)
56000014: 0620 ? 600 (点亮)
(7) Nor Flash 指令
Nor Flash 的命令经常用于烧写数据到Nor Flash 。
flinfo 打印Flash 存储器的信息,并列出所有Sector。
flinfo N 单独打Flash 存储器N Block 的信息。(在有多块Nor Flash 时使用)
使用范例:
[u-boot@MINI2440]# flinfo
Bank # 1: SST: 1x SST39VF1601 (2MB)
Size: 2 MB in 32 Sectors
Sector Start Addresses:
00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
000A0000 000B0000 000C0000 000D0000 000E0000
000F0000 00100000 00110000 00120000 00130000
00140000 00150000 00160000 00170000 00180000
00190000 001A0000 001B0000 001C0000 001D0000
001E0000 001F0000
[u-boot@MINI2440]# flinfo 1
Bank # 1: SST: 1x SST39VF1601 (2MB)
Size: 2 MB in 32 Sectors
Sector Start Addresses:
00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
000A0000 000B0000 000C0000 000D0000 000E0000
000F0000 00100000 00110000 00120000 00130000
00140000 00150000 00160000 00170000 00180000
00190000 001A0000 001B0000 001C0000 001D0000
001E0000 001F0000
[u-boot@MINI2440]# flinfo 2
Only FLASH Banks # 1 ... # 1 supported
后面带有(RO)的说明这个Sector 已经写保护了。
因为Nor Flash 的读取接口和SDRAM 是一样的,所以Nor Flash 的读取也是使用md 命令。范例如
下:
[u-boot@MINI2440]# md.b 0x0 20
00000000: 12 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
00000010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
[u-boot@MINI2440]# md 0x0 20
00000000: ea000012 e59ff014 e59ff014 e59ff014 ................
00000010: e59ff014 e59ff014 e59ff014 e59ff014 ................
00000020: 33f80260 33f802c0 33f80320 33f80380 `..3...3 ..3...3
00000030: 33f803e0 33f80440 33f804a0 deadbeef ...3@..3...3....
00000040: 33f80000 33f80000 33fbe8dc 3400374c ...3...3...3L7.4
00000050: e10f0000 e3c0001f e38000d3 e129f000 ..............).
00000060: e3a00453 e3a01000 e5801000 e3e01000 S...............
00000070: e59f0488 e5801000 e59f1484 e59f0484 ................
但由于Nor Flash 的烧写时序和SDRAM 的写入不同,烧写Nor Flash 不能使用mm 等命令,只
能使用cp 命令从内存拷贝到Nor Flash,而且烧写之前必须解除保护并擦除!命令如下:
protect :对Flash 写保护的操作,可以使能和解除写保护。
格式:
protect on/off start end
protect on/off start +end
protect on/off N:SF[-SL]
protect on/off bank N
protect on/off all
第 1 个参数on 代表使能写保护;off 代表解除写保护。
第 2 、3 参数是指定Flash 写保护操作范围
start end 是照起始地址和结束地址定义范围,start 是擦除块的起始地址;end 是擦除末尾块的结
束地址。
例如:擦除 Sector 2 和Sector 3 区域命令为erase 20000 3ffff 。
start +end 是照起始地址和操作字节数定义范围,这种方式最常用。start 是擦除块的起始地址;end
是擦除的字节数。
例如:擦除 Sector 2 和Sector 3 区域命令为erase 20000 +20000
N:SF[-SL]是按照组和扇区,N 表示Flash 的Block 号,SF 表示擦除起始Sector 号,SL 表示擦
除结束Sector 号。
例如:擦除 Block1 的Sector 2 和Sector 3 区域命令为erase 1:2-3。
bank N 是擦除整个Block,擦除Block 号为N 的整个Flash。
all 是擦除全部Flash。
注意:Nor Flash 擦除的最小单位是Sector,也就是0x10000 字节,如果你定义的大小不满1 Sector
或超过Sector 的边界,那么被定义到的Sector 会被全部擦除。
erase :擦除Flash 的命令
格式:
erase start end
erase start +end
erase N:SF[-SL]
erase bank N
erase all
参数是指定Flash 擦除操作范围,跟写保护的方式相同。
以下的范例将mini2440 的Nor Flash 的Sector 16 写保护,再解除保护,擦除数据,最后将起始的
20 字节拷贝到Sector 16。
[u-boot@MINI2440]# flinfo 1
Bank # 1: SST: 1x SST39VF1601 (2MB)
Size: 2 MB in 32 Sectors
Sector Start Addresses:
00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
000A0000 000B0000 000C0000 000D0000 000E0000
000F0000 00100000 00110000 00120000 00130000
00140000 00150000 00160000 00170000 00180000
00190000 001A0000 001B0000 001C0000 001D0000
001E0000 001F0000
[u-boot@MINI2440]# protect on 1:16-16
Protect Flash Sectors 16-16 in Bank # 1
[u-boot@MINI2440]# flinfo 1
Bank # 1: SST: 1x SST39VF1601 (2MB)
Size: 2 MB in 32 Sectors
Sector Start Addresses:
00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
000A0000 000B0000 000C0000 000D0000 000E0000
000F0000 00100000 (RO) 00110000 00120000 00130000
00140000 00150000 00160000 00170000 00180000
00190000 001A0000 001B0000 001C0000 001D0000
001E0000 001F0000
[u-boot@MINI2440]# protect off 0x100000 0x10ffff
Un-Protect Flash Sectors 16-16 in Bank # 1
[u-boot@MINI2440]# flinfo 1
Bank # 1: SST: 1x SST39VF1601 (2MB)
Size: 2 MB in 32 Sectors
Sector Start Addresses:
00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
000A0000 000B0000 000C0000 000D0000 000E0000
000F0000 00100000 00110000 00120000 00130000
00140000 00150000 00160000 00170000 00180000
00190000 001A0000 001B0000 001C0000 001D0000
001E0000 001F0000
[u-boot@MINI2440]# erase 0x100000 +20
Erasing sector 16 ... ok.
Erased 1 sectors
[u-boot@MINI2440]# cp.b 0x0 0x100000 0x20
Copy to Flash... done
[u-boot@MINI2440]# md.b 100000 20
00100000: 12 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
00100010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
(8) USB 操作指令
指令功能
usb reset 初始化 USB 控制器
usb stop [f] 关闭 USB 控制器
usb tree 已连接的 USB 设备树
usb info [dev] 显示 USB 设备[dev]的信息
usb storage 显示已连接的USB 存储设备
usb dev [dev] 显示和设置当前USB 存储设备
usb part [dev] 显示 USB 存储设备[dev]的分区信息
usb read addr blk# cnt 读取 USB 存储设备数据
在所有的命令使用前,必须先插入USB 设备,然后使用:usb reset,以初始化USB 控制器,
获取设备信息。
我将一个 4G 的kingstonU 盘(可引导盘)插入 mini2440,然后读取他的头512 字节(MBR):
[u-boot@MINI2440]# usb reset
(Re)start USB...
USB: scanning bus for devices... 2 USB Device(s) found
scanning bus for storage devices... 1 Storage Device(s) found
[u-boot@MINI2440]# usb tree
Device Tree:
1 Hub (12 Mb/s, 0mA)
| OHCI Root Hub
|
+-2 Mass Storage (12 Mb/s, 100mA)
Kingston DT 101 II 0019E02CB6EB5B8B1B120051
[u-boot@MINI2440]# usb info
1: Hub, USB Revision 1.10
- OHCI Root Hub
- Class: Hub
- PacketSize: 8 Configurations: 1
- Vendor: 0x0000 Product 0x0000 Version 0.0
Configuration: 1
- Interfaces: 1 Self Powered 0mA
Interface: 0
- Alternate Setting 0, Endpoints: 1
- Class Hub
- Endpoint 1 In Interrupt MaxPacket 2 Interval 255ms
2: Mass Storage, USB Revision 2.0
- Kingston DT 101 II 0019E02CB6EB5B8B1B120051
- Class: (from Interface) Mass Storage
- PacketSize: 64 Configurations: 1
- Vendor: 0x0951 Product 0x1613 Version 1.0
Configuration: 1
- Interfaces: 1 Bus Powered 100mA
Interface: 0
- Alternate Setting 0, Endpoints: 2
- Class Mass Storage, Transp. SCSI, Bulk only
- Endpoint 1 In Bulk MaxPacket 64
- Endpoint 2 Out Bulk MaxPacket 64
[u-boot@MINI2440]# usb storage
Device 0: Vendor: Kingston Rev: PMAP Prod: DT 101 II
Type: Removable Hard Disk
Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)
[u-boot@MINI2440]# usb dev 0
USB device 0:
Device 0: Vendor: Kingston Rev: PMAP Prod: DT 101 II
Type: Removable Hard Disk
Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)
... is now current device
[u-boot@MINI2440]# usb part 0
print_part of 0
Partition Map for USB device 0 -- Partition Type: DOS
Partition Start Sector Num Sectors Type
4 63 7935937 c
[u-boot@MINI2440]# usb read 0x30008000 0 200
USB read: device 0 block # 0, count 512 ... .........................
512 blocks read: OK
[u-boot@MINI2440]# md.b 0x30008000 200
30008000: fa 31 c0 8e d8 8e c0 8e d0 bc 00 7c fb fc 89 e6
.1.........|....
30008010: bf 00 06 b9 00 01 f3 a5 ea dc 06 00 00 10 00 01
................
30008020: 00 00 7c 00 00 00 00 00 00 00 00 00 00 80 3f 00
..|...........?.
30008030: ff 00 ed 01 1e 0e 1f 3a 16 10 00 74 06 1f ea 36
.......:...t...6
30008040: e7 00 f0 3d fb 54 75 05 8c d8 fb eb 1d 80 fc 08
...=.Tu.........
30008050: 75 1b e8 81 00 8a 36 13 00 fe ce 8b 0e 15 00 86
u.....6.........
30008060: cd c0 e1 06 0a 0e 11 00 31 c0 f8 eb 65 80 fc 02
........1...e...
30008070: 72 cb 80 fc 04 77 c6 60 80 cc 40 50 be 00 00 c7
r....w.`..@P....
30008080: 04 10 00 30 e4 89 44 02 89 5c 04 8c 44 06 66 31
...0..D..\..D.f1
30008090: c0 66 89 44 0c 88 f0 f6 26 11 00 88 cf 88 eb c0
.f.D....&.......
300080a0: ef 06 81 e1 3f 00 01 c8 48 89 c7 a1 13 00 f7 26
....?...H......&
300080b0: 11 00 f7 e3 01 f8 81 d2 00 00 89 44 08 89 54 0a
...........D..T.
300080c0: 58 30 c0 8a 16 10 00 e8 0c 00 88 26 03 00 61 a1
X0.........&..a.
300080d0: 02 00 1f ca 02 00 9c ff 1e 22 00 c3 80 fa 8f 7f
........."......
300080e0: 04 88 16 2d 06 be 87 07 e8 8d 00 be be 07 31 c0
...-..........1.
300080f0: b9 04 00 f6 04 80 74 03 40 89 f5 81 c6 10 00 e2
......t.@.......
30008100: f2 48 74 02 cd 18 bf 05 00 be 1d 06 c7 44 02 01
.Ht..........D..
30008110: 00 66 8b 46 08 66 89 44 08 b8 00 42 8a 16 2d 06
.f.F.f.D...B..-.
30008120: cd 13 73 0d 4f 74 49 30 e4 8a 16 2d 06 cd 13 eb
..s.OtI0...-....
30008130: d8 a1 fe 7d 3d 55 aa 75 37 fa 66 a1 4c 00 66 a3
...}=U.u7.f.L.f.
30008140: 3f 06 be 13 04 8b 04 48 89 04 c1 e0 06 8e c0 31
?......H.......1
30008150: ff be 1d 06 b9 60 00 fc f3 a5 c7 06 4c 00 17 00
.....`......L...
30008160: a3 4e 00 fb 8a 16 2d 06 89 ee fa ea 00 7c 00 00
.N....-......|..
30008170: be aa 07 e8 02 00 eb fe ac 20 c0 74 09 b4 0e bb
......... .t....
30008180: 07 00 cd 10 eb f2 c3 53 74 61 72 74 20 62 6f 6f
.......Start boo
30008190: 74 69 6e 67 20 66 72 6f 6d 20 55 53 42 20 64 65
ting from USB de
300081a0: 76 69 63 65 2e 2e 2e 0d 0a 00 42 6f 6f 74 20 66
vice......Boot f
300081b0: 61 69 6c 65 64 00 00 00 ea eb d4 ca 00 00 00 00
ailed...........
300081c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
300081d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
300081e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01
................
300081f0: 01 00 0c fe 7f ec 3f 00 00 00 c1 17 79 00 55 aa
......?.....y.U.
(9) SD 卡(MMC)指令
SD 卡的使用命令比较简单,只有初始化和设备信息的显示,读写是通过文件系统命令实现的。
mmc init [dev] - 初始化MMC 子系统
mmc device [dev] - 查看和设置当前设备
使用和 USB 类似,在所有的命令使用前,必须先插入SD 卡,然后使用:mmc init,以初始化MMC
控制器,获取设备信息。
我在 mini2440 中插入1GB SD 卡:
[u-boot@MINI2440]# mmc init
mmc: Probing for SDHC ...
mmc: SD 2.0 or later card found
trying to detect SD Card...
Manufacturer: 0x00, OEM " roduct name: "
", revision 0.0
Serial number:
7864775
Manufacturing date: 11/2006
CRC:
0x4f, b0 = 1
READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095
size = 0
SD Card detected RCA: 0x2 type: SD
mmc1 is available
[u-boot@MINI2440]# mmc device
mmc1 is current device
(10) FAT 文件系统指令
fatinfo:显示文件系统的相关信息
格式:fatinfo <interface> <dev[:part]>
Interface:代表接口,如usb、mmc;
dev:代表设备编号,如0、1……;
part:代表存储设备中的分区,如1、2……。
fatload:从FAT32 文件系统中读取二进制文件到SDRAM。
格式:fatload <interface> <dev[:part]> <addr> <filename> [bytes]
Interface、dev 和part 同上;
addr:代表写入SDRAM 的地址;
filename:代表存储设备中的文件名;
bytes:代表从存储设备中读取的文件大小,可不填;如果填的数据比文件小,就只读
取bytes 字节,如果填的数据比文件大,也只读取文件的大小。
fatls:列出FAT32 文件系统中目录里的文件。
格式:fatls <interface> <dev[:part]> [directory]
Interface、dev 和part 同上;
directoryr:代表所要查看的目录,可不填,默认为/。
这些指令基本上要和U 盘或者SD 卡同时使用,主要用于读取这些移动存储器上的
FAT32 分区。
使用范例:
[u-boot@MINI2440]# usb part 0
print_part of 0
Partition Map for USB device 0 -- Partition Type: DOS
Partition Start Sector Num Sectors Type
4 63 7935937 c
[u-boot@MINI2440]# fatinfo usb 0:4
Interface: USB
Device 0: Vendor: Kingston Rev: PMAP Prod: DT 101 II
Type: Removable Hard Disk
Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)
Partition 4: Filesystem: FAT32 "7600_16385_"
[u-boot@MINI2440]# fatls usb 0:4
boot/
efi/
sources/
support/
upgrade/
43 autorun.inf
383562 bootmgr
111880 setup.exe
256220 u-boot.bin
4 file(s), 5 dir(s)
[u-boot@MINI2440]# fatls usb 0:4 /boot/
./
../
fonts/
zh-cn/
262144 bcd
3170304 boot.sdi
1024 bootfix.bin
97280 bootsect.exe
4096 etfsboot.com
485440 memtest.exe
6 file(s), 4 dir(s)
[u-boot@MINI2440]# fatload usb 0:4 0x30008000 u-boot.bin
reading u-boot.bin
........................
256220 bytes read
[u-boot@MINI2440]# fatload usb 0:4 0x30008000 u-boot.bin 200
reading u-boot.bin
512 bytes read
(11) 系统引导指令
boot 和bootd 都是运行ENV”bootcmd”中指定的指令。
bootm 指令是专门用于启动在SDRAM 中的用U-boot 的mkimage 工具处理过的内核
映像。
格式:bootm [addr [arg ...]]
addr 是内核映像所在的SDRAM 中的地址
当启动的是 Linux 内核时,'arg' 可以使 initrd 的地址。
[u-boot@MINI2440]# setenv bootcmd tftp\;bootm
[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 -- 0% complete.
Writing to Nand... done
[u-boot@MINI2440]# boot
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'zImage.img'.
Load address: 0x30008000
Loading: T #################################################################
#################################################################
##########################
done
Bytes transferred = 2277540 (22c0a4 hex)
## Booting kernel from Legacy Image at 30008000 ...
Image Name: tekkaman
Created: 2010-03-29 12:59:51 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2277476 Bytes = 2.2 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2(crosstool-NG-1.6.1-tekkaman) ) #5 Mon
Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)
U-Boot 2009.11 ( 4 月 04 2010 - 12:09:25)
modified by tekkamanninja (tekkamanninja@163.com)
Love Linux
I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 128 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
Net: dm9000
U-Boot 2009.11 ( 4 月 04 2010 - 12:09:25)
modified by tekkamanninja
(tekkamanninja@163.com)
Love Linux
Hit any key to stop autoboot: 0
[u-boot@MINI2440]# bootd
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'zImage.img'.
Load address: 0x30008000
Loading: T #################################################################
#################################################################
##########################
done
Bytes transferred = 2277540 (22c0a4 hex)
## Booting kernel from Legacy Image at 30008000 ...
Image Name: tekkaman
Created: 2010-03-29 12:59:51 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2277476 Bytes = 2.2 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
(略)
12)EEPROM 读写指令eeprom - I2C 接口的EEPROM 读写指令
格式:
eeprom read addr off cnt
eeprom write addr off cnt
第一个参数addr 是要写入或读出的数据在SDRAM 中的存放地址;
第二个参数 off 是在EEPROM 中的偏移;
第三个参数 cnt 是读写的数据字节数。
使用范例:
[u-boot@MINI2440]# md.b 0x30008000 2
30008000: aa aa ..
[u-boot@MINI2440]# eeprom read 0x30008000 10 2
EEPROM @0x50 read: addr 30008000 off 0010 count 2 ... done
[u-boot@MINI2440]# md.b 0x30008000 2
30008000: ff ff ..
[u-boot@MINI2440]# mm.b 0x30008000
30008000: ff ? aa
30008001: ff ? 55
30008002: aa ? q
[u-boot@MINI2440]# md.b 0x30008000 2
30008000: aa 55 .U
[u-boot@MINI2440]# eeprom write 0x30008000 10 2
EEPROM @0x50 write: addr 30008000 off 0010 count 2 ... done
[u-boot@MINI2440]# eeprom read 0x30008010 10 2
EEPROM @0x50 read: addr 30008010 off 0010 count 2 ... done
[u-boot@MINI2440]# md.b 0x30008010 2
30008010: aa 55 .U
(13)设置和读取RTC 指令
date - 设置和读取RTC
格式:
date [MMDDhhmm[[CC]YY][.ss]]
MM:月份
DD:日期
hh:小时
mm 分钟
CC:年份的前两个数字
YY:年份的后两个数字
ss:秒数
使用范例:
[u-boot@MINI2440]# date
Date: 1980-00-06 (Thursday) Time: 20:30:25
[u-boot@MINI2440]# date 041100582010.20
Date: 2010-04-11 (Sunday) Time: 0:58:20
(14)脚本运行指令
run var [...]
var :ENV 中的脚本名
使用范例:
[u-boot@MINI2440]# setenv a_run_test echo $bootfile \; version
[u-boot@MINI2440]# run a_run_test
zImage.img
U-Boot 2009.11 ( 4&aelig;&#339;&#710; 04 2010 - 12:09:25)
(15)系统重启指令
reset
- 重启CPU
[u-boot@MINI2440]# reset
resetting ...
U-Boot 2009.11 ( 4&aelig;&#339;&#710; 04 2010 - 12:09:25)
modified by tekkamanninja (tekkamanninja@163.com)
Love Linux
I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 128 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
Net: dm9000
U-Boot 2009.11 ( 4&aelig;&#339;&#710; 04 2010 - 12:09:25)
modified by tekkamanninja
(tekkamanninja@163.com)
Love Linux
Hit any key to stop autoboot: 0
[u-boot@MINI2440]#
四、U-boot 的使用(四)
下载与烧写
使用 U-boot 将映像文件烧写到板上的Flash,一般步骤是:
(1)通过网络、串口、U 盘、SD 卡等方式将文件传输到SDRAM;
(2)使用Nand Flash 或Nor Flash 相关的读写命令将SDRAM 中的数据烧入Flash。
下面是烧写范例:
如果使用 SD 卡和U 盘形式更新U-boot,那么首先SD 卡和U 盘中必须有FAT32 文件系统,并在
里面存放了u-boot.bin 文件。
1) 通过SD 卡烧入Nand Flash:
[u-boot@MINI2440]# mmc init
mmc: Probing for SDHC ...
mmc: SD 2.0 or later card found
trying to detect SD Card...
Manufacturer:
0x00, OEM " roduct name:
"
", revision 0.0
Serial number:
7864775
Manufacturing date: 11/2006
CRC:
0x4f, b0 = 1
READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095
size = 0
SD Card detected RCA: 0x2 type: SD
mmc1 is available
[u-boot@MINI2440]# fatload mmc 1 0x30008000 u-boot.bin
reading u-boot.bin
256220 bytes read
[u-boot@MINI2440]# nand erase 0 0x40000
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x2000000000004 --
0% complete.
OK
[u-boot@MINI2440]# nand write 0x30008000 0 0x40000
NAND write: device 0 offset 0x0, size 0x40000
Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK
2) 通过U 盘烧入Nor Flash:
[u-boot@MINI2440]# usb start
(Re)start USB...
USB:
scanning bus for devices... 2 USB Device(s) found
scanning bus for storage devices... 1 Storage Device(s) found
[u-boot@MINI2440]# usb storage
Device 0: Vendor: Kingston Rev: PMAP Prod: DT 101 II
Type: Removable Hard Disk
Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)
[u-boot@MINI2440]# usb part 0
print_part of 0
Partition Map for USB device 0
--
Partition Type: DOS
Partition
Start Sector
Num Sectors
Type
4
63
7935937
c
[u-boot@MINI2440]# fatload usb 0:4 0x30008000 u-boot.bin
reading u-boot.bin
........................
256220 bytes read
[u-boot@MINI2440]# protect off all
Un-Protect Flash Bank # 1
[u-boot@MINI2440]# erase 0x0 0x3ffff
Erasing sector
0 ... ok.
Erasing sector
1 ... ok.
Erasing sector
2 ... ok.
Erasing sector
3 ... ok.
Erased 4 sectors
[u-boot@MINI2440]# cp.b 0x30008000 0x0
0x3ffff
Copy to Flash... done
3) 通过TFTP 服务烧入Nand Flash:
[u-boot@MINI2440]# tftpboot 30008000 192.168.1.100:u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: T ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# nand erase 0 0x40000
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x2000000000004 --
0% complete.
OK
[u-boot@MINI2440]# nand write 0x30008000 0 0x40000
NAND write: device 0 offset 0x0, size 0x40000
Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK
4) 通过NFS 服务烧入Nand Flash:
[u-boot@MINI2440]# nfs 30008000
192.168.1.100:/home/tekkaman/development/share/u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101
Filename '/home/tekkaman/development/share/u-boot.bin'.
Load address: 0x30008000
Loading: ###################################################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# nand erase 0 0x40000
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x2000000000004 --
0% complete.
OK
[u-boot@MINI2440]# nand write 0x30008000 0 0x40000
NAND write: device 0 offset 0x0, size 0x40000
Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK
内核引导
内核的引导步骤如下:
(1)用U-boot 的mkimage 工具处理内核映像zImage。
(2)通过网络、串口、U 盘、SD 卡等方式将处理过的内核映像传输到SDRAM 的一定位置(一般
使用0x30008000)
(3)然后使用”bootm"等内核引导命令来启动内核。
为什么要用U-boot 的mkimage 工具处理内核映像zImage?
因为在用 bootm 命令引导内核的时候,bootm 需要读取一个64 字节的文件头,来获取
这个内核映象所针对的CPU 体系结构、OS、加载到内存中的位置、在内存中入口点的
位置以及映象名等等信息。这样bootm 才能为OS 设置好启动环境,并跳入内核映象的
入口点。而mkimage 就是添加这个文件头的专用工具。具体的实现请看U-boot 中bootm
的源码和mkimage 的源码。
mkimage 工具的使用:
参数说明:
-A 指定 CPU 的体系结构,可用值有:alpha、arm
、x86、ia64、mips、mips64、ppc 、s390、sh、sparc 、sparc64、m68k 等
-O 指定操作系统类型,可用值有:openbsd、netbsd、freebsd、4_4bsd、linux、svr4、
esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、
artos
-T 指定映象类型,可用值有:standalone、kernel、ramdisk、multi、firmware、script、
filesystem
-C 指定映象压缩方式,可用值有:
none
不压缩(一般使用这个,因为zImage 是已经被bzip2 压缩过的自解压内核)
gzip 用gzip 的压缩方式
bzip2 用bzip2 的压缩方式
-a 指定映象在内存中的加载地址,映象下载到内存中时,要按照用mkimage 制作映象
时,这个参数所指定的地址值来下载
-e
指定映象运行的入口点地址,这个地址就是-a 参数指定的值加上0x40(因为前面有个
mkimage 添加的0x40 个字节的头)
-n
指定映象名
-d 指定制作映象的源文件
以下是制作内核映像的命令示例:
mkimage -n 'tekkaman' -A arm -O linux -T kernel -C none -a 0x30008000 -e
0x30008040 -d zImage zImage.img
以下是使用范例:
1) 通过SD 卡引导内核:
首先 SD 卡中必须有FAT32 文件系统,并在里面存放了处理过的内核映像文件。
[u-boot@MINI2440]# mmc init
mmc: Probing for SDHC ...
mmc: SD 2.0 or later card found
trying to detect SD Card...
Manufacturer:
0x00, OEM " roduct name:
"
", revision 0.0
Serial number:
7864775
Manufacturing date: 11/2006
CRC:
0x4f, b0 = 1
READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095
size = 0
SD Card detected RCA: 0x2 type: SD
mmc1 is available
[u-boot@MINI2440]# fatload mmc 1 30008000 zImage.img
reading zImage.img
2277540 bytes read
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...
Image Name:
tekkaman
Created:
2010-03-29
12:59:51 UTC
Image Type:
ARM Linux Kernel Image (uncompressed)
Data Size:
2277476 Bytes =
2.2 MB
Load Address: 30008000
Entry Point:
30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2
(crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)
2) 通过TFTP 服务引导内核:
[u-boot@MINI2440]# tftpboot 0x30008000 192.168.1.100:zImage.img
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'zImage.img'.
Load address: 0x30008000
Loading: T #################################################################
#################################################################
##########################
done
Bytes transferred = 2277540 (22c0a4 hex)
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...
Image Name:
tekkaman
Created:
2010-03-29
12:59:51 UTC
Image Type:
ARM Linux Kernel Image (uncompressed)
Data Size:
2277476 Bytes =
2.2 MB
Load Address: 30008000
Entry Point:
30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) )
#5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)
3) 通过NFS 服务引导内核:
[u-boot@MINI2440]# nfs 30008000
192.168.1.100:/home/tekkaman/development/share/zImage.img
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101
Filename '/home/tekkaman/development/share/zImage.img'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#######################################################
done
Bytes transferred = 2277540 (22c0a4 hex)
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...
Image Name:
tekkaman
Created:
2010-03-29
12:59:51 UTC
Image Type:
ARM Linux Kernel Image (uncompressed)
Data Size:
2277476 Bytes =
2.2 MB
Load Address: 30008000
Entry Point:
30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2
(crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)
4) 通过Nand Flash 引导内核:
首先要将处理过的内核映像文件烧入Nand Flash 的一定位置(由内核分区表决定)。
以后每次启动时用Nand Flash 的读取命令先将这个内核映像文件读到内存的一定位置
(由制作内核映像时的-a 参数决定),再使用bootm 命令引导内核。
内核映像文件的烧入:
[u-boot@MINI2440]# nfs 30008000
192.168.1.100:/home/tekkaman/development/share/zImage.img
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101
Filename '/home/tekkaman/development/share/zImage.img'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#######################################################
done
Bytes transferred = 2277540 (22c0a4 hex)
[u-boot@MINI2440]# nand erase 0x80000 0x300000
NAND erase: device 0 offset 0x80000, size 0x300000
Erasing at 0x36000001800000 --
0% complete.
OK
[u-boot@MINI2440]#
nand write 30008000 0x80000 300000
NAND write: device 0 offset 0x80000, size 0x300000
Writing at 0x36000000020000 -- 100% is complete. 3145728 bytes written: OK
内核引导:
[u-boot@MINI2440]#
nand read 30008000 0x80000 300000
NAND read: device 0 offset 0x80000, size 0x300000
3145728 bytes read: OK
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...
Image Name:
tekkaman
Created:
2010-03-29
12:59:51 UTC
Image Type:
ARM Linux Kernel Image (uncompressed)
Data Size:
2277476 Bytes =
2.2 MB
Load Address: 30008000
Entry Point:
30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2
(crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值