2

我写了一个简单的 linux 模块和它的 make 文件

这是我的模块

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

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) {
  printk("<1> Hello world!\n");
  return 0;
}

static void hello_exit(void) {
  printk("<1> Bye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

这是我的制作文件

    obj-m :=Hello.o


KDIR = /usr/src/linux-headers-3.5.0-17

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

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

当我执行 make -f MakeFile 它给出以下 o/p

make -C /usr/src/linux-headers-3.5.0-17 SUBDIRS=/home/linux/Desktop modules
make[1]: Entering directory `/usr/src/linux-headers-3.5.0-17'

  WARNING: Symbol version dump /usr/src/linux-headers-3.5.0-17/Module.symvers
           is missing; modules will have no dependencies and modversions.

scripts/Makefile.build:44: /home/linux/Desktop/Makefile: No such file or directory
make[2]: *** No rule to make target `/home/linux/Desktop/Makefile'.  Stop.
make[1]: *** [_module_/home/linux/Desktop] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.5.0-17'
make: *** [all] Error 2

谁能告诉我如何摆脱这些错误。提前致谢

4

2 回答 2

2

在您的 Makefile 中进行以下更改

首先通过输入 uname -a 检查哪个内核正在运行

然后去 cd /usr/src/

然后检查你的 linux 源代码名称

例如

uname -a Linux vinay-VirtualBox 3.2.0-50-generic-pae #76-Ubuntu SMP Tue Jul 9 19:24:55 UTC 2013 i686 i686 i386 GNU/Linux

这里它的源代码名称是 linux-headers-3.2.0-50-generic-pae 在你的情况下是一样的,例如

linux-headers-3.2.0-23 linux-headers-3.2.0-23-generic-pae 所以使用linux-headers-3.2.0-23-generic-pae代替 linux-headers-3.2.0-23 即在你的makefile中替换相同

即KDIR=/usr/src/linux-headers-3.5.0-17-generic-pae

或为了避免上述问题使用
KDIR == /lib/modules/$(shell uname -r)/build

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

$(MAKE) -C $(KDIR) M=$(PWD) modules
于 2013-10-13T17:01:43.323 回答
0
obj-m += xyz.o

KDIR:=/usr/src/linux-headers-3.5.0-46-generic

all:

       make -C $(KDIR) M=$(PWD) modules

clean:

       make -C $(KDIR) M=$(PWD) clean

你确定/usr/src/包含 linux-headers-3.5.0-46-generic 文件吗?如果不是这种情况,请下载:

sudo apt-get install linux-headers-3.5.0-46

sudo apt-get install linux-headers-3.5.0-46-generic
于 2014-03-07T06:19:22.700 回答