免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3143 | 回复: 1
打印 上一主题 下一主题

g-bios 中断向量表和relocation技术的实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-01 09:40 |只看该作者 |倒序浏览
  g-bios中断向量表和relocation技术的实现

        ldr r0, handle_reset - 4
        adr   r1, _start
        cmp   r0, r1
        beq   skip_move
        ldr   r2, [r1, #GBH_SIZE_OFFSET]
        @ fixme
        bl    memmove

        比较bh text开始的链接地址和其实际load到SDRAM中的物理地址,如若不想等,则把已经load到SDRAM的整个BH move到text的链接
        地址对应的物理地址处,使物理地址和链接地址相一致,这样才能确保程序不会因为程序存在ldr pc, addr这样的绝对跳转指令而导致取址
        不对(bl, b这样相对跳转指令无需物理地址和链接地址一致)

        ldr   pc, =skip_move
skip_move:
        @ fixme for ROM
        mov   r0, #0
        ldr   r1, handle_reset - 4
        cmp   r1, r0
        beq   bss_init
        mov   r2, #(handle_reset - _start)
        bl    memcpy

        检查bh看其是否被load 到0地址处,如果没有则把bh的中断向量表move 到0地址处,只有在0地址处(或者存在操作系统下的高地址处),
        cpu在收到中断时才能够跳到中断向量表处跳转到相应位置执行相应中断函数(bh 的中断向量表在move 到0地址处后用ldr pc, adr依然能
        够跳转到距离0地址相对较远的SDRAM处,因为ldr pc, addr是将addr 的链接地址给了pc,而这addr在经过relocation技术处理后物理地
        址和链接地址一致,所以...)

        ldr   pc, [pc, #24]
        ldr   pc, [pc, #24]
        ldr   pc, [pc, #24]
        ldr   pc, [pc, #24]
        .word (bss_begin - _start) @ for AT91SAM926X
        ldr   pc, [pc, #20]
        ldr   pc, [pc, #20]

        .word GBH_MAGIC
        .word handle_undef
        .word handle_swi
        .word handle_iabt
        .word handle_dabt
        .word handle_irq
        .word handle_fiq

论坛徽章:
0
2 [报告]
发表于 2011-04-04 18:03 |只看该作者
bh text开始的链接地址:在th中,指定的放置BH的地址
实际load到SDRAM中的物理地址:在lds脚本中,指定的BH的text的地址
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP