Makefile 尝试为linux设备驱动程序构建教程
我正在努力学习如何在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中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
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