U-boot简介以及常用命令

1 U-Boot简介
U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内 核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。 但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作 系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工 程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
选择U-Boot的理由:
① 开放源码;
② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS;
③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;
④ 较高的可靠性和稳定性;
④ 较高的可靠性和稳定性;
⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦ 较为丰富的开发调试文档与强大的网络技术支持;


2 U-Boot主要目录结构
- board 目标板相关文件,主要包含SDRAM、FLASH驱动;
- common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
- cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;
- driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)
- doc U-Boot的说明文档;
- examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;
- include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
- lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
- net 与网络功能相关的文件目录,如bootp,nfs,tftp;
- post 上电自检文件目录。尚有待于进一步完善;
- rtc RTC驱动程序;
- tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;


3 U-Boot支持的主要功能
U-Boot可支持的主要功能列表
系统引导 支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统
支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
基本辅助功能 强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤对Linux支持最为强劲;
支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好;
设备驱动 串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
上电自检功能 SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;
特殊功能 XIP内核引导;

 

 

U-Boot的常用命令详解

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

1、 bootm
bootm [addr [arg ...]]

    - boot application image stored in memory

          passing arguments 'arg ...'; when booting a Linux kernel,

          'arg' can be the address of an initrd image

bootm 命令可以引导启动存储在内存中的程序映像。这些内存包括 RAM 和可以永久保存的 Flash

1 个参数 addr 是程序映像的地址,这个程序映像必须 转换成 U-Boot 的 格式。

2 个参数对于引导 Linux 内核有用,通常作为 U-Boot 格式的 RAMDISK 映像存储地址;也可以是传递 给 Linux 内核 的参数(缺省情况下传递 bootargs 环境变量给内核)。


2、 bootp

bootp [loadAddress] [bootfilename]

bootp 命令通过 bootp 请求,要求 DHCP 服务器分配 IP 地址,然后通过 TFTP 协议下载指定的文件到内存。

1 个参数是下载文件存放的内存地址。

2 个参数是要下载的文件名称,这个文件应该在开发主机上准备好。

 

3、cmp

cmp [.b, .w, .l] addr1 addr2 count

     - compare memory

cmp 命令可以比较 2 块内存中的内容。 .b 以字节为单位; .w 以字为单位; .l 以长字为单位。注意: cmp.b 中间不能保留空格,需要连续敲入命令。

1 个参数 addr1 是第一块内存的起始地址。

2 个参数 addr2 是第二块内存的起始地址。

3 个参数 count 是要比较的数目,单位按照字节、字 或者长字。

 

4、cp

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

       - copy memory

cp 命令可以在内存中复制数据块,包括对 Flash 的读写操作。

1 个参数 source 是要复制的数据块起始地址。

2 个参数 target 是数据块要复制到的地址。这个地 址如果在 Flash 中, 那么会直接调用写 Flash 的函数操作。所以 U-Boot Flash 就使用这个命令,当然需要先把对应 Flash 区域擦干净。

3 个参数 count 是要复制的数目,根据 cp.b cp.w cp.l 分别以字节、字、长字为单位。

 

5、crc32

crc32 address count [addr]

     - compute CRC32 checksum [save at addr]  

crc32 命令可以计算存储数据的校验和。

1 个参数 address 是需要校验的数据起始地址。

2 个参数 count 是要校验的数据字节数。

3 个参数 addr 用来指定保存结果的地址。

 

6、echo

echo [args..]

      - echo args to console; c suppresses newline

echo 命令回显参数。


7、erase

erase start end

      - erase FLASH from addr 'start' to addr 'end'

erase N:SF[-SL]

      - erase sectors SF-SL in FLASH bank # N

erase bank N

      - erase FLASH bank # N

erase all

      - erase all FLASH banks

 

erase 命令可以擦 Flash

参数必须指定 Flash 擦除的范围。

按照起始地址和结束地址, start 必须是擦除块的起始地址; end 必须是擦除末尾块的结束地址。这种方式最常用。举例说明:擦除 0x20000 – 0x3ffff 区域命令 为 erase 20000 3ffff

按照组和扇区, N 表示 Flash 的组号, SF 表示擦除起始扇区号, SL 表示擦除结束扇区号。另外,还可以擦除整个组,擦除组号为 N 的整个 Flash 组。擦除全部 Flash 只要给出一个 all 的参数即可。

 

8、flinfo

flinfo

       - print information for all FLASH memory banks

flinfo N

       - print information for FLASH memory bank # N

 

flinfo 命令打印全部 Flash 组的信息,也可以只打印其中某个组。一般嵌入式系统的 Flash 只有一个组。

 

9、go

go addr [arg ...]

      - start application at address 'addr'

         passing 'arg' as arguments

 

go 命令可以执行应用程序。

1 个参数是要执行程序的入口地址。

2 个可选参数是传递给程序的参数,可以不用。

 

10、minfo

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 可以打印程序映像的开头信息,包含了映像内容的校验(序列号、头和校验和)。

1 个参数指定映像的起始地址。

可选的参数是指定更多的映像地址。

 

11、loadb

loadb [ off ] [ baud ]

     - load binary file over serial line with offset 'off' and baudrate 'baud'


loadb
命令可以通过串口线下载二进制格式文件。

 

12、loads

loads [ off ]

    - load S-Record file over serial line with offset 'off'

 

loads 命令可以通过串口线下载 S-Record 格式文件。

 

13、mw

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

     - write memory


mw
命令可以按照字节、字、长字写内存, .b .w .l 的用法与 cp 命令相同。

1 个参数 address 是要写的内存地址。

2 个参数 value 是要写的值。

3 个可选参数 count 是要写单位值的数目。

 

14、nfs

nfs [loadAddress] [host ip addr:bootfilename]

nfs 命令可以使用 NFS 网络协议通过网络启动映像。

 

15、nm

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

     - memory modify, read and keep address

 

nm 命令可以修改内存,可以按照字节、字、长字操作。

参数 address 是要读出并且修改的内存地址。

 

16、printenv

printenv

      - print values of all environment variables

printenv name ...

      - print value of environment variable 'name'

 

printenv 命令打印环境变量。

可以打印全部环境变量,也可以只打印参数中列出的环境变量。

 

17、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

 

protect 命令是对 Flash 写保护的操作,可以使能和解除写保护。

1 个参数 on 代表使能写保护; off 代表解除写保护。

2 3 参数是指定 Flash 写保护操作范围,跟擦除的方式相 同。

 

18、rarpboot

rarpboot [loadAddress] [bootfilename]

 

rarboot 命令可以使用 TFTP 协议通过网络启动映像。也就是把指定的文件下载到指定地址,然后执行。

1 个参数是映像文件下载到的内存地址。

2 个参数是要下载执行的映像文件。

 

19、run

run var [...]

      - run the commands in the environment variable(s) 'var'

run 命令可以执行环境变量中的命令,后面参数可以跟几个环境变量名。

 

20、setenv

setenv name value ...

      - set environment variable 'name' to 'value ...'

setenv name

      - delete environment variable 'name'

 

setenv 命令可以设置环境变量。

1 个参数是环境变量的名称。

2 个参数是要设置的值,如果没有第 2 个参数,表示删除这个环境变量。

 

21、sleep

sleep N

      - delay execution for N seconds (N is _decimal_ !!!)

sleep 命令可以延迟 N 秒钟执行, N 为十进制数。

 

22、tftpboot

tftpboot [loadAddress] [bootfilename]

tftpboot 命令可以使用 TFTP 协议通过网络下载文件。按照二进制文件格式下载。另外使用这个命令,必须配置好相关的环境变量。例 如 serverip ipaddr

1 个参数 loadAddress 是下载到的内存地址。

2 个参数是要下载的文件名称,必须放在 TFTP 服务器相应的目录下。

这些 U-Boot 命令为嵌入式系统提供了丰富的开 发和调试功能。在 Linux 内核启动和调试过程中,都可以用到 U-Boot 的命令。但是一般情况下,不需要使用全部命令。比如已经支持以太网接口,可以通过 tftpboot 命令来下载文件,那么还有 必要使用串口下载的 loadb 吗?反过来,如果开发板需要特殊的调试功能,也可以添加新的命令。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值