U-boot使用

一、U-boot介绍

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。

Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。

常见的boot-loader有Redboot、ARMboot、U-Boot等,U-Boot,全称 Universal Boot Loader;

选择U-Boot的理由:

1、开放源码;

2、支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;

3、支持多个处理器系列,如PowerPC、ARM、x86、MIPS;

4、较高的可靠性和稳定性;

5、 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;

6、 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;

7、较为丰富的开发调试文档与强大的网络技术支持;

二、U-boot命令

启动开发板

U-Boot 2010.09-00000-ga6a1bb1-dirty (Mar 26 2018 - 10:39:02)



DRAM:  64 MiB

NAND:  256 MiB

*** Warning - bad CRC or NAND, using default environment



In:    serial

Out:   serial

Err:   serial

Net:   dm9000

Hit any key to stop autoboot:  0

在U-boot延时时间结束前按任意键进入U-boot

[fl2440@lingyun]#

[fl2440@lingyun]#

 

输入help或者?帮助,可以列出所有命令

[fl2440@lingyun]# help

?       - alias for 'help'

base    - print or set address offset

bdinfo  - print Board Info structure

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

echo    - echo args to console

editenv - edit environment variable

erase   - erase FLASH memory

exit    - exit script

false   - do nothing, unsuccessfully

flinfo  - print FLASH memory information

go      - start application at address 'addr'

help    - print command description/usage

icache  - enable or disable instruction cache

iminfo  - print header information for application image

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

loady   - load binary file over serial line (ymodem mode)

loop    - infinite loop on address range

md      - memory display

mm      - memory modify (auto-incrementing address)

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

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

true    - do nothing, successfully

version - print monitor version

输入查看单个命令怎么用,help [命令] 或?[命令],只输入命令,如果命令格式不正确的话也会给你显示该命令用法。对于不需要参数的命令,使用help或者?查看,如reset单输入reset就会重启了

[fl2440@lingyun]# help reset

reset - Perform RESET of the CPU

 

Usage:

reset

[fl2440@lingyun]# ? reset

reset - Perform RESET of the CPU

 

Usage:

reset

 

输入printenv可以查看U-boot环境变量,U-boot也支持命令缩写,如printenv缩写成pri,在所有的命令中没有其他任何一个的命令是由pri开头的,只需要输入pri即可。

[fl2440@lingyun]# printenv

bootargs=console=tty0 console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs mem=64M noinitrd rw loglevel=7

bootcmd=nand read 30008000 100000 900000; bootm 30008000

bbl=tftp 30008000 u-boot-s3c2440.bin;nand erase 0 100000;nand write 30008000 0 60000

blx=tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 F00000;nand write 30008000 100000 D00000

bubifs=tftp 30008000 rootfs-ubifs.bin;nand erase 1000000 2800000;nand write 30008000 1000000 $filesize

bjffs2=tftp 30008000 rootfs-jffs2.bin;nand erase 1000000 2800000;nand write 30008000 1000000 $filesize

bsys=run blx;run bubifs

args_initramfs=console=tty0 console=ttyS0,115200 mem=64M rw loglevel=7

args_ubifs=console=tty0 console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs mem=64M noinitrd rw loglevel=7

args_jffs2=console=tty0 console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc mem=64M rw noinitrd loglevel=7

tb=tftp 30008000 linuxrom-s3c2440.bin; bootm 30008000

bootdelay=2

baudrate=115200

ethaddr=08:00:3e:26:0a:5b

ipaddr=192.168.2.168

serverip=192.168.2.8

netmask=255.255.255.0

stdin=serial

stdout=serial

stderr=serial

ethact=dm9000

 

Environment size: 1133/131068 bytes

 

环境变量,bootcmd是U-boot自动启动后执行的命令,从硬盘中读linux加载到内存中去执行,bootdelay延时时间,可以设置它控制启动后有几秒钟能够进入U-boot不启动linux系统,还可以看到标准输入标准输出标准出错都是串口,ip地址服务器地址子网掩码等等...

 

可以使用set命令修改U-boot环境

 

set只是暂时修改,下次重启之后又会恢复原来的配置,如果想要永久保存修改,使用set命令之后需要使用save命令保存到配置中

内存/寄存器操作命令,内存比较cmp,内存复制cp,存储器显示md,存储器修改mm。

bootm引导内核启动...

 

因为U-boot常只是用来烧录系统而已,所以下面介绍U-boot烧录系统用到的命令

1、网线连接开发板和电脑,

2、pri查看U-boot环境变量

3、设置开发板与电脑在同一网段

 

set ipaddr [ip address]

ip address设置开发板的ip需要与电脑网线连接的网卡对应的ip相同的网段内

这里我设置成set ipaddr 192.168.137.3

set serverip [server ip]

server ip设置服务器ip,设置成电脑网线连接开发板的网卡对应的ip

这里我设置成set serverip 192.168.137.1

 

4、用ping命令用于测试u-boot与目标机之间的连通性

ping 192.168.137.1

 

host 192.168.137.1 is alive说明能够连通

5、tftp下载文件命令

[fl2440@lingyun]# ? tftp

tftpboot - boot image via network using TFTP protocol

 

Usage:

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

 

tftp loadAddress加载到内存的地址 hostlPaddr不设置默认是从serverip处下载,然后就是下载的bootfilename文件名

6、下载的文件在内存中,掉电之后就丢失了,所以要写到硬盘中之后才能自动加载。需要使用nand命令

[fl2440@lingyun]# help nand

nand - NAND sub-system



Usage:

nand info - show available NAND devices

nand device [dev] - show or set current device

nand read - addr off|partition size

nand write - addr off|partition size

    read/write 'size' bytes starting at offset 'off'

    to/from memory address 'addr', skipping bad blocks.

nand erase [clean] [off size] - erase 'size' bytes from

    offset 'off' (entire device if not specified)

nand bad - show bad blocks

nand dump[.oob] off - dump page

nand scrub - really clean NAND erasing bad blocks (UNSAFE)

nand markbad off [...] - mark bad block(s) at offset (UNSAFE)

nand biterr off - make a bit error at offset (UNSAFE)

    先介绍一下Nandflash。Flash Memory中文名字叫闪存,是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器。按功能特性分为两种:一种是NOR型闪存,以编码应用为主,其功能多与运算相关;另一种为NAND型闪存,主要功能是存储资料,如数码相机中所用的记忆卡。

    NandFlash和NorFlash的区别,NandFlash相对比较便宜但是存在坏块,所以每页都留有64Bytes的空间用于存放校验和用于检验是否是坏块,NorFlash相对较贵但是不存在坏块。

    NandFlash和NorFlash的共性首先表现在向芯片中写数据必须先将芯片中对应的内容清空,然后再写入,也就是通常说的“先檫后写”。只不过NorFlash只用檫写一个字,而NandFlash需要擦写整个块。

使用的设备Fl2440开发板使用的是NandFlash。nand info显示可使用的 Nand Flash,nand bad列出Nand Flash中的所有坏块,nand mark [...]标记偏移处是坏块,nand scrub 彻底擦除整块 Nand Flash 中的数据到恢复出厂设置,会擦除掉用户标记的坏块处,而nand earse不会擦除用户标记的坏块处,nand erase NandFlash擦除命令一擦擦一块,nand write NandFlash写命令一写写一页,nand read NandFlash读命令。

 

nand earse擦除要写的NandFlash区域之后,nand write从内存中写入制作好的u-boot、Linux内核以及根文件系统到nandflash相应分区,就完成烧录了。

这里只是简单的介绍使用,有时间再做u-boot的移植好好深入了解U-boot,U-boot源码下载地址:ftp://ftp.denx.de/pub/u-boot/

猜你喜欢

转载自blog.csdn.net/caijiwyj/article/details/89432992