码迷,mamicode.com
首页 > 其他好文 > 详细

uboot启动第一阶段分析

时间:2019-01-16 01:01:57      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:arm   定义   config   指定   cat   style   入口   little   ttl   

一. uboot第一阶段初识

  1.1. 什么是uboot第一阶段

    1.1.1. 启动os三个阶段

      1.1.1.1. bl0阶段

        a. 这段代码是三星固化到iROM中,可以查看《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》

        b. 这段代码作用是将uboot第一阶段的8kb加载到iRAM中

技术分享图片

      1.1.1.2. bl1阶段(uboot第一阶段)

        a. 此部分是整个uboot的前8k部分

        b. 此部分有bl0 加载到iRAM指定地址

      1.1.1.3. bl2阶段(整个uboot)

        a. 此部分是整个uboot    

        b. 此部分由bl1重定位到DDR的链接地址去

  1.2. 第一阶段主要作用

    a. 初始化DDR

    b. 将整个uboot重定位到DDR中

    c. 跳转到DDR中执行uboot(长跳转)

二. uboot 第一阶段源码分析

  2.1. uboot链接脚本分析

    a. ENTRY(_start):整个程序的入口取决于链接脚本中ENTRY声明的地方。ENTRY(_start)因此_start符号所在的文件就是整个程序的起始文件,_start所在处的代码就是整个程序的起始代码。

    b. 在text段中,指定很多文件的段靠前存放,这样可以保证必要的文件可以在uboot前8K地址内     

技术分享图片
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
    . = 0x00000000;

    . = ALIGN(4);
    .text      :
    {
      cpu/s5pc11x/start.o    (.text)
      cpu/s5pc11x/s5pc110/cpu_init.o    (.text)
      board/samsung/x210/lowlevel_init.o    (.text)
          cpu/s5pc11x/onenand_cp.o      (.text)                 
          cpu/s5pc11x/nand_cp.o (.text)                     
          cpu/s5pc11x/movi.o (.text) 
          common/secure_boot.o (.text) 
      common/ace_sha1.o (.text)
      cpu/s5pc11x/pmic.o (.text)
      *(.text)
    }

    . = ALIGN(4);
    .rodata : { *(.rodata) }

    . = ALIGN(4);
    .data : { *(.data) }

    . = ALIGN(4);
    .got : { *(.got) }

    __u_boot_cmd_start = .;
    .u_boot_cmd : { *(.u_boot_cmd) }
    __u_boot_cmd_end = .;

    . = ALIGN(4);
    .mmudata : { *(.mmudata) }

    . = ALIGN(4);
    __bss_start = .;
    .bss : { *(.bss) }
    _end = .;
}
View Code

  2.2. start.S分析 

    2.1.1. 相关头文件分析 

      a. 有些头文件是在配置/编译过程生成的

      b. 有些头文件使用了符号链接

      c. 很多宏定义在x210_sd.h宏定义,但此文件被config.h所引用

技术分享图片
#include <config.h>
#include <version.h>
#if defined(CONFIG_ENABLE_MMU)
#include <asm/proc/domain.h>
#endif
#include <regs.h>
View Code

    2.2.1. uboot头信息地址占位

      a. 定义4个字空间占用16字节,16字节信息定义可以查看 《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》   

      b. 此处仅仅是定义并未赋有效值,有效值再制作usb启动uboot是写入(如使用sd_fusing中sd_fdisk.c文件会填充)

技术分享图片
#if defined(CONFIG_EVT1) && !defined(CONFIG_FUSED)
    .word 0x2000
    .word 0x0
    .word 0x0
    .word 0x0
#endif
View Code

    2.3.1. _start汇编标号分析

      2.3.1.1. 上述我们已经分析了,启动bl1时的起点就是_start

      2.3.1.2. b reset为什么开始执行的第一句汇编

        a. 无论是复位还是开启都属于重启,故启动先执行reset很合理

        b. reset后cpu处于SVC模式,reset汇编重新设置模式也无妨

技术分享图片
reset:
    /*
     * set the cpu to SVC32 mode and IRQ & FIQ disable
     */
    @;mrs    r0,cpsr
    @;bic    r0,r0,#0x1f
    @;orr    r0,r0,#0xd3
    @;msr    cpsr,r0
    msr    cpsr_c, #0xd3        @ I & F disable, Mode: 0x13 - SVC
View Code

 

uboot启动第一阶段分析

标签:arm   定义   config   指定   cat   style   入口   little   ttl   

原文地址:https://www.cnblogs.com/linux-37ge/p/10274962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!