Makefile 尝试为linux设备驱动程序构建教程

Makefile 尝试为linux设备驱动程序构建教程,makefile,kernel,linux-device-driver,Makefile,Kernel,Linux Device Driver,我正在努力学习如何在linux上编写设备驱动程序。我看了几本在线教程。它们很简单,但我在编译时遇到了问题。我在底部发现了一个makefile错误。我没有对linux-header-2.6.32-27-generic做过任何修改。它处于已安装的状态。它可能有一些依赖性,但我不知道是哪一个。我不知道make在期待什么。 我将感谢任何帮助 这是我的系统信息。 Linux rat desktop 2.6.32-27-generic#49 Ubuntu SMP周三12月1日23:52:12 UTC 201

我正在努力学习如何在linux上编写设备驱动程序。我看了几本在线教程。它们很简单,但我在编译时遇到了问题。我在底部发现了一个makefile错误。我没有对linux-header-2.6.32-27-generic做过任何修改。它处于已安装的状态。它可能有一些依赖性,但我不知道是哪一个。我不知道make在期待什么。 我将感谢任何帮助

这是我的系统信息。 Linux rat desktop 2.6.32-27-generic#49 Ubuntu SMP周三12月1日23:52:12 UTC 2010 i686 GNU/Linux

include文件位于/usr/src/linux-headers-2.6.32-27-generic中

rat@rat-desktop:/usr/src/linux-headers-2.6.32-27-generic$ ls
   arch           firmware  Kbuild    modules.order   security  usr
   block          fs        kernel    Module.symvers  sound     virt
   crypto         include   lib       net             source
   Documentation  init      Makefile  samples         tools
   drivers        ipc       mm        scripts         ubuntu


nothing.c
    #include <linux/init.h>
    #include <linux/module.h>

    MODULE_LICENSE("Dual BSD/GPL");

    static int __init hello_init(void)
    {
            printk(KERN_ALERT "Hello,world tapas\n");
            return 0;
    }
    static void __exit hello_exit(void)
    {
            printk(KERN_ALERT "Good Bye,cruel world\n");
    }

    module_init(hello_init);
    module_exit(hello_exit);

Makefile
obj-m := nothing.o

KDIR =  /usr/src/linux-headers-2.6.32-27-generic

all:
        $(MAKE) make -C $(KDIR) M=pwd modules

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


sudo make
make make -C /usr/src/linux-headers-2.6.32-27-generic M=pwd modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-27-generic'
make[1]: *** No rule to make target `make'.  Stop.
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-27-generic'
make: *** [all] Error 2

在第一个Makefile中,观察运行
sudo make
时在输出中执行的
make
命令(通常不需要sudo来构建模块):

make-make-C/usr/src/linux-headers-2.6.32-27-generic M=pwd模块

在这种情况下,
make
正在搜索名为“make”的目标!从Makefile中删除
$(MAKE)
,然后重试。而且
M=pwd
选项不正确

在第二种情况下,未定义
PWD
变量。您可以在Makefile中对其进行如下定义:
PWD:=$(外壳PWD)

obj-m += nothing.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

rat@rat-desktop:~/deviceDrivers$ sudo make
make -C /lib/modules/2.6.32-27-generic/build M= modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-27-generic'
  CHK     include/linux/version.h
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-x86
make[2]: *** No rule to make target `kernel/bounds.c', needed by `kernel/bounds.s'.  Stop.
make[1]: *** [prepare0] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-27-generic'
make: *** [all] Error 2