ABOUT ME

개발자

Today
Yesterday
Total
  • _main
    Boot Loader/U-BOOT 2019. 9. 25. 14:08

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    ENTRY(_main)
     
    /*
     * Set up initial C runtime environment and call board_init_f(0).
     */
     
    #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
        ldr    r0, =(CONFIG_SPL_STACK)
    #else
        ldr    r0, =(CONFIG_SYS_INIT_SP_ADDR)
    #endif
        bic    r0, r0, #7    /* 8-byte alignment for ABI compliance */
        mov    sp, r0
        bl    board_init_f_alloc_reserve
        mov    sp, r0
        /* set up gd here, outside any C code */
        mov    r9, r0
        bl    board_init_f_init_reserve
     
        mov    r0, #0
        bl    board_init_f
     
    #if ! defined(CONFIG_SPL_BUILD)
     
    /*
     * Set up intermediate environment (new sp and gd) and call
     * relocate_code(addr_moni). Trick here is that we'll return
     * 'here' but relocated.
     */
     
        ldr    r0, [r9, #GD_START_ADDR_SP]    /* sp = gd->start_addr_sp */
        bic    r0, r0, #7    /* 8-byte alignment for ABI compliance */
        mov    sp, r0
        ldr    r9, [r9, #GD_BD]        /* r9 = gd->bd */
        sub    r9, r9, #GD_SIZE        /* new GD is below bd */
     
        adr    lr, here
        ldr    r0, [r9, #GD_RELOC_OFF]        /* r0 = gd->reloc_off */
        add    lr, lr, r0
    #if defined(CONFIG_CPU_V7M)
        orr    lr, #1                /* As required by Thumb-only */
    #endif
        ldr    r0, [r9, #GD_RELOCADDR]        /* r0 = gd->relocaddr */
        b    relocate_code
    here:
    /*
     * now relocate vectors
     */
     
        bl    relocate_vectors
     
    /* Set up final (full) environment */
     
        bl    c_runtime_cpu_setup    /* we still call old routine here */
    #endif
    #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_FRAMEWORK)
    # ifdef CONFIG_SPL_BUILD
        /* Use a DRAM stack for the rest of SPL, if requested */
        bl    spl_relocate_stack_gd
        cmp    r0, #0
        movne    sp, r0
        movne    r9, r0
    # endif
        ldr    r0, =__bss_start    /* this is auto-relocated! */
     
    #ifdef CONFIG_USE_ARCH_MEMSET
        ldr    r3, =__bss_end        /* this is auto-relocated! */
        mov    r1, #0x00000000        /* prepare zero to clear BSS */
     
        subs    r2, r3, r0        /* r2 = memset len */
        bl    memset
    #else
        ldr    r1, =__bss_end        /* this is auto-relocated! */
        mov    r2, #0x00000000        /* prepare zero to clear BSS */
     
    clbss_l:cmp    r0, r1            /* while not at end of BSS */
    #if defined(CONFIG_CPU_V7M)
        itt    lo
    #endif
        strlo    r2, [r0]        /* clear 32-bit BSS word */
        addlo    r0, r0, #4        /* move to next */
        blo    clbss_l
    #endif
     
    #if ! defined(CONFIG_SPL_BUILD)
        bl coloured_LED_init
        bl red_led_on
    #endif
        /* call board_init_r(gd_t *id, ulong dest_addr) */
        mov     r0, r9                  /* gd_t */
        ldr    r1, [r9, #GD_RELOCADDR]    /* dest_addr */
        /* call board_init_r */
    #if CONFIG_IS_ENABLED(SYS_THUMB_BUILD)
        ldr    lr, =board_init_r    /* this is auto-relocated! */
        bx    lr
    #else
        ldr    pc, =board_init_r    /* this is auto-relocated! */
    #endif
        /* we should not return here. */
    #endif
     
    ENDPROC(_main)
     
     

    댓글

Designed by Tistory.