首先,有关设置的一些细节:
- Linux-3.14.1
- ARM am335x芯片
- U-Boot 引导加载程序
我想要实现的目标:
- U-Boot 加载包含 initramfs 的内核(将此内核称为 1)。
- U-Boot 执行该内核。
- 内核 1 加载内核 2,内核 2 不包含嵌入式 initramfs。它使用 NFS 根。
- 内核 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 启动良好。