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 | 物理地址 |
返回值 对应的虚拟地址
注意事项 无
示例 无