user11528353
user11528353

Reputation:

Ubuntu compiling kernel module first time

I'm trying to compile a simple kernel module for the first time:

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

int init_nodule(void)
{
        printk(KERN_INFO "Hello world1.\n");
        return 0;
}
void cleanup_module(void)
{
        printk(KERN_INFO "Goodbye\n");
}

I've used obj-m += hello-1.o (that's the name of the module) but i'm getting an error:

obj−m: command not found

Why is this happening? I tried looking online for a solution, but nothing I found helped..

EDIT: After modifying based on @Mathieu answer , I get the following error :

> make -C /lib/modules/4.18.0-15-generic/build M=/home/galco modules
make[1]: Entering directory '/usr/src/linux-headers-4.18.0-15-generic'
Makefile:970: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel"
scripts/Makefile.build:45: /home/galco/Makefile: No such file or directory
make[2]: *** No rule to make target '/home/galco/Makefile'.  Stop.
Makefile:1534: recipe for target '_module_/home/galco' failed
make[1]: *** [_module_/home/galco] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.18.0-15-generic'
makefile:4: recipe for target 'all' failed
make: *** [all] Error 2

Upvotes: 1

Views: 981

Answers (1)

Mathieu
Mathieu

Reputation: 9689

The line obj-m += hello-1.o must be put in a file named Makefile

So it will looks like:

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

To launch the build process, just execute make from your command line.

More resource: https://qnaplus.com/how-to-compile-linux-kernel-module/

Upvotes: 1

Related Questions