3

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

2

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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.