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.


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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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