【问题标题】:U-boot tftp ramdisk Bad Trap when loading larger rootfs加载较大的 rootfs 时 U-boot tftp ramdisk Bad Trap
【发布时间】:2020-04-23 18:17:10
【问题描述】:

我正在使用 39.8 MB 的 u-boot ramdisk 映像在我的板上启动内核。它启动成功。当我尝试另一个 74.7 MB 大小的 u-boot 映像时,加载 ramdisk 的加载地址及其提供

'Loading Ramdisk to ff8c0000, end 03fffd63... Bad Trap at PC:7fef8cb0'

并且板挂起'###ERROR ### Please RESET the board ###'

我用于通过 tftp 启动的命令:

tftp 30000000 uImage.bin
tftp 32000000 DTB.dtb
tftp 40000000 rootfs.ext2.gz.u-boot
bootm 30000000 40000000 32000000

我还尝试了不同的 tftp 地址。 场景保持不变。

我该如何解决这种情况?

编辑:完整的控制台日志:

=> bootm 30000000 40000000 32000000 警告:将可用内存调整为 30000000

在 30000000 处从 Legacy Image 引导内核 ...

镜像名称:Linux-4.19.26+gc0c2141

映像类型:PowerPC Linux 内核映像(gzip 压缩)

数据大小:7140198 字节 = 6.8 MiB

加载地址:00000000

入口点:00000000

验证校验和...OK

从 40000000 的旧映像加载 init Ramdisk ...

镜像名称:core-image-x11-t1042d4rdb-64b-20

映像类型:PowerPC Linux RAMDisk 映像(未压缩)

数据大小:74710371 字节 = 71.2 MiB

加载地址:00000000

入口点:00000000

验证校验和...OK

32000000 处的扁平化设备树 blob

使用 0x32000000 处的 fdt blob 引导

正在解压缩内核映像...确定

将 Ramdisk 加载到 ff8c0000,结束 03fffd63 ... PC 上的错误陷阱: 7fef8cb0,SR:0

NIP:7FEF8CB0 XER:20000000 LR:7FF16C60 REGS:7faedae0 TRAP:0d00 DAR:FFFFEFFC

MSR:00021200 EE:0 PR:0 FP:0 ME:1 IR/DR:00

GPR00: 00000003 7FAEDBD0 7FAEDE98 FF8C0000 4073F038 0473FD60 FFFFF000 5E2AE23B GPR08:DE633873 00000020 00000001 7FAEDBE0 7FFCB808 08200800 7FAF52E8 00000000 GPR16:00000000 00000000 306CF3A6 30000000 00000001 30000040 00000000 7FF957A8 GPR24:7FAF533C 7FFCB6FC 7FFCB718 40000040 04000000 7FFCB6F8 7FF78540 0473FD63 调用回溯:7FFCB6F8 7FF176CC 7FF0D9D4 7FEFA26C 7FF1B088 7FF0BC44 7FF0BE08 7FF0C3B8 7FF1A664 7FF09CDC 7FF0CCC4 7FF4FF3C 7FF0D1D0 7FEF1040 内核 pc 中的异常 7fef8cb0 信号 0

错误###请重置板###

【问题讨论】:

  • 您在 filesys 挂载中看到问题了吗?内核加载成功? Ramdisk执行地址为ff8c0000。这个地址是自己配置的吗?此地址可能会溢出 74.7 MB 的文件系统。
  • 当 filesys 安装在 RAM 上时,我遇到了这个问题。内核加载成功,但在下一步中会发生此错误。 ff8c0000 是自动给出的。是的,可能这就是原因,但我不明白为什么。 39.8 filesys 位于不同的位置。 74.7 位于 ff8c0000。扩大这个内存区域或者改变ff8c0000的方法是什么?
  • 你能改变内核启动参数 "ramdisk_size=" (单位 KB)
  • 将 ramdisk_size 增加到 74.7 MB 以上。
  • “ramdisk_size”变量的位置在哪里?根据我的演示板文档。 nor flash 中的 rootfs 是 43 MB,也许他们将此变量设置为 64MB,最大值。也许将其增加到 128MB 可行。

标签: embedded-linux bootloader u-boot ramdisk


【解决方案1】:

您正在 0x30000000 处加载内核映像。之后,您将在 0x30000000 处加载设备树。

0x32000000 - 0x30000000 = 0x2000000 = 33554432

因此,在加载设备树时,您将覆盖内核映像。

如果不使用 0x3f000000 和 0x40000000 之间的区域,则为设备树选择 0x3f000000 应该可以解决您的问题。

【讨论】:

  • 嗯,但是当我使用 ~39MB rootfs 尝试此设置时,它会成功启动。这有什么意义。
  • 很明显,在 39 MB 中,您还覆盖了内核映像的一部分。如果不使用修改后的代码,您可能不会立即观察到错误。改地址能解决你原来的问题吗?
  • 你好,不,它还没有改变原来的问题。在地址 ff8c0000 和 03fffd63 之间,ff8c0000-03fffd63 不是大于~79MB 的区域。我仍然不明白为什么会出现错误陷阱。
【解决方案2】:

到目前为止我所理解的是,

中的地址

'PC 上的错误陷阱:7fef8cb0'

7fef8cb0 几乎等于 1,998995945 GB,Ramdisk 的起始地址似乎是 ff8c0000,几乎等于 3,992919922 GB。

为什么 U-boot 为大约 70 MB 的 ramdisk 映像安排了这么多内存?

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2020-03-30
    • 2020-01-30
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多