Chinaunix首页 | 论坛 | 博客
  • 博客访问: 317373
  • 博文数量: 51
  • 博客积分: 1975
  • 博客等级: 上尉
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-17 19:07
文章分类

全部博文(51)

文章存档

2011年(8)

2010年(43)

分类: LINUX

2010-03-25 17:14:38

u-boot命令介绍及烧写程序实例
 
 

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 设置新的变量

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 保存变量

命令将当前定义的所有的变量及其值存入flash中。用来存储变量及其值的空间只有8k字节,应不要超过。

Loadb 通过串口Kermit协议下载二进制数据。

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

Uboot> setenv ipaddr 192.168.0.1
Uboot> setenv serverip 192.168.1.115     (tftp服务器的地址)
下载bin文件到地址0x30008000处。
Uboot> tftp 30008000 u-boot.bin (u-boot.bin应位于tftp服务程序的目录)

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

md 显示内存区的内容。

mm 修改内存,地址自动递增。

nm 修改内存,地址不自动递增。

mw 用模型填充内存

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

cp 拷贝一块内存到另一块

cmp 比较两块内存区

这些内存操作命令后都可加一个后缀表示操作数据的大小,比如cp.b表示按字节拷贝。

protect 写保护操作

protect on 1:0-3(就是对第一块FLASH的0-3扇区进行保护)
protect off 1:0-3取消写保护

erase 擦除扇区。

erase: 删除FLASH的扇区
erase 1:0-2(就是对每一块FLASH的0-2扇区进行删除)

对DataFlash的操作

U-Boot在引导时如果发现NPCS0和NPCS3上连有DataFlash,就会分配虚拟的地址给它,具体为 :
0xC0000000---NPCS0
0xD0000000---NPCS3

run 执行设置好的脚本

Uboot> setenv flashit tftp 20000000 mycode.bin\; erase 10020000 1002FFFF\;
cp.b 20000000 10020000 8000
Uboot> saveenv
Uboot> run flashit

bootcmd 保留的环境变量,也是一种脚本

如果定义了该变量,在autoboot模式下,将会执行该脚本的内容。

go 执行内存中的二进制,一个简单的跳转到指定地址

bootm 执行内存中的二进制代码

要求二进制代码为制定格式的。通常为mkimage处理过的二进制文件。如uImage
起动UBOOT TOOLS制作的压缩内核, bootm 3200000

bootp 通过网络启动,需要提前设置好硬件地址。
? 得到所有命令列表

help  help usb, 列出USB功能的使用说明

ping  注:只能开发板PING别的机器

usb

usb start:  起动usb 功能
usb info:  列出设备
usb scan:  扫描usb storage(u 盘)设备

kgo  起动没有压缩的linux内核

kgo 32000000

fatls 列出DOS FAT文件系统

fatls usb 0列出第一块U盘中的文件

fatload 读入FAT中的一个文件

fatload usb 0:0 32000000 u-boot.bin 把USB中的u-boot.bin 读到物理内存0x32000000处!

flinfo 列出flash的信息

nfs

nfs 32000000 192.168.0.115:u-boot.bin
把192.168.0.115(LINUX 的NFS文件系统)中的NFS文件系统中的u-boot.bin读入内存0x32000000处。

例:通过串口更新u-boot程序

[]# loadb
## Ready for binary (kermit) download to 0x33000000 at 115200 bps...
 
loadb这个指令以kermit协议从串口下载二进制文件到开发板的内存中,默认下载到0x33000000。当然你可以改在别的地址,例如:loadb 30000000

就是下载到0x30000000。这时候选择超级终端菜单上:传送〉发送文件,文件名选择编译好的U-Boot.bin,协议选择Kermit,点发送。可以看到发

送进度。
发送结束出现提示:
## Total Size      = 0x0001d73c = 120636 Bytes
## Start Addr      = 0x33000000
 
这时可以新的修改好不好使:
[]# go 33000000
## Starting application at 0x33000000 ...
go指令可以直接执行内存地址上的程序,
 
然后烧写在NOR Flash中的U-boot。先看看NOR Flash的情况:
[]# flinfo
Bank # 1: AMD: 1x Amd29LV800BB (8Mbit)
  Size: 1 MB in 19 Sectors
  Sector Start Addresses:
    00000000 (RO) 00004000 (RO) 00006000 (RO) 00008000 (RO) 00010000 (RO)
    00020000      00030000      00040000      00050000      00060000    
    00070000      00080000      00090000      000A0000      000B0000    
    000C0000      000D0000      000E0000      000F0000 (RO)
 
一共有19个sector,其中前5个总计128kb的sector有U-Boot程序。要烧写首先要去掉写保护:
[]# protect off 0 1ffff
[]# flinfo
Bank # 1: AMD: 1x Amd29LV800BB (8Mbit)
  Size: 1 MB in 19 Sectors
  Sector Start Addresses:
    00000000      00004000      00006000      00008000      00010000
    00020000      00030000      00040000      00050000      00060000
    00070000      00080000      00090000      000A0000      000B0000
    000C0000      000D0000      000E0000      000F0000 (RO)
可以看到写保护已经去掉,然后擦除:
[]# erase 0 1ffff
Erasing sector  0 ... ok.
Erasing sector  1 ... ok.
Erasing sector  2 ... ok.
Erasing sector  3 ... ok.
Erasing sector  4 ... ok.
Erased 5 sectors
 
烧写:(33000000下载地址 0 Nor起始地址 1d73c 文件长度)
[]# cp.b 33000000 0 1d73c
Copy to Flash... done

重启开发板,U-Boot的烧写就完成了。当然,一个更好的下载方法是利用tftp命令

阅读(1473) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~