在没有 initramfs (ARM) 的情况下启动内核时 kexec 崩溃

在没有 initramfs (ARM) 的情况下启动内核时 kexec 崩溃

首先,有关设置的一些细节:

  • Linux-3.14.1
  • ARM am335x芯片
  • U-Boot 引导加载程序

我想要实现的目标:

  1. U-Boot 加载包含 initramfs 的内核(将此内核称为 1)。
  2. U-Boot 执行该内核。
  3. 内核 1 加载内核 2,内核 2 不包含嵌入式 initramfs。它使用 NFS 根。
  4. 内核 1 执行内核 2。

问题:

内核1无法执行内核2;这是我看到的最后一件事:

[    8.819174] Starting new kernel [    8.822539] Bye!

关键点:

  • 除了 initramfs 相关设置之外,内核 1 和内核 2 都具有相同的配置。他们都启用了 kexec。
  • 内核 1 可以 kexec 另一个内核 1,这样就可以成功引导循环。
  • 内核2可以直接从U-Boot成功启动。
  • 内核 1 和 2 使用相同的设备树。

可能出现的问题:

  • 我的 NFS 根目录的内核命令行选项可能错误;然而,这些大多是从 U-Boot 的工作中复制而来的。
  • 我认为如果根文件系统有问题,我至少会在控制台上看到一些东西。

进一步的想法:

  • 也许这与内核大小的巨大差异有关(k1=4523344,k2=2859240)。

任何帮助深表感谢。

答案1

问题是 kexec 是在没有 zlib 的情况下编译的,因此无法处理 uImage 内核。原始“Image”内核 2 启动良好。

相关内容