6.18 虚拟化(11)selftests(3)set_memory_region_test 内核态

看一下内核态所用函数,逐个分析

kvm_check_cap(KVM_CAP_MEMORY_ATTRIBUTES)

__vm_set_user_memory_region

__vm_set_user_memory_region2

kvm_check_cap(KVM_CAP_NR_MEMSLOTS);

kvm_mmap

kvm_munmap

1.kvm_check_cap(KVM_CAP_MEMORY_ATTRIBUTES)

老生常谈了,查看vm相关的属性

私有内存相关属性,这边直接都是写死的

2.__vm_set_user_memory_region 3.__vm_set_user_memory_region2

将hva映射到gpa,主要操作就是通过KVM_SET_USER_MEMORY_REGION

同样这里对比一下region2

多了一个关于guest_memfd的操作,但是函数调用直接把他俩置0了

这两个的ioctl混在了一起,区别就是结构体大小和检查,如果使用V1的话,是否所有的标志位都是V1支持的

4.kvm_check_cap(KVM_CAP_NR_MEMSLOTS);

本质会返回这个东西,用户可用slot = kvm slot总数 - KVM内置slot使用数量(特殊用途)

5.kvm_mmap 6.kvm_munmap

mmap 分配一块内存区域,然后注册到 KVM 作为 guest 的物理内存

#linux驱动##如果再来一次,你还会选择这个工作吗?##嵌入式#
全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-15 17:46
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务