Question

I would like to compile a simple character device module depending on a custom header. The folder is thus organized,

+ mymod.c
| customized-header.h
| customized-header.c
| Makefile

In mymod.c, the header is thus used,

#include "customized-header.h"

In Makefile:

obj-m := mymod.o
mymod-objs := customized-header.o
KVERSION = $(shell uname -r)
PWD = $(shell pwd)
all:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

Everything should work fine, the module gets compiled without problem, I can load the module through sudo insmod, but the module doesn't work properly. When I checked nm mymod.ko, there are a lot of vars and functions are missing. It looks as if it stopped after linking customized_header.o. If I remove this header and its function, say no header function calls from the module, it compiles perfectly with desired result.

Could you see what went wrong here?

Était-ce utile?

La solution

The problem resides in the Makefile. Due to the link here, I changed it into

obj-m: mymodko.o
mymodko-obj: customized-header.o mymod.o

It now works fine. So the question was the naming of module object. We need to specify different names as in this case mymodko.o and mymod.o.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top