LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Distributions (http://www.linuxquestions.org/questions/linux-distributions-5/)
-   -   'Invalid module format' loading simple module on Suse Linux Professional 9.1 (http://www.linuxquestions.org/questions/linux-distributions-5/invalid-module-format-loading-simple-module-on-suse-linux-professional-9-1-a-210167/)

rocketdude 07-27-2004 07:56 AM

'Invalid module format' loading simple module on Suse Linux Professional 9.1
 
--- I actually have 2 issues ---

1) Whenever I try to load a simple module on Suse Linux Professional 9.1 I get the following message:

insmod: error inserting 'mydev.o': -1 Invalid module format

2) In my source why do I have to have CONFIG_M486 defined? With my RedHat installation at the office I do not have to do this.

Thanks,

Rocket

Below is the source for the simple module followed by the gcc command line:

#include <linux/kernel.h>
#define CONFIG_M486
#include <linux/module.h>
int init_module()
{
/* code to init the module */
return 0;
}
void cleanup_module()
{
/* code to close the module */
}

gcc -D__KERNEL__ -DMODULE -c mydev.c

Vlad-A 07-27-2004 10:25 AM

The error message indicates that your module was not build properly.
The compiler call like you have given it, is the one used for 2.4.x kernels.

With the 2.6.x kernels (SuSE 9.1 has an 2.6.x kernel) things are a little bit different, although easier.

The kernel modules with 2.6.x have a .ko (Kernel Object) ending, and
not .o .

First of all you shall add the Licence Macro to your module source.

MODULE_LICENSE("GPL");


Otherwise you will get a error message when loading the module, telling that the
module is tainted.

You *need* to have write access to the kernel source tree. So compile as root.

cd into the directory with the module source

Create a Makefile

with following entry:

obj-m := mydev.o

e.g.
cat "obj-m := mydev.o" > Makefile

then compile the module with

make -C /lib/modules/$(uname -r)/build SUBDIRS=$PWD modules

After that you can try to load the module with
insmod mydev.ko

Check with lsmod if the module is loaded.

Wirth
modprobe -r mydev
you can remove the module.

rocketdude 07-27-2004 09:46 PM

Hi Vlad,

You're my hero! Thanks!

I searched a couple of days for this answer before posting. Can you point me to where this is documented?

Regards,

Rocket

Vlad-A 07-28-2004 12:40 AM

Hi,
the kernel build system documentation shall be a good start
http://lxr.linux.no/source/Documenta...build/?v=2.6.0

Check also:
http://lwn.net/Articles/driver-porting/
http://lwn.net/Articles/21823/


All times are GMT -5. The time now is 12:34 PM.