软硬件环境

宿主机系统:ubuntu

板子芯片:S5PV210(Contex-A8),512M DDR2,512M SLC Nand

交叉编译器:arm-linux-gcc-4.5.1

手册:S5PV210的S5PV210_UM_REV1.1(老版本居然连内存地址空间都不同)

1.写在前面的话

虽然现在主要做应用层软件,还是想学一下底层的东东,弄清楚cpu的启动原理。内容多为摘抄《Linux平台下Mini210S裸机程序开发指南》--友善之臂和他人博客,作为日后翻阅的笔记之用。

2.S5PV210介绍

S5PV210的datasheet中有对它的基本架构的一些介绍,里面有这么一幅图

从这张图中我们可以看出,对于S5PV210来说,采用ContextA8架构,具有32KB的一级缓存(Cache)和512K的二级缓存。

S5PV210有一个96K的iRam和一个64K的iRom。iRom是拿来存放ContextA8的启动BL0的,在出厂的时候由生产商固化在里面,iRam是ContextA8的内部RAM,这个才是真正意义上的内存,BL0会把BL1拷贝到iRam中运行。S5PV210支持存储接口包括SRAM/ROM, OneNAND, SLC/MLC NAND, LPDDR1/LPDDR2/DDR2。

3.S5PV210内存映射

3. S5PV210启动流程

参考S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf(以下简称SIAP)以及S5PV210的S5PV210_UM_REV1.1.pdf这个版本的datasheet。

3.1板子是怎么启动起来的?

首先我们看下面这一表(见SIAP p22页):

从原文可知道OM[5:0] 引脚决定了SP5V210的启动流程,可直接接VDD或GND来进行模式切换。OM[5]则需要多接一个100k的的下拉电阻。

从友善之臂的原理图中可查到SD启动时,OM[5:0]=001100b,跟原文相符。

接着我们来看看SIAN里面的一个图:

下面还有个注:BL1 / BL2 : It can be variable size copied from boot device to internal SRAM area. 
                        BL1 max. size is 16KB. BL2 max. size is 80KB.

在这个图中我们看以看出我们的S5PV210支持Nor Flash启动,eSSD启动,MMC启动,OneNand启动和Nand启动。B1最大为16KB,BL2最大为80KB。这里的启动代码分为三个部分,第一个就是BL0,第二个就是BL1,第三个就是BL2,这里的BL就是Bootloader的意思。这些标着①②③的就是三星给我们的一个启动流程建议步骤,为啥说是建议的步骤呢?因为我们的启动有时候不一定按照它的建议来,不过流程是不变的,只是代码存放的地方要做一些调整。下面为参考解释:

(1)BL0:是指S5PV210的iROM中固化的启动代码
        作用:初始化系统时钟,设置看门狗,初始化堆和栈,加载BL1

(2)BL1:是在iRAM自动从外扩存储器(nand/sd/usb)中拷贝的uboot.bin二进制文件的头最大16K代码
        作用:初始化RAM,关闭Cache,设置栈,加载BL2

(3)BL2:是指在代码重定向后在内存中执行的uboot的完整代码
        作用:初始化其它外设,加载OS内核

(4)三者之间的关系:(Interal ROM固化代码)BL0将BL1(bootloader的前16KB--BL1)加载到iRAM;BL1然后在iRAM中运行将BL2(剩下的bootloader)加载到SDRAM;BL2加载内核,把OS在SDRAM中运行起来,最终OS是运行在SDRAM(内存)中的。

下图为SRAM的内存地址映射。

因为我使用的是从SDMMC启动,所以我们会使用到CopySDMMCtoMem这个函数,这个函数被定义在0xD0037F98这个位置.

这个函数的原型是:

SD/MMC Copy Function Address
External source clock parameter is used to fit EPLL source clock at 20MHz.
/**
* This Function copy MMC(MoviNAND/iNand) Card Data to memory.
* Always use EPLL source clock.
* This function works at 20Mhz.
* @param u32 StartBlkAddress : Source card(MoviNAND/iNand MMC)) Address.(It must block address.)
* @param u16 blockSize : Number of blocks to copy.
* @param u32* memoryPtr : Buffer to copy from.
* @param bool with_init : determined card initialization.
* @return bool(u8) - Success or failure.
*/
#define CopySDMMCtoMem(z,a,b,c,e)(((bool(*)(int, unsigned int, unsigned short, unsigned int*, bool))(*((unsigned
int *)0xD0037F98)))(z,a,b,c,e))
 

转自:http://blog.csdn.net/shexujia/article/details/20962573

tiny210裸机第1课(启动原理)的更多相关文章

  1. 【SpringBoot】单元测试进阶实战、自定义异常处理、t部署war项目到tomcat9和启动原理讲解

    ========================4.Springboot2.0单元测试进阶实战和自定义异常处理 ============================== 1.@SpringBoot ...

  2. MySQL 启动原理剖析

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要从查看MySQL的启动命令的代码来详细了解MySQL的启动过程,内容 ...

  3. 【原】iOS学习之应用程序的启动原理

    最近看视频了解了一下应用程序的启动原理,这里就做一个博客和大家分享一下,相互讨论,如果有什么补充或不同的意见可以提出来! 1.程序入口 众所周知,一个应用程序的入口一般是一个 main 函数,iOS也 ...

  4. iOS app 程序启动原理

    iOS app 程序启动原理 Info.plist: 常见设置     建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件, ...

  5. iOS的常见文件及程序的启动原理

    一. iOS中常见文件 (一). Xcode6之前 创建项目,默认可以看见一个存放框架的文件夹 info文件以工程文件名开头,如:第一个项目-Info.plist 项目中默认有一个PCH文件 (二). ...

  6. iOS常见文件及程序的启动原理

    一. iOS中常见文件 (一). Xcode6之前 创建项目,默认可以看见一个存放框架的文件夹 info文件以工程文件名开头,如:第一个项目-Info.plist 项目中默认有一个PCH文件 (二). ...

  7. springboot之启动原理解析

    前言 SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏.所以这次博主就跟你们一起一步步揭开SpringBoot的神秘面 ...

  8. SpringBoot之旅第六篇-启动原理及自定义starter

    一.引言 SpringBoot的一大优势就是Starter,由于SpringBoot有很多开箱即用的Starter依赖,使得我们开发变得简单,我们不需要过多的关注框架的配置. 在日常开发中,我们也会自 ...

  9. SpringBoot启动原理及相关流程

    一.springboot启动原理及相关流程概览 springboot是基于spring的新型的轻量级框架,最厉害的地方当属自动配置.那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 二 ...

随机推荐

  1. java 类型转json格式

    json-lib-2.4-jdk15.jar List<People> mapPersonTypes = null; private JSONArray json_mapPersonTyp ...

  2. 在CentOS上安装Python

    首先我们需要在服务器上安装一个比较新的 Python,CentOS 5.8 默认装的 Python 是 2.4.3. [root@nowamagic ~]# python -V Python 我们需要 ...

  3. SharePoint List 查看器

    using Microsoft.SharePoint; using System; using System.Collections.Generic; using System.ComponentMo ...

  4. python_day7【模块configparser、XML、requests、shutil、系统命令-面向对象】之篇

    python内置模块补充 一.configparser configparser:用户处理特定格式的文件,其本质是利用open打开文件 # 节点 [section1] #键值对k1 = v1 k2:v ...

  5. linux服务之asterisk

    由于Asterisk过于专业且复杂,所以目前也存在大量衍生自Asterisk但简化过的通信系统,以让用户较容易使用.比如在欧美比较流行的elastix.trixbox.或以简体中文为基础的Freeir ...

  6. unity,将camera设为don't clear在android上会显示不正常

    将camera设置为don't clear,在pc和ios上显示没问题,但在android上显示不正常,改为only depth可以.

  7. unity, 使导入的材质名与3dmax中一致

    在fbx的Import setting的model选项页中:

  8. web前端面试2

    百度另外一部门面试 1.前端html5新特性 2.数组常用函数 3.前后台json树形结构遍历,对算法的了解 4.css3背景属性设置为适合匹配模块的属性是什么 5.jquery插件的写法 6.研究过 ...

  9. Tkinter单选框及滚动条

    界面:左侧是单选框,右侧是信息显示框,下方是按扭 功能:点击开始爬取按扭,则会自动执行函数,显示在文本框中 indicatoron = 0 改变单选框按扭样式 效果图一: 效果图二: 效果图三: 示例 ...

  10. javascript中in和hasOwnProperty区别

    in操作符只要通过对象能访问到属性就返回true.hasOwnProperty()只在属性存在于实例中时才返回true. function Person(){ } Person.prototype.n ...