我正在寻找一种在内核模块中分配大页面(2M或1G)的方法(我正在使用内核版本4.15.0)。
在用户空间中,我可以挂载hugetlbfs文件系统,然后使用分配大页面mmap(请参阅例如https://blog.kevinhu.me/2018/07/01/01-Linux-Hugepages/)。在内核空间中有类似的方法吗?
我知道我可以先在用户空间中分配它们,然后使用get_user_pages,将它们传递给内核,如在内核驱动程序中对宏页面的顺序访问中所述。但是,我正在寻找一种更直接的分配方式,因为我只在内核空间中需要它们。
我想在内核模块中使用do_mmap()。根据这个问题,这应该是可能的。
这是一个最小的无效示例:
hp_km.c:
#include <linux/module.h>
#include <linux/mm.h>
MODULE_LICENSE("GPL");
static int __init hp_km_init(void) {
do_mmap(0, 0, 0, 0, 0, 0, 0, 0, 0);
return 0;
}
static void __exit hp_km_exit(void) {
}
module_init(hp_km_init);
module_exit(hp_km_exit);
Run Code Online (Sandbox Code Playgroud)
Makefile:
obj-m += hp_km.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)
运行make结果WARNING: "do_mmap" [...] undefined!
我需要进行哪些更改hp_km.c或Makefile使其生效?