Crumblez
Crumblez

Reputation: 97

GCC Kernel Module Compilation Errors

I'm working on a netfilter and compiling it on a virtual machine.

matt@ubuntu:~$ make
gcc -c -O2 -W -isystem /lib/modules/4.4.0-87-generic/build/include -D__KERNEL__ -DMODULE test10.c -I. 
In file included from /usr/src/linux-headers-4.4.0-87/include/linux/kernel.h:6:0,
                 from structs1.h:2,
                 from test10.c:1:
/usr/src/linux-headers-4.4.0-87/include/linux/linkage.h:7:25: fatal error: asm/linkage.h: No such file or directory
compilation terminated.
makefile:2: recipe for target 'test' failed
make: *** [test] Error 1

Above is my GCC command used to attempt to build my kernel module and the subsequent error that it throws.

In researching this, I have found one possible solution that involves specifiying the kernel version as such:

KERNEL_VER=/usr/src/linux-headers-4.4.0-87/arch/x86/

But two problems:

  1. I'm not sure how to actually use this in my make file which can be seen below, outside of just making a symbolic link, and

  2. I looked in this folder (/usr/src/linux-headers-4.4.0-87/arch/x86/) and sub folders and it doesn't have any of the same kernel.h files -- which is what I need.

Makefile:

test:
        gcc -c -O2 -W -isystem /lib/modules/4.4.0-87-generic/build/include -D__KERNEL__ -DMODULE test10.c -I.

Any help on this would be greatly appreciated.

Upvotes: 1

Views: 1680

Answers (1)

Santosh A
Santosh A

Reputation: 5351

The standard Makefile used to build a loadable kernel module is as follows.

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

Refer Compiling a loadable kernel module this for more information.

Upvotes: 1

Related Questions