snip original problem.
You used the config file from 2.2.16 to build 2.4.0 ? Not wise. That's no problem, you just have to configure the remainng, new options of 2.4.0.
Order of events for buliding kernel: xconfig make dep make clean make bzImage make modules make modules_install cp /boot/vmlinuz /boot/vmlinuz.2.2.16 #or whatever cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz cp /usr/src/linux/System.map /boot/System.map
Fix lilo etc etc.
So far so good!
It boots fine. However now it can't find most of the modules. I went in and looked and the modules are in a different directory structure than 2.2.16. For example, most of the modules reside in /lib/modules/2.4.0/kernel. You cannot use 2.2.16 modules with 2.4.0 Hide the 2.2.16 modules tree away somewhere.
That's not needed. The right tree of modules will be used.
You can do a "depmod", although that will happen automatically when you boot (at least it does with Suse).
At this point I started creating symlinks all over in there trying to get it to a semi-2.2.16 structure. No need for this. The modules_install will create the directory structure it needs.
My question is this: is this the proper way to do this? Is there something else I should be doing instead of making all these blasted symlinks?
You should have read /usr/src/linux/Documentation/Changes. It clearly states that you need the latest modutils package. version 2.4.0. The URL where you can grab them is in the above mentioned file.