First, a few details about the setup:

  • Linux-3.14.1
  • ARM am335x chip
  • U-Boot bootloader

What I am trying to achieve:

  1. U-Boot loads a kernel that contains an initramfs (call this kernel 1).
  2. U-Boot executes this kernel.
  3. Kernel 1 loads kernel 2, which contains no embedded initramfs. It uses an NFS root.
  4. Kernel 1 executes kernel 2.

The problem:

Kernel 1 fails to execute kernel 2; this is the last thing I see:

[    8.819174] Starting new kernel [    8.822539] Bye!

Key Points:

  • Kernel 1 and kernel 2 both have the same configuration apart from the initramfs-related settings. They both have kexec enabled.
  • Kernel 1 can kexec another kernel 1, and this can successfully bootloop.
  • Kernel 2 can be booted directly from U-Boot successfully.
  • Kernel 1 and 2 use the same device tree.

Possible Problems:

  • I may have the kernel command line options wrong for the NFS root; however, these were mostly copied from what worked with U-Boot.
  • I think if there were a problem with the root file system, I would see at least something on the console.

Further thoughts:

  • Maybe it is something to do with large difference in kernel sizes (k1=4523344, k2=2859240).

Any help is much appreciated.

1 Answer 1


The problem was that kexec was compiled without zlib, therefore couldn't handle a uImage kernel. A raw 'Image' kernel 2 booted fine.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .