我在/ proc / meminfo中看到与vmalloc相关的以下字段。
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
因此,我编写了一个基本的内核模块,该模块使用vmalloc分配内存,以查找'VmallocUsed'字段是否更新为我分配的内存。
这是内核模块
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/vmalloc.h>
#include <linux/moduleparam.h>
MODULE_LICENSE("GPL");
static char *ptr;
int alloc_size = 4096*1234;
static int test_hello_init(void)
{
ptr = vmalloc(alloc_size);
if(!ptr) {
/* handle error */
pr_err("memory allocation failed\n");
return -ENOMEM;
} else {
pr_info("Physical address:%px\t Virtual Address:%llx\n",
ptr+4096, virt_to_phys(ptr+(4096*1234)));
}
return 0;
}
static void test_hello_exit(void)
{
vfree(ptr);
pr_info("Memory freed\n");
}
module_init(test_hello_init);
module_exit(test_hello_exit);
加载模块后,我看不到'VmallocUsed'增加了我分配的值。
/ proc / meminfo中的'VmallocUsed'和'VmallocChunk'字段有什么用途?
答案 0 :(得分:0)
与您的代码有关的另一件事:
null
您无法通过virt_to_phys()虚拟机分配的内存,因为它不是线性映射的。 您将需要使用vmalloc_to_pfn并翻译页面。