Porting Linux to a new hardware platform involves many many steps, among them, the characterization of the hardware so that the kernel will know what resources are available to it for things like MMU management, cache management, memory management and device management. Typically, most Linux kernels implement their own probing algorithms to determine which IO devices are available to it (serial ports, graphics adapters, network adapters etc.) but the MMU, cache and memory information is usually hard coded. This makes for portability issues that limit the lifetime of a specific kernel built on one version of a hardware platform.

When porting Linux to a new hardware platform, short of using a logic analyzer, it can be very tedious and difficult to determine why a particular kernel image does not behave as expected. There are very few software tools available to help with this situation. BIOS in the x86 world does not provide the developer with the interaction required to debug the very early "low level" startup code.