第0部分:S5PV210_大概的启动过程_1

S5PV210大概的启动过程

1.大体的启动过程如下:

第零步:设置OM PIN引脚,就可以选择启动方式了,譬如从SD卡启动,emmc启动,norflash启动等等,我们这里假设从SD卡启动。

第一步:IROM内的代码(BL0)对SOC进行初步的初始化工作

第二步:从SD卡中复制BL1到SOC内的SRAM,执行BL1内的代码

第三步:从SD卡中复制BL2到SOC内的SRAM,执行BL2内的代码(作用:初始化SDRAM控制器,那样我们就可以用DDR内存了)

第四步:把我们的操作系统OS复制到SDRAM中

第五步:我们在BL2中进行一个长跳转,跳转到SDRAM中去执行程序,这样我们整个启动过程就完成了。

2.大体流程的具体实现过程

(0)设置OM PIN引脚,选择启动的介质(图为部分截取)

  从图上我们可以看到,只要我们的OM[0-5]设置为:100000或000000(1代表的就是供电,0代表接地)的时候,我们就选择了essd介质的启动方式

当我们OM[0-5]设置为:001100或者101100的时候,我们选择的就是SD/MMC的模式。这就看你需要什么启动方式了。

  我的开发板(九鼎X210)支持SD卡启动和USB启动:

  SD卡启动:001100或者101100

  USB启动:1XXXX1(x表示没有)

  所以,我们在切换的时候,只需要在SD卡的基础上进行改动(因为OM[1-4]位为什么并不影响USB启动的),拨动引脚OM5就可以了,OM为1就是USB启动,OM为0就是SD卡启动。

(1)IROM代码所做的工作

第一步:关看门狗

第二步:初始化iCache

第三步:初始化栈区域

第四步:初始化堆区域

第五步:初始化块设备拷贝功能

第六步:初始化PLL并设置系统时钟

第七步:检查OM PIN引脚,看看从哪种介质(如SD/MMC)中复制BL1到SRAM,这里就和第零步的工作相照应了,选择了启动方式了

第八步:检查BL1中的checksum,如果checksum失败,就尝试以第二种启动方式启动(SD/MMC 通道2)

第九步:检查是不是安全模式启动(这步比较少应用)

第十步:跳到BL1的起始地址去执行程序

以上就是IROM所做的工作。具体的图示如下:

  从上图我们可以看到,我们的启动凡事可以有6种,找到启动方式后,就从那介质中复制BL1到SDRAM中,然后执行BL1,,执行完BL1之后,查看它是不是唤醒状态,不是就载入BL2到SRAM中,然后就不是安全模式,就跳转到BL2执行,然后判断是不是唤醒状态,不是就开始初始化DRAM了,然后就把操作系统OS载入到DRAM中,之后就跳转到DRAM中去了,然后就是操作系统启动了。(这里就是后面步骤的示意图了)

第二种情况:我们的第一种启动方式不成功,进入到第二种启动方式去执行程序的过程。

  从上图我们可以看到:第一种启动方式失败之后,就会跳转到第二种启动方式,然后检查checkSum(校验和),如果正常的话,就跳转到从第二种启动介质里面复制过来的BL1去执行,如果不正常,就跳转到了串口启动的方式去执行,串口成功的话,那就跳转到串口上传过来的BL1去执行,还是不行的话,就跳转到USB启动的方式去执行,可以就跳转到USB下载下来的BL1执行,还是不行的话就是启动失败了。

最后:我们的文档还涉及了一些其他的具体的内容,如:USB/UART启动模式(注意:UART模式启动的时候,只是支持UART2这个接口,我们不要接错了)的设置的一些内容,还有SRAM内存映射的区域,还有从SD卡等内存介质中复制BL1到SRAM中需要用到的一些函数,还有一些时钟设置的内容。

因为进行裸机实验的时候,需要用到USB启动的方式,还有后面的SRAM内存映射的一些内容,所以下面就顺带介绍一下这些内容。

首先是:USB启动模式

1.我们可以使用DNW工具,看看我们的USB是否接好(看到上面的USB:OK字样)

2.设置好具体的值:波特率是115200,你用的是哪个COM端口,就设哪个COM端口,具体的COM端口可以看右键我的电脑->管理->设备管理器->usbdnw处

3.下载具体的程序就好了

注意:因为我们的UART/USB启动模式都不需要头校验的,所以,我们的下载地址是:0xD0020000,像SD卡那些的,需要头校验和的,他们的下载地址就是:0xD0020010

接下来就是:SRAM的内存映像了

看着这个图:我们就知道了我们的下载地址为什么是0xD0020000和0xD0020010了,因为SRAM的头地址就是这些。

Exception Vector Table:中断异常向量表

Heap:堆,申请堆的时候,在这里申请

Global Variable:全局变量放在这里

IRQ stack:中断模式下的栈

SVC stack:SVC模式下的栈,我们平时就是SVC模式下的,所以我们说的设置栈的时候,就是设置这里的栈

参考资料:朱老师物联网大教程

参考的IROM数据手册的翻译博客:http://blog.csdn.net/a627088424/article/details/9149671

时间: 2024-10-11 16:32:30

第0部分:S5PV210_大概的启动过程_1的相关文章

【1.0】谈谈spring的启动过程

1.web.xml中: <!-- 加载spring容器 --><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext-*.xml</param-value></context-param><listener> <listener-class

Android深入四大组件(一)应用程序启动过程

相关文章 Android系统架构与系统源码目录 Android系统启动流程(一)解析init进程启动过程 Android系统启动流程(二)解析Zygote进程启动过程 Android系统启动流程(三)解析SyetemServer进程启动过程 Android系统启动流程(四)Launcher启动过程与系统启动流程 Android应用程序进程启动过程(前篇) Android应用程序进程启动过程(后篇) 前言 在此前的文章中,我讲过了Android系统启动流程和Android应用进程启动过程,这一篇顺

解析Centos启动过程

第一步---加载BIOS 打开电源,系统会首先加载BIOS,BIOS会运行上电自检程序,对电脑的硬件设施进行完全彻底的检验和测试,检测完成后通过BIOS获取到与CPU.内存.硬盘.设备启动顺序等相关的信息. 第二步---读取MBR记录 硬盘上的0磁道的第一个扇区既是MBR,大小为512字节,存放着预启动信息.分区表信息,当系统读取到MBR记录,就会把MBR记录复制到0x7c00地址所在的物理内存之中,成为boot loader(在centos中就是grub). 第三步---加载boot load

Tomcat探秘(4):tomcat启动过程详述

熟悉Tomcat的工程师们,或者从事Java开发的,肯定都知道Tomcat是如何启动和停止的.在Tomcat源码包里面有个bin目录,该目录下放置了一些很重要的脚本,Tomcat启动和停止的脚本程序就放在这里,分别是startup.bat.shutdown.bat(Windows环境)和start.sh.shutdown.sh(Linux.Unix环境).大家一定都知道如何使用它们,接下来就是研究一下它们是如何实现启动和停止服务的. 在实际的生产环境下,绝大多数的Tomcat都是部署在Linux

一步一步分析新建App启动过程

IOS温故而知新(一)  一步一步分析新建App启动过程 笔者接触IOS大概半年的时间,可以说能够开发App,但是又有很多不足的地方,因此打算写一些技术文章,能够达到温故而知新的效果,难免会有错误或者遗漏,也希望各位看官不吝指教.另外宣传一下刚建立的群“IOS菜鸟到高手之路”,312747764,欢迎希望交流分享的人加入. 1.IOS系统的简单说明IOS与Mac OS X以及安卓一样都属于类UINX系统,然而熟悉类UNIX系统的人可能会失望的是,个人开发的App会进入类似chroot的状态,被操

Spring Boot启动过程(一)

之前在排查一个线上问题时,不得不仔细跑了很多遍Spring Boot的代码,于是整理一下,我用的是1.4.3.RELEASE. 首先,普通的入口,这没什么好说的,我就随便贴贴代码了: SpringApplication.run(Application.class, args);--> public static ConfigurableApplicationContext run(Object source, String... args) { return run(new Object[] {

laravel的启动过程解析

如果没有使用过类似Yii之类的框架,直接去看laravel,会有点一脸迷糊的感觉,起码我是这样的.laravel的启动过程,也是laravel的核心,对这个过程有一个了解,有助于得心应手的使用框架,希望能对大家有点帮助.提示:在此之前,最好看一下官方文档,大概知道laravel,再来看这个笔记,这样效果可能会好一点. 统一入口 laravel框架使用了统一入口,入口文件:/public/index.php <?php //自动加载文件设置 require __DIR__.'/../bootstr

Android世界第一个activity启动过程

Android世界第一个activity启动过程 第一次使用Markdown,感觉不错. Android系统从按下开机键一直到launcher的出现,是一个怎样的过程,中间都做出了什么操作呢,带着这些疑问开始源码之旅. 像windows操作系统一样,每个系统的启动都会有一个引导程序,在linux中,当引导程序启动linux内核后,会加载各种驱动和数据结构,当有了驱动之后,开始加载Android系统,开始进入linux世界的第一个进程:init进程. 在init.c的main中: int main

laravel启动过程简单解析

:first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:3px}iframe{border:0}figure{-webkit-margin-before:0;-webkit-margin-after:0;-webkit-margin-start:0;-webkit-margin-end:0}kbd{border:1px solid #aaa;-moz-bord