“make”命令没有执行任何操作

“make”命令没有执行任何操作

我是 Ubuntu 新手,正在尝试编译一个小程序。我在文件夹 raw1394 中有一个 Makefile 和 raw1394.c 文件。

当我运行 make 命令时,它应该生成 raw1394.ko 文件,但是当我运行 make 命令时却没有得到任何内容。

我也尝试用 gcc 编译 raw1394.c 文件但它给出了以下错误。

raw1394.c:1:26: fatal error: linux/module.h: No such file or directory
compilation terminated

你能指导我如何解决这个问题吗?

这是我的 Makefie

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

这是我的 raw1394.c 文件

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

int init_module(void)
{
printk(KERN_INFO "Loaded dummy raw1394 module\n");
return 0;
}

答案1

源文件名为basic.c

#include <linux/init.h>
#include <linux/module.h>
/*MODULE_LICENSE("Dual BSD/GPL");*/
static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);

为 ubuntu 制作文件

首先在你的终端上输入,然后uname -r你将获得在你的系统上使用的版本。

obj-m +=basic.o

KDIR =/usr/src/linux-headers-3.13.0-44-generic

all:
 $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
 rm -rf *.o *.ko *.mod.* *.symvers *.order

运行代码

$make
$ sudo insmode basic.ko
$ dmesg
u will get the output
$ sudo rmmod basic.ko
$ dmesg

答案2

很有可能你缺少内核的 Linux 头文件(程序第一行中包含的 .h 文件)。这些文件对于每个内核版本都不同,但都方便地打包在存储库中。尝试按以下方式安装:

sudo apt-get install linux-headers-$(uname -r)

请注意,您的内核版本正在通过uname -r命令传递。

答案3

GCC 给出错误,因为它找不到您包含的头文件。您应该:

  1. 检查路径是否不在raw1394.c文件夹中,因为然后您需要使用引号代替<>:所以#include "linux/module.h"(如果您不想使用自己的内核的头文件,可能会出现这种情况)
  2. linux检查编译器路径中是否有以头文件命名的文件。您可能缺少 Linux 头文件。

其次,makefile 用于自动化编译过程(因为这通常涉及多个指令和/或针对不同目标的不同指令)。但您仍然需要在 makefile 中使用正确的 gcc 命令。因此,您的(基本)makefile 应如下所示(可以向其中添加许多扩展和灵活性,如果您想这样做,请阅读有关 makefile 的更多信息):

CC=gcc
CFLAGS=-Wall -c

raw: raw1394.c
TAB $(CC) $(CFLAGS) raw1394/raw1394.c

all:
clean:
TAB rm -rf raw1394/*.o

请注意,Makefile 中使用了特定意图。因此,我在代码中将 TAB 放在了应该有制表符的位置(多个空格不起作用)。

在命令行中输入make raw正确的目录将自动执行 Makefile 中的 target raw。

相关内容