初始化(启动)代码

    初始化(启动)代码使处理器从复位状态进入到操作系统能够运行的状态。它通常须配置存储器控制器、处理器cache和初始化一些设备。

    初始化代码在把控制权交给操作系统之前,须处理许多管理任务。可以把这些不同的任务划分为3个队段:
    a.初始化硬件配置
    b.诊断
    c.引导
    
    初始化硬件配置
        包括设置目标平台,使之能够引导一个映射文件(image,后续执行的二进制代码)。尽管目标平台复位时自己有一个标准的配置,
        但是这个配置通常须修改,以满足被引导的映像文件的需求。
        
        例如:存储系统通常需要重新组织存储器映射(memory map);

    诊断
        通常包含在初始化代码中。诊断代码用来检测系统,通过测试硬件目标来检测其工作是否正常。同时也检测标准的系统相关的事件。
        诊断代码的主要目的是识别和隔离故障。

    引导
        引导过程包括了装载一个映像文件并将控制权交给它。

        启动一个映像文件是最后一个阶段,但首先必须装载这个映像文件。装载一个映像文件的过程可以是拷贝包括代码和数据的整个程序到RAM中,
        也可以只拷贝包含易变(volatile)变量的数据区到RAM中。一旦启动,系统通过更改程序计数器(PC)指向映像文件的超始地址,装控制权交出。

        有时,为了减小映像文件,映像文件会是压缩过的。在这种情况下,当映像文件被装载,或者当控制权递交给它时,映像文件要被解压。
        
        基于ARM的嵌入式系统来说,通常都会提供存储器重映射,因为它允许系统上电后立刻从ROM中开始运行初始化代码。然后,初始化代码会重新
        定义或重构存储器映射,把RAM放在地址0x00000000。这一步很重要,因为这样异常向量就在RAM中,并可以被程序改写了。

猜你喜欢

转载自blog.csdn.net/xiaozhiwise/article/details/111548927