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、特权模式

  • 相关阅读:
    POJ 3660 Cow Contest (floyd求联通关系)
    POJ 3660 Cow Contest (最短路dijkstra)
    POJ 1860 Currency Exchange (bellman-ford判负环)
    POJ 3268 Silver Cow Party (最短路dijkstra)
    POJ 1679 The Unique MST (最小生成树)
    POJ 3026 Borg Maze (最小生成树)
    HDU 4891 The Great Pan (模拟)
    HDU 4950 Monster (水题)
    URAL 2040 Palindromes and Super Abilities 2 (回文自动机)
    URAL 2037 Richness of binary words (回文子串,找规律)
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7324602.html
Copyright © 2011-2022 走看看