打印
[ARM入门]

关于uboot代码重定位的一些困惑?

[复制链接]
1581|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 狂奔的蜗牛哥 于 2015-9-5 12:28 编辑

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

如上代码为uboot判断是从哪里启动以及代码重定位的源码,我的理解如下:
1、代码可以从nandflash启动,也可以从norflash启动;当从nandflash启动时,cpu将nandflash前4k代码加载到内部SRAM,并调到内部SRAM运行(SRAM映射到0x0地址)。当从norflash启动时,不需要加载到SRAM,直接从norflash的0x0地址运行。
2、当从nandflash启动时,开始内部的SRAM将代码拷贝到指定的链接地址 _TEXT_BASE,然后跳转到SDRAM中运行;
我的困惑:
从nandflash和从norflash启动时,
adr        r0, _start                /* r0 <- current position of code   */
dr        r1, _TEXT_BASE                /* test if we run from flash or RAM */
中的_start都是0x0? ,_TEXT_BASE都是指定的0x33f80000吗?        如果不是,应该是什么?        

相关帖子

沙发
狂奔的蜗牛哥|  楼主 | 2015-9-5 12:50 | 只看该作者

使用特权

评论回复
板凳
mini1986| | 2015-9-6 09:45 | 只看该作者
画个图,详细看看汇编指令,你就明白了......

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

86

帖子

3

粉丝