Linux Drivers and the Kernel
Linux systems live in a world that could potentially include any of tens of thousands of different pieces of computer hardware. The kernel must adapt to whatever hardware is present in the machine on which it's running.
A kernel can learn about the system's hardware in a variety of ways. The most basic is for you to provide the kernel with explicit information about the hardware it should expect to find (or pretend not to find, as the case may be). Some kernels can also prospect for devices on their own, either at boot time or dynamically once the system is running.
On the PC platform, where Linux is popular, the challenge of creating an accurate inventory of the system's hardware is particularly difficult (and sometimes impossible). PC hardware has followed an evolutionary path not unlike our own, in which early protozoa have now given rise to everything from dingos to killer bees. This diversity is compounded by the fact that PC manufacturers usually don't give you much technical information about the systems they sell, so you must often take your system apart and visually inspect the pieces to answer questions such as "What chipset does my Ethernet card use?"
Most modern Linux systems survive on a hybrid diet of static and dynamic kernel components, with the mix between the two being dictated primarily by the limitations of PC hardware. It's likely that at some point during your system administration career you'll need to provide a helping hand in the form of building a new kernel configuration.