PowerPC-MPC56xx Flash模式代码启动过程

https://mp.weixin.qq.com/s/iruM5VwKgnH_7nmIQxO0-g

参考第5章

In order for the e200z4d core to be able to access memory, a valid MMU TLB entry has to be created. The
SSCM does this automatically by reading the reset vector and modifying TLB entry 0 to create a 4 KB
page containing the reset vector address. The MMU VLE bit is set depending on the status of the VLE bit
within the RCHW. The 4 KB MMU page must be 4 KB aligned. This means that the most efficient place
to put the application code is immediately after the boot sector. The 4 KB block provides sufficient space
to:
? Add MMU entries for SRAM and peripherals
? Perform standard system initialisation tasks (initialise the SRAM, setup stack, copy constant data)
? Transfer execution to RAM, re-define the flash memory MMU entry and transfer execution back to flash memory.
Finally, the SSCM sets the e200z4d core instruction pointer to the reset vector address and starts the core
running.

SSCM从boot vector读取到reset vector address之后,即跳转到该位置开始执行代码。

一. 一般情况下启动代码的任务

  1. 从语言上看,最开始执行汇编代码,之后执行C语言代码;C语言执行函数调用需要栈,所以需要配置栈指针寄存器;堆只需要一个malloc引用起始位置即可,无需特别配置;
  1. 需要将带初值的数据从flash拷贝到内存中,将BSS区清0;

二. PowerPC MPC56xx的情况

这段代码要做的初始化动作依次如下:

  1. 为内存、Flash还有其他地址区间,添加MMU entry。防止引用到的地址无法访问。
  1. 根据ABI配置栈指针寄存器SP,指向SDA区的寄存器,指向SDA2区的寄存器;
  1. 初始化RAM内容,全部置零;
  1. 拷贝.data区,.bss区清0;

然后就可以调到main函数执行了。

三. 配置Flash控制寄存器

如果需要配置Flash控制寄存器,则需要特别操作。因为最开始执行的代码地址reset vector address指向flash,也就是说CPU从Flash中开始执行代码,CPU的PC指向flash。如果此时直接配置Flash控制寄存器,则会导致无法访问Flash中的代码。

变通的方法是把配置Flash控制器的代码,先拷贝到RAM中,然后跳转到RAM,即CPU的PC指向RAM中的Flash配置代码。配置完毕之后,再跳转回之前Flash中的代码,继续执行。

当然,如果有两块Flash,并且他们的控制器是分开的,也可以分别交替配置。

原文地址:https://www.cnblogs.com/wjcdx/p/9245780.html

时间: 2024-10-16 18:45:39

PowerPC-MPC56xx Flash模式代码启动过程的相关文章

深入理解 JBoss 7/WildFly Standalone 模式启动过程

概述 JBoss 7/WildFly Standalone 模式启动过程大致如下: 启动脚本 standalone.sh 启动 JBoss Modules,JBoss Modules 启动 JBoss MSC,JBoss MSC 运行加载相关的 Services,本文简单以调试代码的方式,简单说明这几个步骤. 调试 jboss modules 当我们完成 JBoss 安装,我们会发现在 JBOSS_HOME 目录下有一个 `jboss-modules.jar`,该 jar 主要加载 JBoss

google 分屏 横屏模式 按home键界面错乱故障分析(二) 分屏的启动过程

google 进入分屏后在横屏模式按home键界面错乱(二) 你确定你了解分屏的整个流程? Android 关机对话框概率没有阴影故障分析 android recent key长按事件弹起触发最近列表故障分析 google 分屏 popup无法显示故障分析 分享此文便是对代码GG的支持,也是爱的表达方式,所以让爱来的猛烈些吧. 代码阅读,请到此处http://androidxref.com 查看原生代码 前情回顾: google 分屏 横屏模式 按home键界面错乱故障分析(一) 上一节我们主要

深入理解 JBoss 7/WildFly Domain 模式启动过程

概述 JBoss 7/WildFly 以 domain 模式启动时会启动多个 JVM,例如如下通过启动脚本启动 domain 模式: ./domain.sh 启动后我们查看进程: [[email protected] tdump]$ jps -l 23655 /home/kylin/work/eap/jboss-eap-6.1/jboss-modules.jar 23671 /home/kylin/work/eap/jboss-eap-6.1/jboss-modules.jar 23736 /h

openstack学习笔记一 虚拟机启动过程代码跟踪

本文主要通过对虚拟机创建过程的代码跟踪.观察虚拟机启动任务状态的变化,来透彻理解openstack各组件之间的作用过程. 当从horizon界面发送一个创建虚拟机请求,horizon api 将会依据前端给定的数据信息.调用novaclient 生成一个创建虚拟机的http post 请求来创建vm服务. >/usr/lib/python2.6/site-packages/horizon/api/nova.py(334)server_create() > /usr/lib/python2.6/

Linux启动过程学习

该学习过程是一个Linux从主引导记录到第一个用户空间程序的指导. 启动一个Linux系统的过程包含一系列步骤.但是无论你是启动一个标准的X86桌面或嵌入式PowerPC,大部分流程是相似的.该文章探索Linux从最初的引导程序到开启第一个用户空间程序的过程.同时,我们也将会学到其他一些启动相关的课题,例如引导装载程序,内核解压缩,最初的RAM和其他Linux启动的元素. 早期,引导启动一个计算机意味着提供一个包含启动程序或使用前面板地址/数据/控制开关手动加载一个启动程序的纸带.现在的计算机装

TMS320F2812启动过程

TMS320F2812从内部Flash启动的详细流程说明: 1>程序硬件复位或者软件复位; 2>判断XMP/MC信号状态;若该信号为高电平时是微处理器模式,此时外部接口Zone7有效,Zone7被映射到存储空间的高位,这样向量表指向外部,系统从Zone7启动.若该信号为低电平时是微计算机模式,此时Zone7被禁止,向量表指向Boot ROM,这样系统既可以从内部存储空间启动,也可以从外部存储空间启动. 3>到Boot ROM的0x3FFC00处取出复位向量,跳到Boot函数;(TMS32

linux服务器启动过程

随着Linux的应用日益广泛,特别是在网络应用方面,有大量的网络服务器使用Linux操作系统.由于Linux的桌面应用和Windows相比还有一 定的差距,所以在企业应用中往往是Linux和Windows操作系统共存形成异构网络.在服务器端大多使用Linux和Unix的,目前Linux的擅 长应用领域是单一应用的基础服务器应用,譬如DNS和DHCP服务器.Web服务器.目录服务器.防火墙.文件和打印服务器.Intranet代理服务器 .启动 Linux 系统的过程包括很多阶段.不管您是引导一个标

linux启动过程-//-转

from http://opens.itpub.net/7668319/viewspace-856199/ linux系统的启动过程是由很多步骤组成的,但是,无论你是启动一个标准的x86桌面计算机,还是一个嵌入式PowerPC的目标板,大多数的流程是惊人得相似的.这篇文章,探索了linux从最初的启动准备到用户空间中某个程序被开启之间的启动过程,跟随这个流程,你还能学到其他许多与启动有关的知识,例如,boot loaders,内核解压缩,初始化内存盘,以及其他一些linux启动的部分.[@[em

嵌入式启动过程笔记

内存. sram:静态内存,价格贵容量大,不需要初始化上电就能用. dram:动态内存,价格便宜容量小,需要初始化后才能使用. 在单片机额中,由于内存小希望开发尽量简单,所以内存适合全部用sram,在pc机中,所需内存大,软件复杂,不在乎dram初始化的开销,所以应该全部选用dram,在嵌入式系统中,内存需求量大而且没有norflash等启动介质.(一般内部有iram就是sram用来启动,运行用dram,我推测的). 外存 norflash:容量小,价格贵,可以和cpu总线直接相连,直接读取,所