gec210 NAND BOOT与SD BOOT启动原理
CPU上电后,此时SP指针指向0x0000_0000,从这个地址取第一条指令。但此时:PLL没有启动,CPU工作频率为外部输入晶振频率,非常低(S5PV210中晶振在CPU旁边,两颗24MHz,一颗27MHz);CPU的工作模式、中断设置等不确定;存储空间的各个BANK(包括内存)都没有驱动,内存不能使用。在这种情况下必须在第一条指令处做一些初始化工作,这段初始化程序与操作系统独立分开,称之为Bootloader。下面以S5PV210用的U-BOOT为例:
友善之臂Smart210 SDK2用的是三星公司的S5PV210,在开始U-BOOT的移植之前,有必要弄清楚S5PV210的启动过程:
再来看旁边XOM的一个信号反相器74LVC1G04的图
继续看芯片手册,手册上关于iROM/iRAM及Bootloader描述如下:
- The iROM code is placed in internal 64KB ROM. It initializes basic system functions such as clock, stack, and heap.
- The iROM loads the first boot loader image from a specific booting device to internal 96KB SRAM. The booting device is selected by Operating Mode (OM) pins. According to the secure boot key values, the iROM code may do an integrity check on the first boot loader image.
- The first boot loader loads the second boot loader then may check the integrity of the second boot loader according the secure boot key values.
- The second boot loader initializes system clock, UART, and DRAM controller. After initializing DRAM controller, it loads OS image from the booting device to DRAM. According to the secure boot key values, the second boot loader can do an integrity check on the OS image.
- After the booting completes, the second boot loader jumps to the operating system.
从表中可以看出,三星公司的设计的boot过程有三个步骤
①上电时,运行iRom(BL0)中的代码,该部分是有三星公司写好固化在里面的。BLO会对芯片做一些基本的初始化,关看门狗、初始化cache、PLL、堆栈、数据拷贝功能等;然后拷贝BL1(或者说uboot的前16k字节)到SRAM中,并跳到BL1里执行。
②从BL1中执行,根据左边这个框图可以看出,BL1阶段,只做了BL2拷贝工作(拷贝整个uboot到SRAM中),然后跳到BL2中执行。
③从BL2中执行,此时代码还在iSRAM中,BL2代码会初始化SDRAM,并将内核从NANDFLASH或者SD等设备中拷贝到SDRAM中,并跳到SDRAM中启动内核。
上面是哪个步骤似乎都很合理,但是我们看看三星公司设计的SRAM大小只有96k,对于一些简单的boot代码,编译出来有可能小于96k,在这种机制下可行,但是对于uboot这种功能强大的bootloader而言,编译出来有可能是几百k,那么96k的SRAM更本无法容纳这么大的数据,怎么办呢?
对于uboot而言,他们的团队搞了一个spl.bin,大小刚好是16k,然后在spl.bin中直接对SDRAM进行初始化,然后将整个uboot直接拷贝的SDRAM中运行。。。
对于我们而言,如果自己写bootloader,若编译出来的bin文件小于16k,烧写的SD卡第1个block中或者nandflash的0地址中,IROM中的程序会自动将bin文件拷贝到sram中运行;若大于16k小于96k,则可以使用三星机制,不过要注意的是,如果只编译一个bin文件,那么该文件必须小于80k,且前16k中需要包含拷贝bin功能,然后将bin文件拷贝到SD卡第1个block中或者NANDFLASH的0地址。如果编译分为BL1.bin和BL2.bin,那么BL1必须小于16k,且BL1.bin中有拷贝BL2.bin功能,BL2必须小于80k,然后将BL1.bin烧写到SD卡的第1个block中或者nandflash的0地址处,将BL2.bin烧写到BL1.bin中要拷贝的SD或nandflash的地址处;若自己编译的bootloader大于96k,则可以效仿uboot机制,在BL1阶段就初始化SDRAM,然后将整个bootloader拷贝到SDRAM中运行。。。。当然,我们也可以不管自己的bootloader编译出来有多大,直接拷贝到SDRAM中运行。。。。
gec210 NAND BOOT与SD BOOT启动原理的更多相关文章
- 【串线篇】spring boot嵌入式Servlet容器启动原理;
什么时候创建嵌入式的Servlet容器工厂?什么时候获取嵌入式的Servlet容器并启动Tomcat: 获取嵌入式的Servlet容器工厂: 1).SpringBoot应用启动运行run方法 2).r ...
- S3C6410 纯粹的裸机启动,自己写的SD BOOT启动
这几天晚上一直折腾S3C6410的裸机SD卡启动,不大想使用UBOOT,我是搞硬件的,对底层非常感兴趣,不喜欢已经写好的,因此自己一直在尝试,其实很早之前就试过SD卡启动,也就是ARM11上电后会把S ...
- Spring Boot 启动原理分析
https://yq.aliyun.com/articles/6056 转 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启 ...
- 【转】Spring Boot干货系列:(三)启动原理解析
前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏.所以这次博主就跟你们一起一步步揭开Sprin ...
- Spring Boot干货系列:(三)启动原理解析
Spring Boot干货系列:(三)启动原理解析 2017-03-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说 ...
- spring boot应用启动原理分析
spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个We ...
- Spring Boot启动原理解析
Spring Boot启动原理解析http://www.cnblogs.com/moonandstar08/p/6550758.html 前言 前面几章我们见识了SpringBoot为我们做的自动配置 ...
- spring boot启动原理步骤分析
spring boot最重要的三个文件:1.启动类 2.pom.xml 3.application.yml配置文件 一.启动类->main方法 spring boot启动原理步骤分析 1.spr ...
- Spring Boot应用启动原理分析(转)
在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server. 如果之前没有使用过sprin ...
随机推荐
- rowcommand事件中获取控件
//根据当前按钮生成命名空间 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) ...
- DWR 整合之Struts2.3.16
DWR 能够和任何框架结合. DWR 和 Struts 整合有 2 个层次.最基础的层次就是同时使用这两个框架,这是非常容易的,但是这样就不允许在 DWR 和 Struts 之间共享 Action 了 ...
- BZOJ 3110:[Zjoi2013]K大数查询(整体二分)
http://www.lydsy.com/JudgeOnline/problem.php?id=3110 题意:-- 思路:其实和之前POJ那道题差不多,只不过是换成区间更新,而且是第k大不是第k小, ...
- CSS中margin和position:relative的定位问题
一.代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- webapp之路--之ios上图标
以前我们用过favicon在浏览器给网站进行身份标识,用法如下: <link href="http://image.feeliu.com/web/favicon.ico" r ...
- 浏览器加载外部js 的顺序,以及处理顺序。
问题, 有事候按F12打开 google的调试台后,查看network下面加载过来的资源是, 有些资源的状态处于 pending.. 个人理解: 浏览器是可以同时开启多个http 请求去加载外部的资源 ...
- Codeforces #377 Div2
打得还不错的一场CF,题目质量也很高,今后还要继续努力 A题: 题意:给定一个数k,让其乘一个最小的数,使乘得以后的数要不被10整除,要不减去r以后被10整除,求这个最小的数 #include < ...
- CSS的三种手段让元素脱离标准本文档流——浮动、绝对定位、固定定位
1.浮动 浮动是CSS中用到的最多的一个选项,他有三个性质.关于浮动我们要强调一点,永远不是一个东西单独浮动,浮动都是一起浮动,要浮动,大家都浮动. 1.1 浮动元素脱离标准文档流 1.1.1 大概描 ...
- Android MulticastSocket IP组播
MulticastSocket是对等的关系,也就是他们通过IP多点组播保留的地址来相互接收在这个组的Socket发送的消息 我写了一个例子,MultiSocketB是一个service,用于先接收再发 ...
- 根据XPATH去查看修改xml文件节点的内容
首先给出xml文件解析的路径,然后去读取节点的内容. package com.inetpsa.eqc.threads; import java.util.List; import java.io.Fi ...