zoukankan      html  css  js  c++  java
  • Boatloader的工作流程

    (1)第一节阶段的功能

    1、硬件设备的初始化

    2、载入u-boot第二阶段的代码到我们的RAM空间

    3、设置好栈

    4、跳转到第二阶段的代码入口

    (2)第二阶段的功能

    1、初始化本阶段所使用的硬件设备

    2、检測系统内存映射

    3、将内核Flash读取到RAM中

    4、为内核设置启动參数

    5、调用我们多的内核


    为什么我们的bootloader有一段汇编代码?为什么不用C语言的代码呢?

    编译地址和执行地址

    (1)编译地址

    32位处理器。他的每一条指令是4个字节。他是顺序存储的。

    我们的编译器,回到我们的每一条指令分配一个编译地址,他由编译器自己指定的。

    (2)执行地址

    事实上就是我们程序真正执行的地址,实用户指定


    C语言编译地址:我们都希望把我们的编译地址和执行地址放在一起。可是因为我们的汇编代码不须要做我们C语言到汇编的转变。我们能够觉得是直接写地址。我们直接写的就是执行地址。这就是为什么我们Bootloader在执行之前会有汇编代码。



    u-boot的运行代码:

    1、IROM的代码自己主动将我们的nand flash的前16k复制到我门的SRAM中,这个时候我们的SRAM第一部分就分开运行。先初始化我们的DRAM
    2 将nandflash 中全部的bootloadr复制到我们的DRAM中
    3、跳转到DRAM中開始运行的bootloader中的第二部分代码

    ARM异常模式
    1、管理模式
    复位电平的时候有效,产生复位异常,程序跳转到复位异常运行
    2、没有定义指令异常
    遇到我们不能处理的指令的时候。产生没有定义指令异常
    3、软中断
    运行我们SWI指令的时候。用于用户模式下的程序调用特权操作指令
    4、与存取指令
    处理器数据方位的地址不存在,或者地址不同意当前用户訪问
    5、FIQ 
    6、IRQ
    7、特权模式

  • 相关阅读:
    比赛排名机制
    Python 异常(Exception)
    Python 异常(Exception)
    Sobel算子及C++实现
    一题多解(一) —— list(Python)判空(以及 is 与 == 的区别)
    常用软件的常用快捷键
    常用软件的常用快捷键
    从队列、二叉树到优先队列
    Jenkins(二)
    AssertValid函数学习
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7324602.html
Copyright © 2011-2022 走看看