用于Linux内核模块的Makefile问题

凯基

我正在编写一个内核模块,它将作为我中文Arduino的驱动程序。

我已经阅读了许多有关它的指南,并且其中的Makefile是完全不同的。其中一些只是无法正常工作。我想了解如何以及为什么:)

例如,我有一个简单的初学者代码:

    #define MODULE
    #define __KERNEL__

    #include <module.h> // определения для модуля 
    #include <init.h> // module_init и module_exit
    #include <kernel.h> // printk

    MODULE_AUTHOR("...");
    MODULE_DESCRIPTION("Test module for linux kernel");

    int module_start() 
    {
        printk("This is a test module startup message\n");
        return 0;
    }

    void module_stop()
    {
        printk("Module is dead\n");
        return;
    }

    module_init(module_start);
    module_exit(module_stop);

我也有一个可以在手册中找到的Makefile:

    CC=gcc
    MODFLAGS:= -O2 -Wall -DLINUX
    module.o: module.c
    $(CC) $(MODFLAGS) -c module.c

因此,据我所知,我的系统使用.ko文件作为模块。这是第一个问题。第二个问题是该makefile文件不起作用。

当我制作时,出现错误“ missing module.h”。但是我当然安装了标题。他们在/usr/src/linux-headers-(3.2.0-4-686-pae)/usr/src/linux-headers-(3.2.0-4-common)* pae目录中没有module.h,但它位于* common目录中(大多数文件都在其中)。因此,我既无法使用gcc也无法使用makefile对其进行编译。

谢谢你的回答。

努德·拉森(Knud Larsen)

模块构建的“标准Makefile”是:

obj-m    := hello-1.o

KDIR    := /lib/modules/$(shell uname -r)/build
PWD    := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
    rm -rf *.o *.ko *.mod.* *.symvers *.order

(从hello-1.c创建hello-1.ko)

唯一使用的标头是/ lib / modules / uname -r/ build / include /中的标头

而且没有“ module.h´”:请输入#include <linux/module.h>(或asm / module.h)。


本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章