您现在的位置: 主页 > MCU > 单片机应用 > [ARM笔记]虚拟地址和物理地址的关系 -
本文所属标签:
为本文创立个标签吧:

[ARM笔记]虚拟地址和物理地址的关系 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-11 

[导读]对于内核物理内存映射区的虚拟内存,使用virt_to_phys()可以实现内核虚拟地址转化为物理地址,phys_to_virt()可以实现物理地址转化为内核虚拟地址。#define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET)sta

对于内核物理内存映射区的虚拟内存,使用virt_to_phys()可以实现内核虚拟地址转化为物理地址,phys_to_virt()可以实现物理地址转化为内核虚拟地址。

本文引用地址: http://www.21ic.com/app/mcu/201809/784951.htm

#define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET)

static inline unsigned long virt_to_phys(void *x)

{

return __virt_to_phys((unsigned long)(x));

}

上面的转换过程的PaGE_OFFSET通常为3GB,而PHYS_OFFSET则定义为DRAM内存的基地址。因此,对于LDD6410电路板而言,并不是将0地址映射到3GB,而是将外接的SDRAM的首地址映射到3GB。


与之对应的函数为phys_to_virt(),它将物理地址转化为内核虚地址,phys_to_virt()的定义如下:

#define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET)

static inline void *phys_to_virt(unsigned long x)

{

return (void *)(__phys_to_virt((unsigned long)(x)));

}

注意:上述virt_to_phys()和phys_to_virt()方法仅适用于896MB以下的低端内存,高端内存的虚拟地址和物理内存地址之间不存在如此简单的换算关系。




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > [ARM笔记]虚拟地址和物理地址的关系 -
 

"[ARM笔记]虚拟地址和物理地址的关系 -"的相关文章

网站地图

围观()