Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

While studying about booting an Android on a board, I have learnt that MLO (X-loader), U-Boot and uImage are necessary to boot the Android on the board.

But I wondered that when I have come to know about that, the IMX53quickstart Board does not need MLO to boot an Android on it.

  1. How can it possible? How can the board boot without MLO?
  2. Does this board have any special feature? What is that?
  3. If so, why another board couldn't have this feature?
  4. Can we implement this feature on all board?
share|improve this question
up vote 2 down vote accepted

What a system "needs" to boot is executable code at a specific memory address.

If you put the kernel at the right spot it will boot (and that's how we did it in the old days—without boot loaders). These days we put a boot loader there. A boot loader is just executable code that's a little smarter than the hardware (but not by much) about where to find other executable code.

To explain it in very simple terms, at power on the hardware will begin execution of a program in the firmware. This varies by hardware, but on PC's it used to be BIOS. Today it might be EFI. That program, whatever it is knows how to look on the block device(s) at specific addresses. The block(s) found there get loaded into RAM and then executed. The hardware is very unintelligent about what that might be, so there really isn't any requirement that it be a particular thing, except that it is proper machine code for the processor*.

In your case, the only thing required to boot is uImage (the Kernel image). U-Boot is simply a way to find uImage. MLO is presumably just a way to find U-Boot. In theory, if you placed uImage in the right blocks it would boot directly.

* Incidentally, bricking is when whatever happens to be in those blocks is not properly executable by the processor.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.