PowerPC平台的U_Boot启动分析和移植

合集下载

u-boot_mips移植分析

u-boot_mips移植分析

u-boot/mips移植分析1.引言文章是2年前移植u-boot时候分析的,u-boot方面文章比较多,但是mips方面的稍微少一点,因此贴上来就当资料搜集贴吧.(Note:图片上传后和原图有些出入,不知道什么原因,不过总体框图还是正确的)1.1.参考资料詹荣开<Bootloader技术内幕>原作者未考证<au1500(mips)及yamon启动过程>2.需求分析Bootloader在嵌入式系统中一般起硬件初始化和内核引导的作用,在产品中使用的Bootloader只要保证基本的功能和引导速度即可,而作为开发使用的Bootloader,要求能提供灵活的配置方式和调试手段,一般选择已有的开源软件作为移植,下面主要分析Bootloader移植的需求2.1.基本功能需求基本功能包括:1.硬件初始化:根据具体的硬件环境,初始化必要的寄存器和外设2.内核引导从存储介质中读取内核映象,并引导3.代码下载提供一种或几种机制能从主机直接下载文件到SDRAM中2.2.扩展功能需求扩展功能主要是为了提供调试手段的多样化和便利化做的一些工作,包括:1.环境变量的保存:提供一种能将用户定制的一些参数和脚本保存的机制;2.文件写入存储介质:提供将SDRAM中文件写入存储介质的功能;B调试手段:提供使用USB作为控制终端和下载方式的调试开发功能;4.文件系统解析:提供文件系统解析功能,使Bootloader能从存储介质的文件系统目录里读取文件。

3.原理分析3.1.Bootloader原理分析(1)Boot Loader简介Bootloader就是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

(2)Boot Loader的操作模式(Operation Mode)大多数Boot Loader都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区别仅对于开发人员才有意义。

u-boot启动分析

u-boot启动分析

背景:Board →ar7240(ap93)Cpu →mips1、首先弄清楚什么是u-bootUboot是德国DENX小组的开发,它用于多种嵌入式CPU的bootloader程序, uboot不仅支持嵌入式linux系统的引导,当前,它还支持其他的很多嵌入式操作系统。

除了PowerPC系列,还支持MIPS,x86,ARM,NIOS,XScale。

2、下载完uboot后解压,在根目录下,有如下重要的信息(目录或者文件):以下为为每个目录的说明:Board:和一些已有开发板有关的文件。

每一个开发板都以一个子目录出现在当前目录中,子目录存放和开发板相关的配置文件。

它的每个子文件夹里都有如下文件(以ar7240/ap93为例):MakefileConfig.mkAp93.c 和板子相关的代码Flash.c Flash操作代码u-boot.lds 对应的链接文件common:实现uboot命令行下支持的命令,每一条命令都对应一个文件。

例如bootm命令对应就是cmd_bootm.ccpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录mips等。

它的每个子文件夹里都有入下文件:MakefileConfig.mkCpu.c 和处理器相关的代码sInterrupts.c 中断处理代码Serial.c 串口初始化代码Start.s 全局开始启动代码Disk:对磁盘的支持Doc:文档目录。

Uboot有非常完善的文档。

Drivers:Uboot支持的设备驱动程序都放在该目录,比如网卡,支持CFI的Flash,串口和USB等。

Fs:支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。

Include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。

该目下configs目录有与开发板相关的配置文件,如ar7240_soc.h。

u-boot的启动流程分析及移植步骤

u-boot的启动流程分析及移植步骤

u-boot的启动流程分析及移植步骤
张进;姜威
【期刊名称】《电力自动化设备》
【年(卷),期】2005(25)7
【摘要】介绍了嵌入式系统中的一个开发源码的软件u-boot.u-boot的实现依赖于CPU体系结构的代码,分为stage1和stage2两部分,分别用汇编语言和C语言实现.详细介绍了u-boot在S3C44BO开发上的移植步骤,包括交叉编译环境的建立、移植前的预编译等.实例证明该软件功能强大,适用范围广.
【总页数】4页(P68-71)
【作者】张进;姜威
【作者单位】山东大学,信息科学与工程学院,山东,济南,250100;山东大学,信息科学与工程学院,山东,济南,250100
【正文语种】中文
【中图分类】TP31
【相关文献】
1.U-boot启动流程分析 [J], 周清杰;黄晋英;马航;崔晓静
2.U-BOOT的启动流程及移植 [J], 张进;姜威
3.U-Boot 启动流程分析与S3C2410上的移植 [J], 董晨;高金山;陈庆伟;王亚庭
4.基于MPC8306的U-Boot启动流程 [J], 关志华
5.基于恒丰锐科S3C44B0X的U-BOOT启动流程分析 [J], 王璐鑫
因版权原因,仅展示原文概要,查看原文内容请购买。

PowerPC平台引导加载程序的移植

PowerPC平台引导加载程序的移植

2008年第 4 期 声学与电子工程 总第 92 期40PowerPC平台引导加载程序的移植张 磊(第七一五研究所,杭州,310012)摘要引导加载程序(Boot Loader)是嵌入式系统软件开发的第一个环节,它把嵌入式操作系统和硬件平台衔接在一起,对于嵌入式系统的后续开发起到十分重要的作用。

U-Boot是目前比较流行且功能强大的Boot Loader,支持种类繁多的体系结构,尤其对PowerPC提供了完善的支持。

MPC8548E是基于E500v2内核,并提供多种接口控制器的处理器。

详细介绍了在基于MPC8548 CPU 的SBC8548E开发板上Boot Loader的移植过程。

关键词引导加载;程序设计;程序移植引导加载程序(Boot Loader)是用来启动设备以及执行内核加载的系统软件组件,配置Boot Loader是所有嵌入式操作系统的一项必要工作。

Linux内核有许多Boot Loader可用,不同架构之间的Boot Loader的质和量也有很大的差异。

Das U-Boot(一般称为U-Boot)被认为是功能最多、最具有弹性以及开发最积极的开放源码Boot Loader。

而基于E500内核的PowerPC芯片是Freescale公司未来高端通信领域的发展方向。

因此研究分析基于E500内核的U-Boot对于深入理解PowerPC架构以及开发后续嵌入式操作系统Linux具有积极的意义。

1 U-Boot移植过程分析MPC8548E是基于E500v2内核的处理器,支持36-bit实地址模式(物理寻址能力达到64 GB,虚拟寻址能力达到1TB)和双精度浮点运算[1],支持DDR2 SDRAM、PCI-X、PCI-E和RapidIO高速串行总线。

主要适用在收发基站(BTS)、媒体网关(MGW)、无线网络控制(RNC)、刀片服务器等网络通信高端领域,同时在工业控制领域也有着广泛的应用。

但是对于应用程序开发人员来说,要想充分发挥其性能就需要深入理解E500内核和外围器件接口的全部寄存器配置和外围总线使用方法,开发难度较大。

U-BOOT的启动流程及移植

U-BOOT的启动流程及移植

11U-BOOT的启动流程及移植摘要:嵌入式系统一般没有通用的bootloader,u-boot是功能强大的bootlo ader开发软件,但相对也比较复杂。

文中对u-boot的启动流程作了介绍,详细给出了u-boot在S3C44B0开发板上的移植方法和步骤。

1Bootloader及u-boot简介Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统等。

Bootloader代码与CPU芯片的内核结构、具体型号、应用系统的配置及使用的操作系统等因素有关,其功能类似于PC机的BIOS程序。

由于bootloader和CPU及电路板的配置情况有关,因此不可能有通用的bootloader,开发时需要用户根据具体情况进行移植。

嵌入式Linux系统中常用的bootloader有armboot、redboot、blob、u-boot等,其中u-boot是当前比较流行,功能比较强大的bootloader,可以支持多种体系结构,但相对也比较复杂。

bootloader的实现依赖于CPU的体系结构,大多数bootloader都分为stage1和stage2两大部分。

Bootloader的基本原理见参考文献。

u-boot是sourceforge网站上的一个开放源代码的项目。

它可对PowerPC MPC5xx、MPC8xx、MPC82xx、MPC7xx、MPC74xx 、ARM(ARM7、ARM9、StrongARM、Xscale)、MIPS(4kc、5kc)、X86等处理器提供支持,支持的嵌入式操作系统有Linux、Vx-Works、NetBSD、QNX、RTEMS、ARTOS、LynxOS等,主要用来开发嵌入式系统初始化代码bootloader。

软件的主站点是http //sourceforge.net/projects/u-boot。

u-boot整体结构、移植步骤以及启动代码分析

u-boot整体结构、移植步骤以及启动代码分析

u-boot整体结构、移植步骤以及启动代码分析本篇文章首先介绍u-boot的整体代码结构,移植的基本步骤,然后分析启动的代码(start.S)中其中代码结构和移植步骤是参考了下面两个连接的文章,这方面资源比较多,一搜一堆,就不自己发明车轮了阿,呵呵。

/blog/user1/9450/archives/2006/12887.html和老古开发网上面的一篇文章,作者是焦玉全黄乡生鲍玉军,题目是第7540篇:U-Boot在S3C2410上的移植(具体URL忘了,我文章是下载的,知道的朋友告诉一声)一、整体结构首先下载u-boot的源代码(www.denx.de),解压缩,你可以看到下面的目录:- 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镜像文件的工具;二、移植步骤为了使U-Boot支持新的开发板,一种简便的做法是在U-Boot已经支持的开发板中选择一种和目标板接近的,并在其基础上进行修改。

uboot启动流程分析

uboot启动流程分析Uboot启动流程分析。

Uboot是一种常用的嵌入式系统启动加载程序,它的启动流程对于嵌入式系统的正常运行至关重要。

本文将对Uboot启动流程进行分析,以便更好地理解其工作原理。

首先,Uboot的启动流程可以分为以下几个步骤,Reset、初始化、设备初始化、加载内核。

接下来我们将逐一进行详细的分析。

Reset阶段是整个启动流程的起点,当系统上电或者复位时,CPU会跳转到Uboot的入口地址开始执行。

在这个阶段,Uboot会进行一些基本的硬件初始化工作,包括设置栈指针、初始化CPU寄存器等。

接着是初始化阶段,Uboot会进行一系列的初始化工作,包括初始化串口、初始化内存控制器、初始化时钟等。

这些初始化工作是为了确保系统能够正常地运行,并为后续的工作做好准备。

设备初始化阶段是Uboot启动流程中的一个重要环节,它包括对外设的初始化和检测。

在这个阶段,Uboot会初始化各种外设,如网卡、存储设备等,并对其进行检测,以确保它们能够正常工作。

最后一个阶段是加载内核,Uboot会从存储设备中加载操作系统的内核镜像到内存中,并跳转到内核的入口地址开始执行。

在这个过程中,Uboot会进行一些必要的设置,如传递启动参数给内核,并最终将控制权交给内核。

总的来说,Uboot的启动流程是一个非常重要的过程,它涉及到系统的硬件初始化、外设的初始化和内核的加载等工作。

只有当这些工作都顺利完成时,系统才能够正常地启动运行。

因此,对Uboot启动流程的深入理解对于嵌入式系统的开发和调试具有重要意义。

通过本文对Uboot启动流程的分析,相信读者对Uboot的工作原理有了更清晰的认识。

希望本文能够对大家有所帮助,谢谢阅读!。

基于MPC8306的U-Boot启动流程

Electronic Technology •电子技术Electronic Technology & Software Engineering 电子技术与软件工程• 67【关键词】MPC8306 U-Boot 启动流程1 引言U-Boot 是一款通用型的引导程序,具有良好的兼容性与灵活性,支持PowerPC 、X86和ARM 等常用系列的处理器。

如需利用PowerPC 处理器与Linux 系统进行相关设备与产品的开发,必须对U-Boot 进行分析与了解。

本文以MPC8306为例,对U-Boot 的架构与启动流程进行详细分析,MPC8306为Freescale 在2010年推出的PowerQUICC ⅡPro 处理器,具有极高的的性价比与系统稳定性,适合应用于工业及军事设备,具体的系统架构如图1所示。

2 架构简述如需进行MPC8306的U-Boot 移植,必须对其系统架构有一定了解,主要目录介绍如下:(1)Arch :存放不同型号CPU 的库文件。

其中,start.S 是非常重要的一个文件,贯穿了U-Boot 启动的整个流程,主要负责设置系统堆栈以及相关工作方式。

(2)Board :板级配置相关文件。

(3)Common :通用类型的代码文件。

(4)Include :存放头文件的文件夹。

子目录 include/configs 下与目标板相关的配置头文件是移植过程中经常要修改的文件,可配置目标板的各项参数(如波特率、引导启动参数等)。

3 启动流程MPC8306的U-Boot 启动流程主要分为两个阶段:Stage 1与Stage2。

Stage1中,以Start.s 文件为基本流程,代码主要由汇编语言组成,也会调用一些C 语言;Stage 2主要由C 语言组成,以board.c 文件为基本流程,负基于MPC8306的U-Boot 启动流程文/关志华责完成板级系统的初始化。

具体启动流程如图2所示。

3.1 Stage 1硬件复位完成后,CPU 开始读取系统复位向量对应的偏移地址为0x100处的第一条指令,这条指令位于U-Boot 中Start.S 文件的_Start 处。

u-boot启动分析

u-boot启动分析背景:Board →ar7240(ap93)Cpu →mips1、首先弄清楚什么是u-bootUboot是德国DENX小组的开发,它用于多种嵌入式CPU的bootloader程序, uboot不仅支持嵌入式linux系统的引导,当前,它还支持其他的很多嵌入式操作系统。

除了PowerPC系列,还支持MIPS,x86,ARM,NIOS,XScale。

2、下载完uboot后解压,在根目录下,有如下重要的信息(目录或者文件):以下为为每个目录的说明:Board:和一些已有开发板有关的文件。

每一个开发板都以一个子目录出现在当前目录中,子目录存放和开发板相关的配置文件。

它的每个子文件夹里都有如下文件(以ar7240/ap93为例):MakefileConfig.mkAp93.c 和板子相关的代码Flash.c Flash操作代码u-boot.lds 对应的链接文件common:实现uboot命令行下支持的命令,每一条命令都对应一个文件。

例如bootm命令对应就是cmd_bootm.ccpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU 在该目录下对应一个子目录,比如有子目录mips等。

它的每个子文件夹里都有入下文件:MakefileConfig.mkCpu.c 和处理器相关的代码sInterrupts.c 中断处理代码Serial.c 串口初始化代码Start.s 全局开始启动代码Disk:对磁盘的支持Doc:文档目录。

Uboot有非常完善的文档。

Drivers:Uboot支持的设备驱动程序都放在该目录,比如网卡,支持CFI的Flash,串口和USB等。

Fs:支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。

Include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。

该目下configs目录有与开发板相关的配置文件,如ar7240_soc.h。

U—Boot的分析与移植

()定 义 入 口。 C U在 系 统 加 电或 复 位 后 , 1 P 一
般都 从 C U制 造 商 预先 安 排 的地 址 上 取 指 令 。对 P
于 A 90 M R 2T核 的 C U, 复 位 时从 地最为强大 , 但相对 比较复杂。像其它 引导程序

取第一条指令 。该 位置实际是复位中断向量 , 在该 位 置存 放跳 转指 令 br e到 复 位 中断 处理 程 序 , e t s 执
行 系统 的初 始化 工作 。 ()设 置异 常 向量 表 , 括 复位 、 定 义 指 令 、 2 包 未 软件 中断 、 取指 令 异常 、 据异 常 、 留 、 常中 断 预 数 保 正 和 快速 中断 向量 。异 常 向量 表是 系统 发 生异 常后 自 动 跳转 的一 段处 理 函 数 入 口表 , 系 统 发 生异 常 时 在
am ot ̄dotbo ,  ̄bo 和 r 等 , 中 U B o r bo, bo,l p ot b i t f 其 —ot
S gl t e 依赖于 C U的体系结构 , s r s a P 在 tt 文件中, a. 由 汇编语言实现 , 主要完成设备 的初始化工作。S gl te a 的主要 工作 如下 :
理器具有高性能、 低功耗的特性 , 已被广泛应用于消 费电子产 品、 无线通信 、 网络通信和工业 控制等 领 域 。嵌 入式 unx系统 具 有 源代 码 开 放 、 u 内核 稳 定 、
可裁减 性等特 点 , 引着 众 多 商业 公 司 和 自由软 件 吸 开发者 的 目光 , 为嵌 入 式 系 统 领域 不 可 或 缺 的操 成 作 系统 之一 。如 何 在嵌 入式 系 统 中完 成 unx 作 u操 系统 的 引导工 作 , 是嵌 入式 系统开 发 的重点 和难 点 。 嵌 入 式 unx u 系统 中常用 的引导程 序有 UBo, —ot
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

技术创新《微计算机信息》(嵌入式与SOC)2010年第26卷第8-2期360元/年邮局订阅号:82-946《现场总线技术应用200例》电子设计PowerPC 平台的U-Boot 启动分析和移植U-Boot Booting Analyses and Porting on PowerPC Platform(北京邮电大学)刘邦运别红霞LIU Bang-yun BIE Hong-xia摘要:引导加载程序是系统加电后运行的第一段软件代码,负责硬件设备的初始化,为加载操作系统内核做准备。

U-Boot 是目前比较流行的开放源码的引导加载程序。

本文针对基于MPC8349E 处理器的高速数据传输硬件平台,分析了U-Boot 启动流程,给出了PowerPC 平台系统设计中U-Boot 移植的过程和方法。

关键词:PowerPC;U-Boot;MPC8349E;移植中图分类号:TP27文献标识码:AAbstract:The bootloader is the first piece of program after the system is powered on,which is mainly intended to initialize hardware devices,preparing for loading OS kernel.U-Boot is a bootloader program of popular and open source code.According to the hard -ware platform for high-speed data transmission based on MPC8349E processor,the paper analyzed U -Boot's booting sequence,and then introduced porting process and ways on the system design of PowerPC platform.Key words:PowerPC;U-Boot;MPC8349E;Porting文章编号:1008-0570(2010)08-2-0172-031引言随着高速数据传输系统应用的日益广泛,PowerPC 系列处理器以其卓越的通信能力与高度的稳定性,在工业控制、高速通信领域具有重要的应用。

处理器MPC8349E 支持DDR2SDRAM 、PCI 、10M/100M/1000M 三速率Ethernet 控制器等,可用于以太网路由器、网络存储、工业控制设备等系统。

本文基于MPC8349E 设计一套用于分布式金属矿地震仪的高速数据转发器,以收集多通道地震数据,完成数据的网络采集与高速数据传输。

在PowerPC 嵌入式系统设计中,U-Boot 移植是硬件系统设计完成后必须进行的重要环节。

本文讨论了MPC8349E Pow -erPC 系统设计中U-Boot 移植的关键问题。

U-Boot 常被用作PowerPC 处理器的引导加载程序,是系统加电后进入操作系统内核之前运行的一段程序,通过这段程序,完成CPU 及外围设备的初始化,建立系统的内存映射,为最终引导操作系统内核做准备。

作为整个嵌入式系统运行起来的第一步,移植一个精简而且高效的U-Boot,可以很好地以最低的代价实现较高的系统管理。

在移植过程中,结合目标板上CPU 、flash 、SDRAM 等外围的情况,以尽可能一致为原则,选择一个U-Boot 已支持的开发板作为参考板,实现U-Boot 的目标板移植,确保板子硬件系统的正确初始化并能顺利启动。

本论文针对MPC8349E 处理器的高速数据传输硬件平台,分析了U-Boot 启动流程,并进行U-Boot 的目标板移植,解决了外围千兆网络芯片的驱动移植以及板子信息交互、系统管理等关键问题,确保了硬件系统的顺利引导。

2MPC8349E 高速数据转发器硬件平台2.1硬件平台原理框图为完成多通道数据的高速传输和存储,基于MPC8349E 处理器,目标板原理框图设计如图1所示。

目标板的组成主要有:MPC8349E 最小系统模块、高速网络传输模块、存储及显示模块等。

图1MPC8349E 目标板原理框图2.2目标板硬件上电启动流程系统上电后,MPC8349E 处理器会检测复位配置模块的输入信号,并根据它们的值来确定输入时钟分频模式及选择复位配置字源。

设置复位配置模块的跳线,选择从local bus EEPROM 上加载复位配置字。

由于这个EEPROM 的数据宽度是未知的,MPC8349E 会从EEPROM 的起始位置前64个字节空间按字节依次读取所有配置字。

地址0x00、0x08、0x10和0x18位置的字节组成复位配置字的低32bit 字RCWL,地址0x20、0x28、0x30及0x38位置的字节组成其高32bit 字RCWH 。

处理器读取复位配置字后设置相应的寄存器。

RCWL 和时钟设置相关;RCWH 和PCI 中断、主从模式、启动ROM 位置、TSEC 模式等相关。

RCWH 的BMS 位值为1,定义了e300核心的MSR[IP]位初始值,也就决定了中断向量的前缀0xFFF,启动存储空间的位置为0xFF80_0000~0xFFFF_FFFF;ROMLOC 位为0b110,决定选择local bus GPCM-16bit ROM 片上外围作启动ROM 。

选中的启动ROM 的本地访问窗口将被使能,并初始化基地址为0xFF80_0000,窗口大小为8M 。

刘邦运:在读研究生172--邮局订阅号:82-946360元/年技术创新电子设计《PLC 技术应用200例》您的论文得到两院院士关注3U-Boot 启动分析硬件上电过程完成以后,系统会向复位向量地址0xFFF0_0100获取第一条指令,也就是驻留在local bus EEP -ROM(flash)中的U-Boot 第一条代码,由此正式进入引导加载程序职能的范围。

U-Boot 的启动主要分为stage1和stage2两个阶段:严重依赖于CPU 体系结构的代码通常都放在stage1,主要由汇编语言实现,运行在系统flash 中;而stage2在前者的基础上建立了“正常”的C 语言环境,由C 代码实现,这样可以实现更加复杂的功能,更具有可读性和可移植性,在系统RAM 中运行,可以让执行速度更快。

3.1U-Boot 启动stage1阶段U-Boot 的stage1阶段主要流程体现在源码板子CPU 目录下的start.S 文件中,主要完成CPU 初始化,RAM 和串口初始化,代码搬运等,下面对此部分流程做进一步详细分析:3.1.1代码入口一个可执行的镜像必须有一个入口点并且只能有一个全局入口,该入口是由CPU 目录下的连接器脚本u-boot.lds 指定,语句ENTRY(_start)来告诉编译器代码入口,即系统上电后获取的第一条指令。

入口代码如下:.=EXC_OFF_SYS_RESET .globl _start_start:/*time t 0*/li r21,BOOTFLAG_COLD /*Normal Power -On:Boot from FLASH*/nop b boot_cold 3.1.2代码分析首先更改IMMR 基址为CONFIG_SYS_IMMR;紧接着初始化e300核心,禁止中断响应,只允许machine check 中断和sys -tem reset 中断,禁止指令和数据地址转换,即关闭MMU,进行实地址转换,设置为supervisor 级别,禁止看门狗,无效指令和数据cache,为系统创建一个干净可靠的初始环境。

然后通过写BR0和OR0寄存器,将flash 基址映射到CON -FIG_SYS_MONITOR_BASE 。

并通过计算flash 中代码的位置,跳转到flash 中执行代码。

紧接着设置块地址转换BAT 表,实现外围资源映射,同时无效所有的TLB 页表。

为了构建一个C 语言环境,利用在MPC8349E 处理器中的32k 数据cache 用作RAM 分配一个栈空间。

为了以后能使用此数据cache 中分配的栈空间,打开MMU,使能指令和数据地址转换。

使能数据cache,用作stage1的堆栈空间及存储全局数据结构空间。

以上几步操作的目的是建立一个可以执行简单C 代码的环境。

函数cpu_init_f ()完成CPU 的第一阶段初始化,主要对IMMR 相关寄存器的初始化,设置外围基地址;并简单设置全局数据结构。

函数board_init_f()进行板子的第一阶段初始化,通过下面一段代码依次调用函数指针数组init_sequence []中的函数完成。

如果中途出错,调用hang()进入死循环。

for (init_fnc_ptr =init_sequence;*init_fnc_ptr;++init_fnc_ptr){if ((*init_fnc_ptr)()!=0)hang ();}其中函数指针数组init_sequence[]保存着基本的初始化函数指针,定义如下:init_fnc_t *init_sequence[]={get_clocks,/*读IMMR 获取CPU 和总线时钟信息*/init_timebase,/*初始化时间基寄存器*/env_init,/*环境变量完整性校验*/init_baudrate,/*初始化波特率设置*/serial_init,/*串口通信初始化*/console_init_f,/*控制台初始化阶段1*/display_options,/*显示U-Boot 信息*/prt_83xx_rsr,/*打印复位状态信息*/checkcpu,/*打印cpu 信息*/checkboard,/*打印板子信息*/misc_init_f,/*设置VSC785CPU 控制寄存器,设置UPM 表使能CF 卡*/init_func_i2c,/*对i2c 初始化*/init_func_ram,/*对DDR 初始化*/NULL,/*Terminate this list */};上面的初始化序列完成以后,首先计算U-Boot 镜像的长度,及搬运到RAM 中的目的地址,在RAM 中为malloc()、板子信息结构体、全局数据结构体分配内存区并进行初始化,建立一个更大的用户栈空间;然后调用relocate_code 汇编例程搬运代码到RAM 中,通过计算跳转到RAM 中继续执行,修改GOT 表项,对BSS 段清零。

此时已经建立起正常的C 环境,可以进行stage2的初始化。

此时的RAM 空间分配如图2:图2U-Boot 存储映射RAM 空间分配图3.2U-Boot 启动stage2阶段此阶段运行在RAM 中,进行CPU 及外设的进一步初始化,代码主要由C 语言完成,主要流程体现在board_init_r()函数中,此函数位于PowerPC 架构通用代码目录下的board.c 文件中。

相关文档
最新文档