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

  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7324602.html
Copyright © 2011-2022 走看看