【发布时间】:2014-06-27 17:49:07
【问题描述】:
我正在尝试从 KVM 调用两个导出的(可能)内核函数 - kvm_write_guest 和 kvm_get_segment,但是当我编译将调用这两个函数的内核驱动程序时,我收到一条警告说它们未定义。
WARNING: "kvm_write_guest" [/home/driver.ko] undefined!
WARNING: "kvm_get_segment" [/home/driver.ko] undefined!
当我执行命令时:
cat /proc/kallsyms | grep kvm_get_segment
cat /proc/kallsyms | grep kvm_write_guest
要检查它们是否已导出,我得到以下信息:
0000000000000000 t kvm_write_guest [kvm]
0000000000000000 t kvm_get_segment [kvm]
以下是我在调用这些函数的 .c 文件中包含的头文件中的协议和包含的内容。我从 kvm_main.c 代码中提取了原型。
#include <linux/kvm.h>
#include <linux/kvm_types.h>
#include <linux/kvm_host.h>
int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data, unsigned long len);
void kvm_get_segment(struct kvm_vcpu *vcpu, struct kvm_segment *var, int seg);
当我深入研究 kvm_write_guest 的 kvm_main.c 源代码时,它们似乎没有使用以下代码导出:
EXPORT_SYMBOL_GPL(kvm_write_guest);
当我深入研究 kvm_get_segment 的 x86.c 代码时,它也没有使用该方法导出。看起来它们实际上并没有被导出,但我想确保我没有做错什么。如果可以的话,我想避免修补代码并重新编译。提前感谢您的任何帮助,非常感谢!
【问题讨论】:
标签: c linux linux-kernel kvm