S5PV210启动过程详解

1.常用的器件及特性
  • 内存

    • SRAM:静态内存 特点就是容量小、价格高,优点是不需要软件初始化直接上电就能用
    • DRAM:动态内存 特点就是容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用。
    • 单片机中:内存需求量小,而且希望开发尽量简单,适合全部用SRAM
    • 嵌入式系统:内存需求量大,而且没有NorFlash等可启动介质
    • PC机: 内存需求量大,而且软件复杂,不在乎DRAM的初始化开销,适合全部用DRAM
  • 外存
    • NorFlash:特点是容量小,价格高,优点是可以和CPU直接总线式相连,CPU上电后可以直接读取,所以一般用作启动介质。
    • NandFlash(跟硬盘一样):特点是容量大,价格低,缺点是不能总线式访问,也就是说不能上电CPU直接读取,需要CPU先运行一些初始化软件,然后通过时序接口读写。
2.各类计算机的启动方式
  • PC:很小容量的BIOS(NorFlash)+ 很大容量的硬盘(类似于NandFlash)+ 大容量的DRAM
  • 单片机: 很小容量的NorFlash + 很小容量的SRAM
  • 嵌入式:因为NorFlash很贵,所以现在很多嵌入式系统倾向于不用NorFlash,直接使用外接的大容量Nand + 外接大容量DRAM + SoC内置SRAM
  • S5PV210启动方式:外接的大容量Nand + 外接大容量DRAM + SoC内置SRAM+SoC内置iROM
3.S5PV210的启动步骤

在这张图中可以看出S5PV210的启动可大致分为五个步骤

  • 1、iROM阶段(BL0)
  • 2、BL1阶段
  • 3、BL2阶段
  • 4、拷贝OS到SDRAM
  • 5、启动OS
    samsung在S5PV210内部的IROM中固化了一段代码,用于初始化时钟,识别用户选择的启动模式,并从相应的地方拷贝boot-loader第一阶段代码到SRAM中运行。此外samsung在S5PV210内部也集成了96KB的内部SRAM,由于SRAM不需要初始化,上电就能使用,因此可当作DRAM初始化之前的代码运行空间。
4.iROM完成的工作

  • 1、关闭看门狗;
  • 2、初始化icache;
  • 3、初始化栈;
  • 4、初始化堆;
  • 5、初始化块设备拷贝函数;
  • 6、初始化PLL,设置系统时钟;
  • 7、拷贝BL1到内部的SRAM区域;
  • 8、检查BL1的校验和;
  • 9、检查是否是安全启动模式;
  • 10、跳转到BL1的起始代码处。

5.汇编启动代码
#define WTCON        0xE2700000
#define SVC_STACK    0xD0037D80

// 把_start链接属性改为外部,这样其他文件就可以看见_start了
.global _start
_start:
    // 第1步:关看门狗(向WTCON的bit5写入0即可),不是所有的BL0都关看门狗
    ldr r0, =WTCON
    ldr r1, =0x0
    str r1, [r0]

    // 第2步:设置SVC栈 默认使用满减栈
    ldr sp, =SVC_STACK

    // 第3步:开/关icache
    mrc p15,0,r0,c1,c0,0;            // 读出cp15的c1到r0中
    //bic r0, r0, #(1<<12)            // bit12 置0  关icache
    orr r0, r0, #(1<<12)            // bit12 置1  开icache
    mcr p15,0,r0,c1,c0,0;

    // 第4步:调用入口函数
    bl entry
6.链接脚本
  • 什么是链接地址
    链接地址是由程序员预知的或希望的程序执行地址,在编译链接的过程中,通过Makefile中-Ttext xxx或者在链接脚本中指定的。
  • 什么是运行地址
    是程序执行,代码所处的实际位置地址。
  • 链接脚本究竟要做什么?
    链接脚本其实是个规则文件,他是程序员用来指挥链接器工作的。
    链接器会参考链接脚本,并且使用其中规定的规则来处理.o文件中那些段,将其链接成一个可执行程序。
    链接脚本的关键内容有2部分:段名 + 地址(作为链接地址的内存地址)
    链接脚本的内容:
    • SECTIONS {} 是整个链接脚本的全部
    • . 点号在链接脚本中代表当前位置。
    • =等号代表赋值,要用分号结尾

link.lds

SECTIONS
{
    . = 0xd0020010;

    .text : {
        start.o
        * (.text)
    }

    .data : {
        * (.data)
    }

    .bss : {
        * (.bss)
    }

}
7.Makefile
NAME=led
BIN=$(NAME).bin
ELF=$(NAME).elf
OBJ=start.o led.o

CC=arm-linux-gcc
LD=arm-linux-ld
CFLAGS=-march=armv5te -nostdlib
LDFLAGS=-nostartfiles -nostdlib
OBJCOPY=arm-linux-objcopy

bin:elf
    $(OBJCOPY) -O binary $(ELF) $(BIN)
    cp $(BIN) ~/shared/image/
elf:$(OBJ)
    $(LD) -T link.lds $(LDFLAGS) $(OBJ) -o $(ELF)
%.o:%.c
    $(CC) $(CFLAGS) -c $< -o [email protected]
clean:
    rm -f $(OBJ) $(ELF) $(BIN)

原文地址:https://www.cnblogs.com/xiehuan-blog/p/9712470.html

时间: 2024-11-08 00:18:56

S5PV210启动过程详解的相关文章

嵌入式开发学习(2)&lt;S5PV210启动过程详解&gt;

基本概念: 内存: SRAM  静态内存  特点:容量小.价格高,优点:不需要软件初始化,上电就能用. DRAM  动态内存  特点:容量大.价格低,缺点:上电不能用,需要软件初始化. 单片机中:内存需求量小,而且希望开发尽量简单,适合全部用SRAM. 嵌入式系统:内存需求量大,而且没有NorFlash等可启动介质.(介于单片机和PC机中间). PC机:内存需求量大,而且软件复杂,不在乎DRAM的初始化开销,适合全部用DRAM. 外存: NorFlash 容量小,价格高,可以和cpu总线式相连,

计算机启动过程详解

计算机启动过程详解打开电源启动机器几乎是电脑爱好者每天必做的事情,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了些什么工作呢?相信有的朋友还不是很清楚,本文就来介绍一下从打开电源到出现Windows的蓝天白云时,计算机到底都干了些什么事情.  首先让我们来了解一些基本概念.第一个是大家非常熟悉的BIOS(基本输入输出系统),BIOS是直接与硬件打交道的底层代码,它为操作系统提供了控制硬件设备的基本功能.BIOS包括有系统BIOS(即常说的主板BI

Linux(RHEL6)启动过程详解

Linux(红帽RHEL6)启动过程详解: RHEL的一个重要和强大的方面是它是开源的,并且系统的启动过程是用户可配置的.用户可以自由的配置启动过程的许多方面,包括可以指定启动时运行的程序.同样的,系统关机时所要终止的进程也是可以进行组织和配置的,即使这个过程的自定义很少被需要. 理解系统的启动和关机过程是如何实现的不仅可以允许自定义,而且也可以更容易的处理与系统的启动或者关机相关的故障.  1.启动过程  以下是启动过程的几个基本阶段:   ① 系统加载并允许boot loader.此过程的细

VxWorks启动过程详解(下)

上一节主要是从映像的分类和各种映像的大致加载流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程: 1. Boot Image + Loadable Images: 下面是具体的流程图: 其中第一阶段的执行流程使用的是上图的左边的源文件中的那些函数(romInit->romStart->usrInit->sysHwinit->usrKernelinit->usrRoot);第二阶段执行流程使用的是上图中右边源文件中的那些函数(sysInit-&

VxWorks启动过程详解(上)

vxworks有三种映像: VxWorks Image的文件类型有三种 Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM ROM-based Images(压缩/没有压缩):即将Image直接烧入ROM,运行时将Image拷入RAM中运行. ROM-Resident Images:Image的指令部分驻留在ROM中运行,仅将数据段部分拷入RAM. 注意这里说的三种映像都是包含真正操作系统VxWorks的映像,其中后两种可以直接启动并运行起来,但是第一种不行,它必须

solaris启动过程详解

在Sparc平台下,Solaris系统中有一个类似PC BIOS的芯片程序(EEPROM OpenBoot)负责识别分区.文 件系统和加载内核,在Solaris 2.6之后的版本中,默认的内核文件存放在/platform/`arch`/kernel/unix 位置,`arch`指令是指明系统的硬件体系,目前一般是i86pc(Intel IA32)或sun4u(Sun UntraSparc). 在Intel体系中,因为没有eeprom firmware,所以系统提供了一个模拟eeprom的引导程序

cocos2dx 启动过程详解一:渲染

今天来看一下cocos2d-x的整体启动过程: cocos2d-x 在各个平台的实现代码是一样的,只要针对不同平台做相应的配置就可以了. 一.启动前奏 现在来看一下在ios平台下的相关结构: 打开源代码自带工程,你会看到一个main文件,这里main里面有一个main函数,这是程序的入口函数.在这里他回加载AppController,进入这个类,这里有ios平台华景初始化代码,但是最先执行的如下: // cocos2d application instance static AppDelegat

cocos2dx 启动过程详解二:内存管理和回调

在上一篇的第二部分中,我们有一句代码待解释的: // Draw the Scene void CCDirector::drawScene(void) { -- //tick before glClear: issue #533 if (! m_bPaused) //暂停 { m_pScheduler->update(m_fDeltaTime);   //待会会解释这里的内容 } -- } 这里是一个update函数,经常会写像this->schedule(schedule_selector(X

Fabric网络环境启动过程详解

这篇文章对fabric的网络环境启动过程进行讲解,也就是我们上节讲到的启动测试fabric网络环境时运行network_setup.sh这个文件的执行流程 fabric网络环境启动过程详解 上一节我们讲到 fabric网络环境的启动测试,主要是使用 ./network_setup.sh up 这个命令,所以fabric网络环境启动的重点就在network_setup.sh这个文件中.接下来我们就分析一下network_setup.sh这个文件network_setup.sh其中包括两个部分,一个