U-boot应用于AT91RM9200重映射机制的修正

合集下载

基于AT91RM9200的Linux启动分析

基于AT91RM9200的Linux启动分析

0 (
图 1引导程序算法流程 图
3O
科技论 文
它首先激活芯片 内部的启动程序, 依次查找连接在S I P上的Da Fah 连接在两线接 tl 、 a s E T 上的E P O l WO ( E R M或连接在外部总线接 V(B ) I I E 上的8 位存储器器件上的8 位有效
A M异常向量。 R 所有异常向量必须是由Bbac或L R . nh D 指令载入寄存器。 r 其中A M异常 R的大dKDaa l h t O dwnodr  ̄ t a  ̄f: Fs 类
的系统引导加载程序。Ub o 就是满足需要的开放源码项 目。 -ot
21 .o t . U b o 介绍 U B o,全称 U i r l ot odr 。ot nv s o L ae,是遵循 G L条款的开放源码项 目。它是在 eaB P P C O T以及 A MB O PB O R O T的基础上逐步发展成熟和稳定。UB o 不仅仅支持嵌入式 — ot lu i x系统的引导,当前 ,它还支持 N t S , x rs Q X R E , R O , y x S n e D V Wo , N , T MS A T S L nO B k
型。
若启动程序发现有效的启动 , 就将代码载入内部S A R M中。 在利用MMU 单元完成内 存重映射后, R M将映射到从00 00 0开始的地址 ( SA x 000 0 见图2 , ) 此时将pN转到S A cg R M 的起始地址后开始运行 。
I l 砬省 a
S RAM REM I 埘 a 擅e l
31
电信技 术研 究
20 年 第 9期 08
嵌入式操作系统 。同时 U bo 除了支持 A M 系列的处理器外 ,还能支持 MIS 8、 —ot R P 、x 6 Pwe C、NI 、XSae o r P OS cl等诸 多常 用系列 的处理器 , b o 已经成 为嵌 入式开 发中事实 U—ot

U-BOOT中文文档

U-BOOT中文文档

概述:=====本目录包含U-Boot的源代码。

U-Boot是一个用于嵌入式单板的bootloader,支持PowerPC, ARM, MIPS及其它几种处理器。

它可以安装在boot ROM中,用来对硬件进行初始化和测试,或者下载及运行应用代码。

U-Boot的开发与Linux联系紧密:有一部分代码来源于Linux内核代码树,两者有一些相同的头文件,并且U-Boot为支持Linux映像的启动也提供了特别的支持。

为了使该软件能易于配置及扩展,我们已经做了一些工作。

比如所有操作命令都以相同的调用接口实现,这样便于添加新的命令。

此外,你还可以在monitor上动态地加载及运行代码,而不是向monitor添加不太常用的代码(比如硬件测试程序)。

状态:=====对于在Makefile中存在配置的单板,一般是经过一定的测试,并可以为是"可工作的"。

实际上,很多单板也正式地在生产中使用。

遇到问题时,请在CHANGELOG和CREDITS两个文件中查找一个具体的移植是由谁贡献的。

MAINTAINERS文件列出了单板维护者。

获取帮助:=========如果你对U-Boot有疑问,或者想为U-Boot贡献,你应该向U-Boot邮件列表<u-boot-users@>发送消息。

在提问前,请搜索邮件列表的历史记录:/lists/listinfo/u-boot-users/获取源代码:===========U-Boot源代码使用git仓库维护,地址为:git://www.denx.de/git/u-boot.git;你也可以在线浏览:http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=summary该页面的"snapshots"链接允许你下载任一版本的源码树。

官方发布可以通过FTP下载:ftp://ftp.denx.de/pub/u-boot/预编译(并经过测试)的映像可以从这里下载:ftp://ftp.denx.de/pub/u-boot/images/我们来自哪里:=============- 从8xxrom源代码开始- 建立了PPCBoot 项目(/projects/ppcboot)- 清理代码- 让代码更易于添加自定义单板- 可以添加其它类型的[PowerPC] CPU- 扩展了函数,特别是:* 为Linux 引导程序提供了扩展的接口* 下载S-Record* 从网络引导* 从PCMCIA / CompactFlash / ATA disk / SCSI ... 等设备引导- 建立了ARMBoot项目(/projects/armboot)- 添加了其它CPU家族(从ARM开始)- 建立了U-Boot 项目(/projects/u-boot)- 当前项目的主页: http://www.denx.de/wiki/U-Boot命名与拼写:===========本项目的官方名称为"Das U-Boot"。

AT91RM9200启动源代码crt0.s中的错误分析

AT91RM9200启动源代码crt0.s中的错误分析

AT91RM9200启动源代码crt0.s 中的错误分析本人的AT91RM9200采用从norflash 启动方式,产品采用的norflash 型号为JS28F128J3D75,后来更换为JS28F128J3F75。

当采用JS28F128J3D75时代码正常启动,当采用JS28F128J3F75时代码无法正常启动,程序卡在了clearbss 函数中,因此对启动文件BOOT 源代码进行了分析。

系统上电检测到BMS 为低电平时,系统将外部norflash 地址映射为0x0,并且CPU 从0x0地址处读取命令执行。

此地址norflash 存储的是BOOT 程序。

BOOT 程序所包含的源代码包括:entry.S 、crt0.S 、initboot.c 、main.c 等。

程序在entry.S 中初始化时钟,调用AT91F_LowLevelInit 初始化函数,初始化各种运行模式下的堆栈范围,然后跳转至_main 函数中,_main 函数在crt0.S 文件中,进行了数据拷贝和bss 数据初始化工作,然后跳转至main 函数,进行端口打印和uboot 解压缩。

流程如下图所示:BMS 为0,norflash 地址为0x0entry.S crt0.S main.c initboot.c :初始化sdram 、flash 、串口等程序中定义的有初始值的全局变sdata 段,将本段的数据拷贝至变量区。

程序中定义的未初始化的全局变量,在变量区初始化为0Gcc 在编译时按照链接文件ld.script 描述语言将源代码中的程序和只读变量放置在text 段,将已初始化的全局变量(包括初始化为0)按照地址排列至data 段,将未初始化的全局变量按照地址排列值bss 段。

ld.script : MEMORY {ram : ORIGIN = 0x20000000, LENGTH = 0xf000 rom : ORIGIN = 0x00000000, LENGTH = 0xf000}SECTIONS { .text : {_stext = . ; *(.text) *(.rodata) . = ALIGN(4); _etext = . ; } > rom .data : {_sdata = . ; *(.data) *(.glue_7*) . = ALIGN(4); _edata = . ; } > ram .bss : {_sbss = . ; *(.bss). = ALIGN(4); _ebss = . ; } > ram}由ld.script 文件可以看出,text 段在rom 区,起始地址为0x0,data 段在ram 区,起始地址为0x20000000,bss 段紧接着data 段存储。

AT91RM9200中文手册(修正版)

AT91RM9200中文手册(修正版)

1特性•融合了ARM920T ™ ARM ® Thumb ®处理器–工作于180 MHz 时性能高达200 MIPS ,存储器管理单元–16-K 字节的数据缓存,16-K 字节的指令缓存,写缓冲器–含有调试信道的内部仿真器–中等规模的嵌入式宏单元结构(仅针对256 BGA 封装)•低功耗:VDDCORE 电流为30.4 mA 待机模式电流为3.1 mA •附加的嵌入式存储器–SRAM 为16K ;ROM 为128K •外部总线接口(EBI)–支持SDRAM ,静态存储器, Burst Flash ,无缝连接的CompactFlash ®,SmartMedia ™及NAND Flash •提高性能而使用的系统外设:–增强的时钟发生器与电源管理控制器–两个有双PLL 的片上振荡器–低速的时钟操作模式与软件功耗优化能力–四个可编程的外部时钟信号–包括周期性中断、看门狗及第二计数器的系统定时器–有报警中断的实时时钟–调试单元、两线UART 并支持调试信道–有8个优先级的高级中断控制器,独立的可屏蔽中断源,伪中断保护–7个外部中断源及1个快速中断源–有122个可编程I/O 口线的四个32位PIO 控制器,各线均有输入变化中断及开漏能力–20通道的外设数据控制器(DMA)•10/100 Base-T 型以太网卡接口–独立的媒体接口(MII)或简化的独立媒体接口(RMII)–对于接收与发送有集成的28字节FIFO 及专用的DMA 通道•USB 2.0全速(12 M 比特/秒)主机双端口–双片上收发器(208引脚PQFP 封装中仅为一个)–集成的FIFO 及专用的DMA 通道•USB 2.0全速(12 M 比特/秒)器件端口–片上收发器, 2-K 字节可配置的集成FIFO •多媒体卡接口(MCI)–自动协议控制及快速自动数据传输–与MMC 及SD 存储器卡兼容,支持两个SD 存储器•3个同步串行控制器(SSC)–每个接收器与发送器有独立的时钟及帧同步信号–支持I 2S 模拟接口,时分复用–32比特的高速数据流传输能力•4个通用同步/异步接收/发送器(USART)–支持ISO7816 T0/T1智能卡–硬软件握手–支持RS485及高达115 Kbps 的IrDA 总线–USART1为全调制解调控制线•主机/从机串行外设接口(SPI)–8~16位可编程数据长度,可连接4个外设•两个 3通道16位定时/计数器(TC)–3个外部时钟输入,每条通道有2个多功能I/O 引脚–双PWM 产生器,捕获/波形模式,上加/下减计数能力•两线接口(TWI)–主机模式支持,所有两线Atmel EEPROM 支持•所有数字引脚的IEEE 1149.1 JTAG 边界扫描•电源供应–VDDCORE ,VDDOSC 及VDDPLL 电压为:1.65V ~1.95V–VDDIOP(外设I/O)及VDDIOM (存储器I/O)电压为:1.65V ~3.6V •提供了208引脚PQFP 及256球状BGA 两种封装2AT91RM92001768B–ATARM–07-Jun-05说明AT91RM9200是完全围绕ARM920T ARM Thumb 处理器构建的系统。

基于Atmel at91rm9200的U-boot的设计与移植

基于Atmel at91rm9200的U-boot的设计与移植
以太 网接 口;调试 接 口: 1个 1 0针 皿 G接 口. 11 ub o 源码 结构分 析 . -ot 从上文 提供 的 网址 ,可 以下载到 最新 的 ubo版 本 ,.ot ...通 过 解压 命 令 tr jf .ot .6可 .ot ubo. 1 1 6 a- v bo. 1 x u 1. 在 当前 目录 下生 成 ubo... .ot 1 1 6目录 , 进入 该 目录可 以看 到 ubo 的主要 目录 结构 : .ot bad 不 同 目标板 相 关 目录 文件 , or: 主要 包含 S R M、L S 驱动 . D A FA H

cm o - o m n独立于处理器体系结构的通用多功能函数的实现, 内存大小探测与故障检测 . 如 cu 与处理器相关的文件 .如 m cx 子 目录下含串E、 E、 C p: p8x l 网 l L D驱动及 中断初始化等文件 . ds: 用硬 盘接 口程 序 . i 通 k dcU ot o:. o 相关说 明文档. b
特性对通 用的 ubo进行 了 改, . t o 修 然后给 出了 一种将 u ot 移植 到 a 1 90 b t r 20的通用方法 , 9m 并通过 引导 annx nl u 操 i
作 系统来验证移植 ub t o 的正确性 .
关键词:B ta e; Ame a 1 9 0 ;Ubo o l d r t l t r 2 0 ot o 9 m
代码 具有更 好 的可读 性和 可移 植性翻 . 基于 A M 的 B oodr R ot ae 程序有 很 多种 , l 常见 的有 Bo (ot odrO jc ,r bo,iiR dotubo lb Bo ae bet am tv , ebo,. t L ) o v o

嵌入式系统课程设计题目

嵌入式系统课程设计题目

嵌入式系统课程设计题目1.ARM系统在LED显示屏中的应用(利用ARM系统控制彩色LED显示屏)2.ARM-Linux 嵌入式系统在农业大棚中的应用(温度、湿度和二氧化碳浓度是影响棚栽农作物生长的3 大要素。

为了实现农业大棚中这3 种要素数据的远程实时采集,引入了当前嵌入式应用中较为成熟的ARM9 微处理器和Linux 嵌入式操作系统技术, 采用温度传感器PH100TMPA、湿度传感器HM1500 和二氧化碳浓度传感器NAP221A ,设计一种基于TCP/ IP 协议的嵌入式远程实时数据采集系统方案。

从硬件设计和软件实现2方面对该系统进行具体设计。

)3.ARM 嵌入式处理器在智能仪器中的应用(设计一种基于ARM 嵌入式处理器系统的智能仪器的硬件和软件设计方案, 并结合uc/o s2II或者Linux嵌入式实时操作系统, 给出一套完整的任务调度和管理的方法, 最后用实例说明)4.ARM系统在汽车制动性能测试系统中的应用(采用ARM系统构建一个路试法的汽车制动性能测试系统)5.ARM 嵌入式控制器在印染设备监控中的应用(针对拉幅热定型机,设计一种基于485 总线的分布式监控系统。

用ARM 嵌入式控制器实现主、从电机的同步运行和烘房温度的控制;在PC 机上用VB6. 0 设计转速和温度的监控画面;实现ARM、变频器和PC 机之间的数据通信。

)6.基于ARM系统的公交车多功能终端的设计(完成电子收费、报站、GPS定位等功能)7.基于ARM9的双CAN总线通信系统的设计(设计一种基于ARM9内核微处理器的双路CAN总线通信系统。

完成系统的总体结构、部分硬件的设计,系统嵌入式软件的设计,包括启动引导代码U - boot、嵌入式L inux - 操作系统内核、文件系统以及用户应用管理软件四个部分。

)8.基于ARM9 和Linux 的嵌入式打印终端系统(嵌入式平台上的打印终端的外围电路连接设计、嵌入式Linux 的打印机驱动程序开发和应用程序的开发)9.基于ARM 的车载GPS 终端软硬件的研究(重点研究基于ARM 的导航系统的软硬件设计)10.ARM系统在B超系统中的应用(完成系统软件硬件设计,包括外围电路)11.基于ARM 的嵌入式系统在机器人控制系统中应用(提出一种基于ARM、DSP 和arm-linux 的嵌入式机器人控制系统的设计方法, 完成控制系统的功能设计、结构设计、硬件设计、软件设计)12.基于ARM的视频采集系统设计(完成系统软件硬件设计,包括外围电路,采用USB接口的摄像头)13.基于ARM的高空爬壁机器人控制系统(构建一种经济型的爬壁机器人控制平台, 与上位机视觉定位和控制系统结合,使其适用于导航与定位、运动控制策略、多机器人系统体系结构与协作机制等领域。

uboot源码分析

uboot源码分析

U-Boot源码分析(u-boot-2009.03)hzb我们开始学习uboot,对于linux我还是个新手,在这只是对学习uboot做下笔记,文中错误之处请谅解。

一、cpu/arm920t/start.S分析#include<config.h>@该文件是第二步中mkconfig文件执行时创建的。

include/config.h#include<version.h>@global声明一个符号可被其他文档引用,相当于声明了一个全局变量。

@该部分为处理器的异常处理向量表。

地址范围为0x00000000~0x00000020,刚好8条指令。

.globl_start_start:b reset@uboot的主入口,跳到后面的标号reset处执行ldr pc,_undefined_instructionldr pc,_software_interruptldr pc,_prefetch_abortldr pc,_data_abortldr pc,_not_usedldr pc,_irqldr pc,_fiq@.word为定义一个4字节的空间_undefined_instruction:.word undefined_instruction_software_interrupt:.word software_interrupt_prefetch_abort:.word prefetch_abort_data_abort:.word data_abort_not_used:.word not_used_irq:.word irq_fiq:.word fiq.balignl16,0xdeadbeef_TEXT_BASE:.word TEXT_BASE@由链接器脚本决定,在/borad/samsung/smdk2410/config.mk.globl_armboot_start_armboot_start:.word_start@_start是在起始代码处定义的标号,当跳到_armboot_start后还是会跳转到_start .globl_bss_start_bss_start:.word__bss_start@在board/samsung/smdk2410/u-boot.lds中定义了__bss_start.globl_bss_end_bss_end:.word_end@在board/samsung/smdk2410/u-boot.lds中定义了__bss_start#ifdef CONFIG_USE_IRQ@这个宏在include/configs/smdk2410.h中定义,可以取消。

AT91RM9200DK U-Boot 开发人员手册(指南)

AT91RM9200DK U-Boot 开发人员手册(指南)

AT91RM9200DK U-Boot 开发人员手册(指南)1 - 目的本文档针对描述AT91RM9200DK开发套件中内嵌的bootloader而写。

它从开发人员的角度对U-Boot进行了叙述,主要介绍了:∙U-Boot的构成∙如何编译U-Boot∙升级U-Boot或由零开始烧写U-Boot的不同解决办法∙U-Boot相关工具本文档是U-Boot用户指南(手册)的补充,它主要面向需要对U-Boot进行修改的开发人员。

2 - 特性针对AT91RM9200系列基于ARM的产品,U-Boot软件有以下特性:∙独立的原始自举程序(bootstrap)∙小体积∙不依赖于特定的操作系统(OS)∙自动启动和交互启动方式∙命令行界面(CLI)∙非易失的环境变量∙能够对Flash进行编程∙能够对DataFlash进行编程(可在最近的开源下载中获得)∙通过串行接口(Kermit协议)下载目标代码∙通过以太网(tftp)下载目标代码∙完整的引导协议(bootp)∙支持脚本3 - 软件包说明U-Boot是由开源社区支持的一个计划(project)。

它在通用公共许可证(GPL)下发布。

参见U-Boot源代码来获得credits和licensing的相关信息。

U-Boot源代码提议:∙在一个U-Boot版本中包含所有的源代码。

注意:本版本不一定是U-Boot的最新版本。

如果要做很大改动,那么请从U-Boot网站获得最新的源代码。

∙在一个Boot版本中包含原始的自举程序(bootstrap)和已解压的源代码。

∙在一个Loader版本包含允许从头开始U-Boot的所有源代码。

AT91RM9200DK U-Boot软件版本由三个不同的部分组成:∙一个包含U-Boot、Boot和Loader源代码的目录。

∙一个包含了无需经过任何编译过程就可以直接烧写Flash的所有U-Boot二进制文件的目录。

∙一个含有用户指南和开发人员指南的目录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

U—boot应用于AT91RM9200重映射机制的修正※■山东大学文IJ庆敏田岚U—boot作为一款通用的bootloader,在嵌入式系统领域是非常成功的。

但是在AT91RM9200的重映射…机制的使用上,存在不合理性,给移植带来了很多不便。

本文详细介绍AT91RM9200的重映射机制以及一一启动流程,提出一种检测易失性存储介质的算法;采用情景分析的方法给出U—boot三种模式启动无关性的修正方案,对U—boot移植和bootloader的设计有一定的参考价值。

关键词U—bootAT91RM9200重映射,引言在嵌入式系统中,程序代码必须放在非易失性存储介质里,但嵌入式处理器的速度远远大于非易失性存储介质的读取速度。

为了缓解这种矛盾,提出高速缓存的技术方案,即利用高速的易失性存储介质(如SRAM),作为非易失性存储介质的高速缓存,由此形成了典型的“金字塔式”的存储体系架构。

但是,处理器体系结构的设计决定了上电或复位时从固定的位置取指,此时中断向量表仍然存放于低速非易失性介质里,所以不能有效提高处理器对异常处理的速度。

为了解决这个问题,同时更好地支持存储体系架构,提高系统性能,提出了“重映射”的解决方案。

1重映射的理论模型要理解重映射,必须首先理解映射。

在此给出映射的基本理论模型,如图1所示。

用公式表示为A竺B。

务r弗其中,A表示输入域,B表示输出IJ域,F(X)表示规则。

A在规则F图1(重)映射理论模型(X)下能够与B对应,这种对应关系就是“映射”。

在嵌入式系统中,这个模型应用比较普遍,可以完全用硬件实现,也可以硬件和软件协同实现。

根据作用时间的不同,第1次称为“映射”,后面的就称之为“重映射”。

基本理论相同,实现方式也类似。

在不影响理解的情况下,以下不区分“映射”和“重映射”这两个术语。

嵌入式系统中,重映射对应的输入、输出都是地址数据。

下面举一个完全硬件实现重映射的简单实例:令A=(Ox00000000—0x000fffff),实现到B={0x00100000—0x001fffff)的重映射。

可以看出,它们的不同在于A20一B20这对地址线,所以硬件实现只需对此进行处理就可以了。

如图2所示,无论A20为高电平还是低电平,对应的B20都是高电平。

CPU访问{Ox00000000—0x000fffff),或者{0x00100000—0x001fffff),在映射关系下,实际都是访问到(Ox00100000—0x001fffff)。

通过改变映射关系,可以把{Ox00000000—0x000fffff)这个1MB的地址空间映射到任意位置。

这样就可以实现CPU从固定位置取值,但是实际对应的物理存储介质可以不同了。

图2重映射硬件实现实例根据重映射的不同需求,F(X)对应的复杂度也不同。

为了分析方便,在AT91RM9200的重映射机制分析中,F(X)就作为一个黑匣子处理。

其内部实现的细节这里不作探讨。

2AT91RM9200的实现方案及启动流程AT91RM9200上电或复位之后的内存映射关系可以参考其数据手册的Figure8—1,这里不作重点分析。

内存映射完成后,memorycontroller控制硬件实现重映射(要注意,这是不提供给用户的,也就是说用户无法改变这种映射规则)。

下面用伪代码描述:ifBMS为高电平F(X):bootmemory--’ROMelseF(X):bootmemory---NORFlash其中,BMS是启动模式选择引脚。

它决定了两种不同的映射关系,因而也决定了U—boot至少可以有与之对28《羊旁机j嵌入式牵'i.应用》adv@mesnet.oDm.on(广告专用)万方数据应的两种启动模式。

AT91RM9200通过寄存器MC—RCR为用户提供了接口,可以控制重映射。

不过这种控制规则仍然是有限的。

内存映射完成后,映射规则按照上述伪代码执行。

如果执行重映射,不管BMS状态如何,规则变为“F(X):bootmemory--SRAM”。

再次执行重映射,F(X)将恢复到伪代码描述状态。

这个重映射的具体执行手段,就是往MCLRCR写入1。

明确了AT91RM9200的映射机制,就可以对启动流程进行深入分析了。

AT91RM9200数据手册在“13bootprogram”一节中对内部启动流程讲解得比较清晰,所以对这部分简略描述。

对复杂机制.,如果采用情景分析的方法,则会清晰许多。

根据AT9lRM9200的特点,提出了3种情景。

这3种情景分别对应U—boot启动的3种不同模式。

情景1:令BMS为高电平,系统上电或复位之后从片内启动。

通过Xmodem协议上传loader.bin,其执行成功后,再次通过Xmodem协议上传U-boot.bin,实现U—boot的正常启动。

情景2:令BMS为低电平,系统上电或复位之后从片外NORFlash启动。

此处在0x10000000固化boot.bin,在0x10010000处固化U-boot.bin.gz,实现U—boot压缩方式的正常启动。

情景3:令BMS为低电平,系统上电或复位之后从片外NORFlash启动。

此处在Oxl0000000固化U—boot.bin,实现U—boot的非压缩方式的正常启动。

这3种情景各具特点。

其中情景1适用于测试阶段,U—boot还没有固化到Flash中;如果U—boot比较大,考虑代码空间,则可以采用情景2;如果对启动时间要求非常短,则可以考虑精简U—boot的代码,采用情景3实现快速引导启动。

下面通过.U—boot的生命周期和bootmemory映射规则变化来对3种情景进行对比分析。

情景1:片内启动,loader.bin+U—boot.bin硬件上电,检测到BMS为高电平,F(X):bootmemo-ry---SROM。

那么CPU从0x0处取指执行,实际上执行的就是SROM中的代码。

当无法发现有效序列的代码后,自动执行uploader程序,将loader.bin放到SRAM中,完成后执行重映射,将PC置为0,这样实际上就开始执行上载到SRAM中的loader.bin程序。

此时,F(X):boOtmemory--・SRAM。

loader.bin将用户上传的U-boot.bin下载到SDRAM中,然后跳转到U—boot的起始位置开始执行。

在这种情景中,U—boot.bin的生命之初就在SDRAM中,而且此时F(X):bootmemory---SRAM。

情景2:片外启动,boot.bin+U—boot。

bin.gz上电或复位后,F(X):bootmemory-,NorFlash。

首先执行boot.bin,它的作用就是初始化SDRAM,然后解压U—boot.bin.gz,放到SDRAM中。

然后调转到相应位置,执行U—boot。

在这种情景中,Uboot.bin的生命之初也是在SDRAM中,不过此时F(X):bootmemory-+NORFlash。

情景3:片外启动,U—boot.bin上电或复位后,F(X):bootmemory---NORFlash。

开始执行U—boot,这样U—boot将自身下载到SDRAM中,然后跳转至相应位置执行。

在这种情景中,U—boot.bin的生命之初在NORFlash中,然后到SDRAM。

不过在这整个过程中,F(X):bootmemory-,NORFlash。

通过上述分析和表1,就可以对3种情景U—boot的执行初始状态非常清晰了。

表1U—boot开始时刻的执行位置与F(X)规则对比U—boot开始执行时的位置bootmemory指向情景1SDRAMF(X):bootmemory--,-SRAM情景2SDRAMF(X):bootmemory--.'NORFlash情景3NORFlashF(X):bootmemory--..NORFlash3U—boot的不合理性分析从ftp://ftp.den】【.de下载最新的U—boot一1.3.0。

对AT91RM9200而言,入口位于epu/arm920t/start.S。

此段代码为:/*重定位中断向量表*/ldrr0,=一startldrr1.=0x0rllovr2,#16copyex:subsr2,r2,#1ldrr3,[ro],#4strr3,[r1],#4bnecopyex代码的作用就是把U—boot开始的0x40个字节复制到0x0开始的位置,也就是实现了中断向量表的搬移。

结合表1,对情景是没有问题的,这样实际就复制到了SRAM中;但是,对于情景2和3,就是不合理的了。

因为此时0x0位置是NORFlash,它们都是不可以直接以字节写入的。

也就是说,对情景2和情景3,这段代码不足以完成将中断向量表复制到SRAM中,并将SRAM映射到0x0开始的1MB地址空间内这个任务。

为了验证此结论,提出一个检测算法1:向0x0位置写入0x55,然后读取0x0的数值,看看是否为0x55。

如果是,说明此处为SRAM;如果不是,说明paper@mesnet.conLcn(投稿专用)Microcon仃0llers&EmbeddedSystems29万方数据此处为非易失性存储介质。

利用这个算法,可以在lib—arm/board.e中插入测试代码,验证表1结论的正确性。

经实验分析,表1是正确的。

这样也就间接证明了上述代码的不合理性。

如果想要直接测试,也可以提供一个简单算法2:在lib-arm/board.c中插入测试代码,读取从0x0开始的0x40个字节,然后与U_boot.bin起始位置的0x40个字节对比,看看是否一致。

4解决方案为了对三种情景都支持,就需要根据3种情景的特点来进行区分,如表2所列,这样才可以实现3种启动方式的无关性。

这里需要解决的问题是,通过检测算法1可以判断出情景1;然后判断此时U—boot是在SDRAM还是在NORFlash,可以区分情景2和情景3。

表23种情景复制内容对比复制起始复制到达是否情景复制的长度位置位置重映射情景1_start0x016×4否情景2start0x20000016×4是(一start_armboot-..start)情景3Oxl0000000Ox200000是》2+1对情景1和情景2,因为此时U—boot已经在SDRAM中,所以是否执行重映射对U—boot本身的执行并无影响。

但是对情景3,此时U—boot仍在NORFlash中,bootmemory仍然指向NORFlash。

一旦执行重映射,bootmemory会立即指向SRAM,那么PC下一条指令就无法正常获取了。

为了保证其正常获取,必须把跳转到SDRAM之前的代码复制到SRAM中,这样重映射前后就会实现无缝转换。

相关文档
最新文档