i8kutils (fan temp control for Dell inspiron laptops) is included in 2.6 kernels, but the modules would not install for me. I always got an "invalid module format" message when trying to (force) install the module.
After 2 months of occasional messing around with this problem, I finally got it working. There were about 4 different problems with getting it working under Kernel 2.6.8 on Fedora Core 2. Here is my rather jaded 2 am synopsis of my solution procedure.
Getting the i8kutils to work on Kernel 2.6.8-1.521 on an inspiron 8600
--------------------------------------------------------------------------------------------------
(1) i8kutils was included in the kernel. Compiling it as a module or directly into
the kernel didn't work, giving the error;
insmod: error inserting 'i8k.o': -1 Invalid module format
So I Downloaded the source code and had to create the symbolic links /usr/src/linux and
/usr/src/linux-2.6 to point to the current source directory (newer RH Kernels don't do this anymore, I guess). I could have just changed the /usr/src/linux variable in the Makefile but I think some module stuff also needs these links. Then I
ran 'make' and 'make install'.
(2) Then make module was complaining about some crap;
---begin some crap---
/usr/src/linux/include/asm/system.h: In function `__set_64bit_var':
/usr/src/linux/include/asm/system.h:193: warning: dereferencing type-punned pointer
will break strict-aliasing rules
/usr/src/linux/include/asm/system.h:193: warning: dereferencing type-punned pointer
will break strict-aliasing rules
i8k.c:884:2: warning: #warning "compiling unversioned module, load with insmod --force"
strip --strip-unneeded \
---end some crap---
I googled the error message, found out that optimization -O2 was the problem, and changed this to -O in the Makefile. The aliasing error went away and the complaint about
SET_MODULE_OWNER remained.
(3) SET_MODULE_OWNER appears to have been deprecated (see
http://lwn.net/Articles/27756/), so I tried to use patch but couldn't figure it out,
and I just added the line
#define SET_MODULE_OWNER(dev) ((dev)->owner = THIS_MODULE)
after the line containing 'symbol_request', to /usr/src/linux/include/linux/module.h
and this problem went away.
(4) Then the module format was the old i8k.o and we need it to be the current i8k.ko
(see
http://lwn.net/Articles/21823/) , so move Makefile to Makefile2 since we are done
with it and can always use 'make -f Makefile2' to use it again, and create a new
Makefile containing the line;
obj-m := i8k.o
and type
make -C /path/to/source SUBDIRS=$PWD modules
then
insmod i8k.ko
And freakin' voila, a 2 month long nagging problem solved that the author probably
could have solved in about 2 seconds if he had the time to look at my (invited)
email. He's probably way to deluged by a flood of similar emails, though.