MS-RTOS 虚拟内存管理

更新时间:
2023-08-09
下载文档

MS-RTOS 虚拟内存管理

本章将介绍 MS-RTOS 虚拟内存管理 VMM 相关接口的使用。

VMM 相关 API

下表展示了虚拟内存管理 VMM 相关的 API 在两个权限空间下是否可用:

API用户空间内核空间
ms_vmm_ioremap_ex
ms_vmm_ioremap
ms_vmm_iounmap
ms_vmm_kmap_in
ms_vmm_kmap_v2p
ms_vmm_kmap_p2v

ms_vmm_ioremap_ex()

  • 描述 以指定的映射属性对指定范围的物理地址进行重映射

  • 函数原型

ms_addr_t ms_vmm_ioremap_ex(ms_addr_t phy_addr, ms_size_t size, ms_uint32_t attr);
  • 参数
输入/输出参数描述
[in]phy_addr起始物理地址(内部会向下对齐到页面大小)
[in]size长度(内部会向上圆整到页面大小)
[in]attr映射属性

其中映射属性为以下的宏组合:

含义
MS_MMU_ATTR_R可读
MS_MMU_ATTR_W可写
MS_MMU_ATTR_X可执行
MS_MMU_ATTR_RX可读可执行
MS_MMU_ATTR_RW可读写
MS_MMU_ATTR_RWX可读写可执行
MS_MMU_ATTR_CACHE可以 CACHE
MS_MMU_ATTR_WB可以写缓冲
MS_MMU_ATTR_GLOGAL全局映射(映射关系对所有进程有效)
MS_MMU_ATTR_USER用户空间页面(用户态可访问)
  • 返回值 成功返回虚拟地址,失败时返回 -1

  • 注意事项

  • 示例

ms_vmm_ioremap()

  • 描述 以可读写不可 CACHE 和不可写缓冲的属性进行重映射

  • 函数原型

ms_addr_t ms_vmm_ioremap(ms_addr_t phy_addr, ms_size_t size);
  • 参数
输入/输出参数描述
[in]phy_addr起始物理地址(内部会向下对齐到页面大小)
[in]size长度(内部会向上圆整到页面大小)
  • 返回值 成功返回虚拟地址,失败时返回 -1

  • 注意事项

  • 示例

ms_vmm_iounmap()

  • 描述 截取虚拟地址到物理地址的映射

  • 函数原型

ms_err_t  ms_vmm_iounmap(ms_addr_t virt_addr);
  • 参数
输入/输出参数描述
[in]virt_addr虚拟地址
  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

ms_vmm_kmap_in()

  • 描述 判断指定的虚拟地址是否为内核固定映射的虚拟地址,内核固定映射是指不经过 MMU 转换的虚拟地址空间,内核固定映射的虚拟地址与物理地址一般是线性映射关系。

  • 函数原型

ms_bool_t ms_vmm_kmap_in(ms_addr_t virt_addr);
  • 参数
输入/输出参数描述
[in]virt_addr虚拟地址
  • 返回值 MS-TRUE:虚拟地址是内核固定映射的虚拟地址,MS-FLASE:虚拟地址不是内核固定映射的虚拟地址

  • 注意事项

  • 示例

ms_vmm_kmap_v2p()

  • 描述 将内核固定映射的虚拟地址转换成物理地址

  • 函数原型

ms_addr_t ms_vmm_kmap_v2p(ms_addr_t virt_addr);
  • 参数
输入/输出参数描述
[in]virt_addr虚拟地址
  • 返回值 对应的物理地址

  • 注意事项

  • 示例

ms_vmm_kmap_p2v()

  • 描述 将内核固定映射的物理地址转换成虚拟地址

  • 函数原型

ms_addr_t ms_vmm_kmap_p2v(ms_addr_t phy_addr);
  • 参数
输入/输出参数描述
[in]phy_addr物理地址
  • 返回值 对应的虚拟地址

  • 注意事项

  • 示例

文档内容是否对您有所帮助?
有帮助
没帮助