编译linux模块

时间:2015-06-16 21:44:05

标签: linux-kernel

我已经在操作系统课程中完成了作业,我必须编写一些模块。我们使用Red Hat 8.0和自定义的Linux内核2.4.18.14。我有一个用于编译模块的makefile,但是我无法使它工作。模块源代码在snake.c中,makefile是:

KERNELDIR = /usr/src/linux-2.4.18-14custom
include $(KERNELDIR)/.config
CFLAGS = -D__KERNEL__ -DMODULE –I$(KERNELDIR)/include -O -Wall
all: snake.o

文件位于目录/ home / user / OS4中。 当我在该目录中调用make命令时,它会写错误:

cc: cannot specify -o with -c or -S and multiple compilations
你可以帮帮我吗? 如果你能解释模块编译工作的方式,我会很高兴的。 感谢

1 个答案:

答案 0 :(得分:1)

cc -D__KERNEL__ -DMODULE ?I/usr/src/linux-2.4.18-14custom/include -Wall -c -o snake.o snake.c

I信之前注意问号。问题是,而不是正常的ascii hyphen-minus -(ASCII代码:45),你不小心得到了 en dash (Unicode 0x2013 ) - 注意线条稍长一些。

它来自CFLAGS变量:

# CFLAGS = -D__KERNEL__ -DMODULE –I$(KERNELDIR)/include -O -Wall
                                 ^^^ This is en dash

用常规连字符 - 替换它,你应该没问题。

(并且由于此参数不以-开头,因此gcc不将其视为选项,而是将其视为额外的源文件,但-c选项不允许传递多个源文件)< / p>