zoukankan      html  css  js  c++  java
  • zedboard启动过程分析

    	1、经过几天的努力看懂了zedboard的部分启动过程
    	陆书与何宾老师的书上都说到了BootRom , 这个是被称为第0阶段启动引导,这阶段的代码在上电或者热复位时执行,启动代码不可更改,这是比我们所说的u-boot还要领先启动一部分代码。然后这部分第一阶段启动,也就是FSBL,这个文件在zedboar中也就是我们固化是需要生成.fsbl文件。第三阶段是我们的SSBL(second stage boot loder),也就是u-boot,如果是裸机程序那么就是在SDK中写的应用程序的对应的.elf文件。有了这三部分的启动过程才能完整的启动zedboard。

      

    BootRom

    BootRom 只包含了初始化NOR ,NAND,SD,Quad-SPI,SD等的初始化,其他外设的初始化放在FSBL中。 BOOTRom通过物理IO-MIO[2-8]确定我们的启动模式,也就是zedboard上的JP7、9、9、10,官方给的linux是从SD卡中启动的。所以MIO4-5要短接到3.3V上。


    FSBL

    FSBL就是我们在固化是要新建的一个.ELF文件,不是我们写裸跑程序的那个.elf文件。在FSBL中我们可以看到对许多外设的初始化,其中还有一个很重要的就是寻找BOOT.BIN文件,在main函数中我们可以找到这段话,在读取BOOT.BIN后才是真正开始FSBL,我猜测之前操作是BOOTROM与FSBL交接的工作,不知道对不对,欢迎大家指正。至于我们可不可以修改这个fsbl,怎么修改,我还在验证中。
    if (BootModeRegister == SD_MODE) {
    fsbl_printf(DEBUG_GENERAL,"Boot mode is SD ");
    /*
    * SD initialization returns file open error or success
    */
    Status = InitSD("BOOT.BIN");
    if (Status != XST_SUCCESS) {
    fsbl_printf(DEBUG_GENERAL,"SD_INIT_FAIL ");
    OutputStatus(SD_INIT_FAIL);
    FsblFallback();
    }
    MoveImage = SDAccess;
    fsbl_printf(DEBUG_INFO,"SD Init Done ");
    } else

    SSBL

        SSBL就是我们的u-boot这部分是完全可以根据我们需要修改的,可以在digilent官网上下载相关的源码,后面启动的事和纯arm的启动我认为是一样的 ,由于没有arm开发经验,不能乱说。当然SSBL与FSBL还有我们PL端的system.bit是一起通过SDK合并生成BOOT.BIN。所以在这里我就有一个疑问,既然BOOT.BIN是一个文件,那么FSBL里的程序为什么还会去读BOOT.BIN呢,难道是BootRom做的。
    人生天地之间,若白驹之过郤(隙),忽然而已
  • 相关阅读:
    DDL
    [笔记]NFC笔记——初始化RF碰撞避免
    [笔记]Java没有C语言的编译开关怎么办?
    [笔记]NFC笔记——通用初始化及单设备检测(SDD)流程
    [笔记]NFC笔记——NFCIP1协议命令集(NFCIP1 Protocol Command Set)
    [笔记]C++代码演示SingletonMap 单类Map实例
    [笔记]NFC笔记——传输帧格式
    [笔记]C++代码演示Singleton单类实例
    [笔记]山寨中文编程语言
    [笔记]NFC笔记——ATR_REQ 消息结构
  • 原文地址:https://www.cnblogs.com/xiabodan/p/4038677.html
Copyright © 2011-2022 走看看