2013-05-24 6 views
0

Я установил XenServer 6.0.0 и DDK, и я хочу разработать модуль ядра, поэтому я кодирую базовую программу kprobes. Он работает нормально на обычном Linux, например redhat, и выводит «Before sys_ioctl», но на XenServer он просто выводит «Модуль ядра Hypercall FI: init» и не может выводить «Before sys_ioctl».XenServer с DDK не поддерживает Kprobes?

Итак, в чем причина? XenServer не поддерживает Kprobes или у моей программы есть ошибки?

Вот мой простой код. kp.addr отличается от cat /proc/kallsyms | grep sys_ioctl, и я пробовал do_fork, вопрос также существует.

#include <linux/kprobes.h> 
#include <linux/kallsyms.h> 
#include <linux/module.h> 

static struct kprobe kp; 

int handler_pre_target(struct kprobe *p, struct pt_regs *regs) 
{ 
    printk("Before sys_ioctl\n"); 
    return 0; 
} 

static int __init myinit(void) 
{ 
    kp.addr = (kprobe_opcode_t *) 0xc048498d; 
    kp.pre_handler = handler_pre_target; 
    register_kprobe(&kp); 
    printk("Hypercall FI kernel module: init\n"); 
    return 0; 
} 

static void __exit myexit(void) 
{ 
    unregister_kprobe(&kp); 
    printk("Hypercall FI kernel module: exit\n"); 
} 

module_init(myinit); 
module_exit(myexit); 
MODULE_LICENSE("GPL"); 
MODULE_AUTHOR("fg"); 
MODULE_DESCRIPTION("Hypercall test"); 
+0

Вероятно, у вас нет поддержки kprobe на вашем сервере Xen. Вы можете проверить его из/sys/kernel/debug/kprobes/enable. –

+0

@rakib Спасибо, но нет файла с именем 'kprobes' в'/sys/kernel/debug', независимо от XenServer или обычного Linux, такого как RHEL 6.x. –

ответ

0

И наконец, я решил эту проблему. Я использовал XenServer 6.1 и 6.1.0 ddk, и все в порядке.

ядро ​​версии: 2.6.32.43-0.4.1.xs1.6.10.741.170752xen

Я подозреваю, что это была ошибка, которая не может использовать Kprobes в XenServer 6.0.