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.