一、实验目的
简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
BootLoader是嵌入式系统上电之后,操作系统内核运行之前执行的一段程序,主要负责载入内核。利用上次实验制作的交叉编译工具为目标机编译一个U-boot,然后烧写到实验箱中,为后面的系统移植和嵌入式程序的编译做基础。
二、实验内容
把编译好的u-boot烧写到arm开发箱中并熟练使用u-boot命令。
三、实验步骤
烧写U-Boot
U-Boot编译完成之后,就可以将u-boot目录下的u-boot.bin 烧写到目标机的NandFlash中。u-boot.bin的烧写需要使用一个硬件烧录装置,例如Flash 烧录器或JTAG仿真器。Super-ARM实验箱的U-Boot烧写,在 WINDOWS下进行,依赖第3章中所安装的ADS开发环境,过程如下:
(1) 用Super-ARM实验箱中配置的并口线将 PC 机并口(DB25 口)与仿真器 Probe ICE 的 DB25口连接;用20Pin扁平电缆线将仿真器 Probe ICE 的 ARM-JTAG 口与实验箱的 JTAG 口相连接。打开系统电源。
(2)运行Multi-ICE Server
(3)将本章附件中名为“u-boot烧写”的文件夹复制到PC机的某个目录下,将新编译成功的u-boot.bin拷贝到该目录下。“u-boot烧写”文件夹包含了downUBoot.bat、WriteDwn.bat等批处理文件。这里需要了解一下downUBoot.bat文件的作用,文件内容如下:
@echo off
set FILE=u-boot.bin
if not exist %FILE% goto error
call writedwn %FILE% 116880 0x80000000 12
goto quit
:error
echo file: %FILE% NOT found!
:quit
暂且不管这个文件中的语法,只重点解释一下标为斜体的两行:
“set FILE=u-boot.bin”:这一行的意思是设置即将要烧写的文件名为u-boot.bin;
“call writedwn %FILE% 116880 0x80000000 12”:这一行的意思是调用WriteDwn.bat批处理文件将u-boot.bin烧写到NandFlash的0x0000000地址。其中“116880”是u-boot.bin文件的大小(单位字节);“0x80000000”表示u-boot.bin存放的起始地址为NandFlash的第0块(Super-ARM实验箱的NandFlash的容量为M字节,分4096块,每一块大小为16K字节),也就是0x0000000地址(最前面的8表示操作的是NandFlash,后面数字表示NandFlash的块地址,比如0x80000002,则表示u-boot.bin存放的起始地址为NandFlash的第2块,也就是0x0008000地址);“12”表示u-boot.bin文件的大小不能超过NandFlash的12块。
理解了downUBoot.bat文件的几个重要参数以后,可以根据实际情况(u-boot.bin大小,计划烧写到NandFlash的地址)更改文件中的参数。然后双击运行downUBoot.bat。
当Super-ARM核心板上面IO口的红绿灯常亮的时候则表示bootloader烧写成功(如果灯一直在闪, 则可能烧写失败,要重新烧写)。这样就把U-Boot通过Probe ICE烧写到Nand Flash中了。
U-Boot使用
将U-Boot烧写到目标机的Flash之后,用串口线将目标机与宿主机连接起来,进入宿主机Linux系统,运行minicom,再打开目标机电源,如果U-Boot烧写成功,会看到下面的提示信息:
U-Boot 1.1.6 (Oct 19 2009 - 03:01:55)
DRAM: MB
Flash: 512 kB
NAND: MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
从上面的提示信息可以知道,U-Boot 首先会打印出版本信息,然后提供与硬件有关的若干细节。U-Boot 一运行便会有一个可设定的计时器在输出的最后一行开始倒数计时。如果在所设定的秒数内未按下任何键,U-Boot 就会根据预设的配置开始引导内核。如果在该时间之内有按下一个键,你会看到一个提示符号:
SuperARM #
这个命令提示符就是在上一小节中配置的。这时你可以在命令提示符的后面输入一定的命令来完成你想要完成的任务,比如配置目标机的ip地址,通过tftp的方式下载内核和根文件系统等。
U-Boot命令
在命令行提示符后面输入help可以查看U-Boot的所有命令
SuperARM # help
? - alias for 'help'
autoscr - run script from memory
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
erase - erase FLASH memory
flinfo - print FLASH memory information
go - start application at address 'addr'
help - print online help
icache - enable or disable instruction cache
iminfo - print header information for application image
imls - list all images found in flash
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)
mtest - simple RAM test
mw - memory write (fill)
nand - legacy NAND sub-system
nboot - boot from NAND device
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
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
sleep - delay execution for some time
tftpboot- boot image via network using TFTP protocol
version - print monitor version
U-Boot 替每个命令提供了辅助说明,要使用某个命令之前可以通过查看这些辅助说明来了解该命令的用法,如要想知道cp命令的作用及使用方法,便可以输入help cp查看:
UB=>help cp
cp [.b, .w, .l] source target count
- copy memory
当 U-Boot 在命令之后附加 [.b, .w, .l] 表达式时,代表你需要根据所调用的命令版本在命令之后附加相应的字符串。例如,cp 命令的三个版本 cp.b、cp.w 和 cp.l 分别可用于复制 byte、word 和 long 类型的数据。
U-Boot 对自变量的格式有严格的要求。它会将大部分的自变量视为十六进制的数值。以 cp 命令为例,这代表源位置、目的地址和字节计数等参数都必须是十六进制的数值。你不必为这些数值前置或附加任何特殊的符号,例如 0x 或 h。举例来说,如果你的来源地址是 0x40000000,只须键入 40000000。
U-Boot 允许你使用代表唯一命令的子字符串来启动该命令。举例来说,如果你想要使用tftpboot 命令,你可以只键入tftp,因为以tftp起头的命令只有tftpboot 。相对而言,你不可以键入 lo,因为有四个命令以这两个字母起头:loadb、loads、loady 和 loop。
(1)实验准备
从网上下载tftp服务器软件和烧写U-boot的文件到自己的xp系统中。
ftp://192.168.4.210/u-boot烧写.zip
(2)解压u-boot烧写.zip到XP中,然后把Linux下u-boot.bin放到”u-boot烧写”目录下.
(3)连接实验箱和开发主机
把串口线和网线同时接好。
(4)通过ads烧写u-boot
启动Multi-ICE Server
修改downUBoot.bat文件中
call writedwn %FILE% 116880 0x80000000 12
中的第一个数值,改成u-boot.bin的正确值
把开发箱的第一个跳线跳到1-2的位置,打开开发箱的电源,然后双击downUBoot.bat启动ads进行u-boot的烧录。烧录过程中开发箱的Led灯会闪烁,当Led灯停止闪烁时候表示烧录已经结束。
关闭开发箱电源,把跳线器跳回2-3的位置,然后启动u-boot烧写\\DNW目录下的dnw.exe,
点击connect后打开开发箱电源,观察看到的现象。
Dnw中出现
时候按空格鍵,用手工方法进行u-boot的下载。下载本文