g-bios 中断向量表和relocation技术的实现

发布于 2022-09-30 18:31:55 字数 2559 浏览 18 评论 0

  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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ぶ宁プ宁ぶ 2022-10-07 18:31:55

bh text开始的链接地址:在th中,指定的放置BH的地址
实际load到SDRAM中的物理地址:在lds脚本中,指定的BH的text的地址

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文