视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
实验二BootLoader移植(下)
2025-09-26 21:52:53 责编:小OO
文档
实验内容二—BootLoader移植

一、实验目的 

    简单地说,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的下载。下载本文

显示全文
专题