天嵌 ARM开发社区

 找回密码
 注册
查看: 1979|回复: 2

u-boot中start.S的疑惑??

[复制链接]
albert 发表于 2010-12-22 14:33:37 | 显示全部楼层 |阅读模式
本帖最后由 albert 于 2010-12-22 14:55 编辑

.globl _start
_start:        b       reset           //这里才是第一条指令执行的地址?
                        //但有些资料说_armboot_start才是第一条指令运行的地址
        ldr        pc, _undefined_instruction
        ldr        pc, _software_interrupt
        ldr        pc, _prefetch_abort
        ldr        pc, _data_abort
        ldr        pc, _not_used
        ldr        pc, _irq
        ldr        pc, _fiq

_undefined_instruction:        .word undefined_instruction
_software_interrupt:        .word software_interrupt
_prefetch_abort:        .word prefetch_abort
_data_abort:                .word data_abort
_not_used:                .word not_used
_irq:                        .word irq
_fiq:                        .word fiq

        .balignl 16,0xdeadbeef


/*
*************************************************************************
*
* Startup Code (reset vector)
*
* do important init only if we don't start from memory!
* relocate armboot to ram
* setup stack
* jump to second stage
*
*************************************************************************
*/

_TEXT_BASE:
        .word        TEXT_BASE

.globl _armboot_start      //那么前面建立的中断向量表
_armboot_start:
        .word _start

...    .

#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate:                                /* relocate U-Boot to RAM            */
        adr        r0, _start                /* r0 <- current position of code   */
        ldr        r1, _TEXT_BASE                /* test if we run from flash or RAM */
        cmp     r0, r1                  /* don't reloc during debug         */
        beq     stack_setup

        ldr        r2, _armboot_start
        ldr        r3, _bss_start
        sub        r2, r3, r2                /* r2 <- size of armboot            */
        add        r2, r0, r2                /* r2 <- source end address         */

copy_loop:
        ldmia        r0!, {r3-r10}                /* copy from source address [r0]    */
        stmia        r1!, {r3-r10}                /* copy to   target address [r1]    */
        cmp        r0, r2                        /* until source end addreee [r2]    */
        ble        copy_loop
#endif        /* CONFIG_SKIP_RELOCATE_UBOOT */

我不明白的是复制到第二阶段的代码的开始代码连接地址是0X33f80000, 而当期代码的开始地址是_start  即_armboot_start   他们之间是怎样的关系?  复制第一第二阶段的代码到RAM中,那中断向量表也复制到吧?
铁观音 发表于 2010-12-23 09:24:59 | 显示全部楼层
_armboot_start中放的就是_start,_armboot_start只为寻址_start
天嵌_support1 发表于 2010-12-23 10:33:15 | 显示全部楼层
2# 铁观音

楼正正解,
第二阶段复制是包含了中断向量表的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-18 10:39 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表