【发布时间】:2019-03-23 19:51:46
【问题描述】:
我想在内核模块中使用 do_mmap()。根据this question,这应该是可能的。
这是一个最小的非工作示例:
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
运行 make 导致 WARNING: "do_mmap" [...] undefined!
我需要在 hp_km.c 或 Makefile 中进行哪些更改才能完成这项工作?
【问题讨论】:
-
我认为你必须先导出符号。您可以通过在函数定义下方的 mmap.c 文件中添加
EXPORT_SYMBOL(do_mmap);来做到这一点,然后重新编译内核。您可以使用通过EXPORT_SYMBOL导出的任何函数,但请注意do_mmap尚未导出。
标签: c linux linux-kernel kernel-module