MMU与虚拟地址、物理地址、链接地址

MMU可以将虚拟地址转化为物理地址。

我的理解,物理地址是内存的真实地址。链接地址(也叫运行地址)是编译链接时给程序强加的一个地址;比如arm-linuc-ld -Ttext 0x30000000 led.o head.o -o led_elf; 定义led.bin的起始地址为0x30000000,正常情况下,存放程序的真实物理地址应该和链接地址一致,这时人为做到的,因为这样做比较方便,例如:ldr pc,=main,此时跳到main的链接地址,假设main的真实物理地址和链接地址一致,这时才能真正跳转到main函数。(这里main就是一个数,即链接地址)

至于虚拟地址,会被MMU转化为物理地址。例如,我在页表里设置0xB0000000对应0x30000000, 即ldr pc,=0xB0000000,pc会跳到真实地址0x30000000,这时 ldr pc,=main,main的链接地址和物理地址不能一致。例如main函数存放在0x30000000真实物理空间,则需要设置arm-linuc-ld -Ttext 0xB0000000 led.o head.o -o led_elf,因为main的链接地址赋给pc是虚拟地址,还要经过MMU变为物理地址。如果MMU不开,那就一致,这时没有虚拟地址的说法。


参考 https://blog.csdn.net/yanlutian/article/details/52414226

你可能感兴趣的:(JZ2440+Linux)