免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2211 | 回复: 3

[BootLoader] U-Boot 的一小段代码不理解,大侠帮忙看看,谢谢了:) [复制链接]

论坛徽章:
0
发表于 2013-03-08 00:42 |显示全部楼层
    我刚开始学嵌入式,在移植U-Boot,在看U-Boot代码的时候 有小段代码不太理解。希望高手们指点一下。谢谢了啊

/* Prepare to disable the MMU */
        adr        r1, mmu_disable_phys
        /* We presume we're within the first 1024 bytes */
        and        r1, r1, #0x3fc       
        ldr        r2, _TEXT_PHY_BASE       
        ldr        r3, =0xfff00000
        and        r2, r2, r3               
        orr        r2, r2, r1               
        b        mmu_disable               

        .align 5                       
        /* Run in a single cache-line */
mmu_disable:
        mcr        p15, 0, r0, c1, c0, 0
        nop
        nop
        mov        pc, r2
#endif
mmu_disable_phys:
#ifdef CONFIG_S3C64XX
        /* Peri port setup */
        ldr        r0, =0x70000000               
        orr        r0, r0, #0x13
        mcr        p15,0,r0,c15,c2,4       @ 256M (0x70000000 - 0x7fffffff)        //外设地址空间
#endif

1.adr指令是取 mmu_disable_phys函数的当前地址吧?那r2最后得到的是 mmu_disable_phys链接地址?程序执行到这里还没有进行 uboot重定位呢啊,所以我就搞不清楚 mov pc,r2这条指令跳转到哪里去执行了 囧~
2. .align 5 我查过资料 说是4字节对齐,我疑惑的是 为什么在这边加四字节对齐,他的作用域一直到哪里?什么时候使用 .align 5?

谢谢了 :wink::wink::wink:

论坛徽章:
0
发表于 2013-03-08 00:43 |显示全部楼层
:wink::wink:

论坛徽章:
0
发表于 2013-03-10 01:47 |显示全部楼层

论坛徽章:
0
发表于 2013-03-11 11:37 |显示全部楼层
本帖最后由 ptostrike 于 2013-03-11 11:42 编辑

1、不太清楚,建议反汇编看看adr指令被汇编成什么了
2、.align 5应该是32字节对齐,它没什么作用域,就是针对接下来的第一条指令,同样反汇编看看就知道了
至于什么时候用,看注释吧 /* Run in a single cache-line */
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP