[英]How to use do_mmap() in kernel module
I would like to use do_mmap() in a kernel module. 我想在内核模块中使用do_mmap()。 According to this question this should be possible. 根据这个问题,这应该是可能的。
Here is a minimal non-working example: 这是一个最小的非工作示例:
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);
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
Running make
results in WARNING: "do_mmap" [...] undefined!
运行make
结果WARNING: "do_mmap" [...] undefined!
What do I need to change in hp_km.c
or Makefile
to make this work? 我需要在hp_km.c
或Makefile
中进行哪些更改才能使其正常工作?
In addition to rebuild the kernel, you can also use kallsyms_lookup_name to find the address corresponding to the symbol 除了重建内核之外,您还可以使用kallsyms_lookup_name查找与该符号对应的地址
such as below: 如下:
#include <linux/module.h>
#include <linux/mm.h>
#include <linux/kallsyms.h>
MODULE_LICENSE("GPL");
unsigned long (*orig_do_mmap)(struct file *file, unsigned long addr,
unsigned long len, unsigned long prot,
unsigned long flags, vm_flags_t vm_flags,
unsigned long pgoff, unsigned long *populate,
struct list_head *uf);
static int __init hp_km_init(void)
{
orig_do_mmap = (void*)kallsyms_lookup_name("do_mmap");
if (orig_do_mmap == NULL)
return -EINVAL;
orig_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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.