I have been trying to get a external module to load into a 2.6.x kernel...and I have a few questions.

I am using the kernel build system to make my module. I have the following snippet in my make file

*****
ifneq ($(KERNELRELEASE),)
obj-m := optopci.o
module-objs := optotrak.o amcc.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
endif
*****

Question:
Does this mechanism make use of targets listed below. For example, I am getting this error:

<No rule to make optopci.c >

However, my target below this has a rule for optopci.o

optopci.o: optopci.o optotrak.o amcc.o
ld -r -o optopci.o optotrak.o amcc.o
test -c /dev/optopci || mknod -m 666 /dev/optopci c 232 0

I dont need an optopci.c. Is what I'm seeing the default behaviour of the new build mechanism. Can I override that without editing the source tree makefile.

Problem #2.
If I futz around, for testing purposes only and rename files, I can get *.ko to build with this mechanism. However, when I go to insmod my module I get an error:

insmod: error inserting <module.ko>: unknown symbols in module:

Does this have something to do with the fact that I do not use EXPORT_SYMBOL() at all in my code.

Do I need to use EXPORT_SYMBOL() in both source files. Do I need to use it at all. I have downloaded a couple of essays on external module building, however, none give details on how this macro/function(?) is to be used.

Any help would be appreciated,
dklaming