Before discussing the details of building kernel modules, we first need to have a basic understanding of what a kernel module is and why they are used. Loadable Kernel Modules are pieces of code, not normally present in the Linux kernel, which are only loaded when needed by a device. This has some distinct advantages. The first one is, you do not waste your memory for a device that is not used. Second, you do not need to recompile your kernel when you add and remove devices from your system (assume that you have a BlackBerry and you then buy a -say- Nokia and you still reserve memory for a BlackBerry that you no longer own and use). Third, your kernel size is kept to a minimum improving boot time. Fourth, modules are easy to maintain giving you the opportunity to update your device drivers frequently without touching your base kernel. Fifth, you can diagnose problems easily by removing the latest kernel module if you suspect it to be buggy.
A loadable kernel module does not mean that it is a user-space program. Once it is loaded into memory, it acts as a part of the kernel. This is a point where most users tend to think the modules as user-space programs. They are not.
Before attempting to install any kernel module, make sure that kernel sources are installed. In Fedora, you can do that by issuing yum update first (to install the latest updates) and then yum install kernel-devel.