如何解决alloc_page 返回值的使用
我想知道alloc_page
的返回值的用途,它分配page并返回一个struct page
的实例来表示保留块的开始。但是,我不知道如何在分配后使用该保留页。我无法理解这些东西,kmalloc
非常简单,例如我们可以将内存分配到 char *buf
中,但是这个内核函数返回一个结构,我不知道如何使用它来满足我的需要.
#include <linux/init.h>
#include <linux/module.h>
#include <linux/slab.h>
struct page *p;
static int __init sys_module_init(void)
{
p = alloc_page(GFP_KERNEL);
pr_info(KBUILD_MODNAME ": Hello,World!\n");
return 0;
}
static void __exit sys_module_exit(void)
{
__free_page(p);
pr_info(KBUILD_MODNAME ": Bye,World!\n");
}
module_init(sys_module_init);
module_exit(sys_module_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("StackOverflow");
解决方法
alloc_page()
的级别低于 kmalloc()
。如果 struct page
来自用户空间程序,您需要首先使用 kmap()
将其映射到内核地址空间。但是由于您使用 GFP_KERNEL
分配内核内存,因此您可以只获取页面结构,然后使用 page_address()
将其转换为虚拟地址。然后,您可以在 memcpy()
之类的函数中使用该地址向其写入数据。我确信还有其他方法可以从页面写入/读取,包括将内存转换为不同类型,但您可能需要自己进行内存管理。一切都取决于您想对页面做什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。