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\r\n");

/*

* SD initialization returns file open error or success

*/

Status = InitSD("BOOT.BIN");

if (Status != XST_SUCCESS) {

fsbl_printf(DEBUG_GENERAL,"SD_INIT_FAIL\r\n");

OutputStatus(SD_INIT_FAIL);

FsblFallback();

}

MoveImage = SDAccess;

fsbl_printf(DEBUG_INFO,"SD Init Done \r\n");

} else

SSBL

    SSBL就是我们的u-boot这部分是完全可以根据我们需要修改的,可以在digilent官网上下载相关的源码,后面启动的事和纯arm的启动我认为是一样的 ,由于没有arm开发经验,不能乱说。当然SSBL与FSBL还有我们PL端的system.bit是一起通过SDK合并生成BOOT.BIN。所以在这里我就有一个疑问,既然BOOT.BIN是一个文件,那么FSBL里的程序为什么还会去读BOOT.BIN呢,难道是BootRom做的。

zedboard启动过程分析的更多相关文章

  1. ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]

    入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...

  2. 开机SystemServer到ActivityManagerService启动过程分析

    开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /** ...

  3. Neutron分析(2)——neutron-server启动过程分析

    neutron-server启动过程分析 1. /etc/init.d/neutron-server DAEMON=/usr/bin/neutron-server DAEMON_ARGS=" ...

  4. linux视频学习7(ssh, linux启动过程分析,加解压缩,java网络编程)

    回顾数据库mysql的备份和恢复: show databases; user spdb1; show tables; 在mysql/bin目录下 执行备份: ./mysqldump -u root - ...

  5. Activity启动过程分析

    Android的四大组件中除了BroadCastReceiver以外,其他三种组件都必须在AndroidManifest中注册,对于BroadCastReceiver来说,它既可以在AndroidMa ...

  6. Spark Streaming应用启动过程分析

    本文为SparkStreaming源码剖析的第三篇,主要分析SparkStreaming启动过程. 在调用StreamingContext.start方法后,进入JobScheduler.start方 ...

  7. ActivityManagerService启动过程分析

    之前讲Android的View的绘制原理和流程的时候,讲到过在Android调用setContentView之后,Android调用了一个prepreTravle的方法,这里面就提到了Activity ...

  8. Disconf源码分析之启动过程分析下(2)

    接上文,下面是第二次扫描的XML配置. <bean id="disconfMgrBean2" class="com.baidu.disconf.client.Dis ...

  9. Service启动过程分析

    Service是一种计算型组件,用于在后台执行一系列的计算任务.由于工作在后台,因此用户是无法直接感知到它的存在.Service组件和Activity组件略有不同,Activity组件只有一种运行模式 ...

随机推荐

  1. C# 网络通信大小端转换类

    本篇文章主要介绍了"C# 网络通信大小端转换类" using System;namespace Framework.NetPackage.Common { /// <summ ...

  2. Python高级编程–正则表达式(习题)

    原文:http://start2join.me/python-regex-answer-20141030/ ############################################## ...

  3. 【转】如何使用KeyChain保存和获取UDID

    本文是iOS7系列文章第一篇文章,主要介绍使用KeyChain保存和获取APP数据,解决iOS7上获取不变UDID的问题.并给出一个获取UDID的工具类,使用方便,只需要替换两个地方即可. 一.iOS ...

  4. IP, TCP, and HTTP--reference

    IP, TCP, and HTTP Issue #10 Syncing Data, March 2014 By Daniel Eggert When an app communicates with ...

  5. Linux服务器集群系统(二)--转

    引用地址:http://www.linuxvirtualserver.org/zh/lvs2.html LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 ...

  6. UIPickerView 简单操作和实际应用

    1.UIPickerView 选择指示器控件 //选择器的初始化 UIPickerView * pickerView = [[UIPickerView alloc] initWithFrame:CGR ...

  7. NSDate简单介绍

    NSDate简单介绍 一:NSDate是一个日期\时间方面的类,主要用来创建\获取时间 1.NSDate对象的创建: date 创建一个当前系统日期和时间的对象 dateWithTimeInterva ...

  8. Hessian矩阵

    http://baike.baidu.com/link?url=o1ts6Eirjn5mHQCZUHGykiI8tDIdtHHOe6IDXagtcvF9ncOfdDOzT8tmFj41_DEsiUCr ...

  9. Linux之查看文件大小

    1.查看当前文件大小du -sh ./ du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=< ...

  10. Intent的4种传值方法总结

    xml 代码: <Button     android:id="@+id/button1"     android:layout_width="wrap_conte ...