如何编译linux内核模块?

时间:2015-08-11 16:40:21

标签: linux-kernel kernel-module

我需要生成oops linux内核错误。我正在使用linux-3.13.3并在qemu上启动它。我发现以下代码会导致oops错误:

#include <linux/module.h>
#include <linux/kernel.h>

static int crash_module_init(void)

{
     printk(KERN_INFO "crash module starting\n");
     int *p = 0;

     printk("%d\n", *p);

     return 0;
}

static void crash_module_exit(void)
{
    printk(KERN_INFO "crash module exiting\n");
}

module_init(crash_module_init);
module_exit(crash_module_exit);

我使用了以下Makefile:

obj-m = hello.o
KVERSION = $(shell uname -r)
all:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

不幸的是,在qemu上没有/lib/modules/3.13.3/build这样的目录。只有/lib/modules/3.2.0-4-686-pae并且在某些目录中(但没有构建)。即使我试图将其中一个现有目录放在那里:“没有规则来制作目标modules”。

有人可以告诉我如何编译这个模块吗?或者也许有人有另一个想法如何生成oops错误?我会很感激。

1 个答案:

答案 0 :(得分:0)

我可以查看此answer应该可以帮助您解决制作问题

查看sysrq以生成oops。通常用于碰撞系统,当它似乎在活锁中,但无论如何都可能崩溃。我不确定它是否适用于Qemu。