Well, I found an answer to this, although i do not (yet) fully understand what is going on. It makes me feel a bit stupid owning up to this, but I see from a google search that there are others with the same problem, who have not yet received an answer.
First thing to say is that if you take the standard example code and example makefile as shown in Ori Pomerantz's lkmpg document, and try that against a linux box running a 2.2.19 kernel and the 2.2.19 source tree on the slackware 8.0 distrib, IT WORKS. It whinges a bit with warnings out of gcc 2.95.3 but it does work. Do the same against a 2.4.5 kernel and source and it ALSO works, this time without whingeing. So IMHO it HAD to be something in the gcc flags for the makefile.
I went back to basics on a 2.4.18 system, rebuilt a kernel for the sheer hell of it and captured the output at the "make modules" stage. "make modules > my_logfile 2>&1" did the trick
I then took a HARD look at how the makefile made the dummy.o module in /usr/src/linux/drivers/net. This dummy module was, I reckoned, a good candidate for scrutiny as it is not much more than a skeleton driver. From the make modules logfile, I saw the command line to gcc was huge compared to the one used in the lkmpg demo.
I cut and pasted every gcc flag into the lkmpg demo makefile and once I had done so, the hello, world module compiled !!!!
The makefile I used now looks like this
#Makefile for Ori Pomerantz lkmpg, 2.4.18 kernel version
#Author: John Voisey. Use at Own Risk !!!
MODCFLAGS := -D__KERNEL__ \
-I/usr/src/linux-2.4.18/include -Wall \
-Wstrict-prototypes -Wno-trigraphs -O2 \
-fomit-frame-pointer -fno-strict-aliasing \
-fno-common -pipe -mpreferred-stack-boundary=2 \
-march=k6 -DMODULE -DMODVERSIONS \
-include /usr/src/linux-2.4.18/include/linux/modversions.h -DKBUILD_BASENAME=hello
hello.o: hello.c /usr/include/linux/version.h
$(CC) $(MODCFLAGS) -c hello.c
echo insmod hello.o to turn it on
echo rmmod hello to turn it off
I hope this helps anyone in the same predicament as me !!