simon-snowing 2025-11-21 14:53 采纳率: 50%
浏览 3

lzma compressed: uncompress error 1

编译好u-boot(版本2020.07),烧录并成功运行了,tftp传入需要运行的openWrt固件后。
运行报:

Uncompressing Kernel Image
lzma compressed: uncompress error 1
Must RESET board to recover

完整日志:

=> bootm 0x80010000
## Booting kernel from Legacy Image at 80010000 ...
   Image Name:   MIPS Kwrt Linux-6.6.110
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    2034515 Bytes = 1.9 MiB
   Load Address: 80000000
   Entry Point:  80000000
   Verifying Checksum ... OK
   Uncompressing Kernel Image
lzma compressed: uncompress error 1
Must RESET board to recover
resetting ...

U-Boot SPL 2020.07 (Nov 20 2025 - 19:28:31 +0800)
Trying to boot from NOR


U-Boot 2020.07 (Nov 20 2025 - 19:28:31 +0800)

CPU:   MediaTek MT7628A ver:1 eco:2
Boot:  DDR2, SPI-NOR 3-Byte Addr, CPU clock from XTAL
Clock: CPU: 580MHz, Bus: 193MHz, XTAL: 40MHz
Model: OrayBox R300A-4151G
DRAM:  128 MiB
Loading Environment from SPI Flash... SF: Detected by25q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
OK
Net:
Warning: eth@10110000 (eth0) using random MAC address - e2:7b:f7:fc:26:2f
eth0: eth@10110000

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-11-21 15:07
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你遇到的错误信息是:

    lzma compressed: uncompress error 1
    Must RESET board to recover
    

    这表明 U-Boot 在尝试解压 Lzma 压缩的内核镜像时失败。这个错误可能由多种原因引起,包括但不限于:

    • 内核镜像损坏或不完整
    • U-Boot 不支持 Lzma 解压(例如没有启用 Lzma 支持)
    • 内核镜像与当前 U-Boot 版本不兼容
    • 内核镜像不是正确的格式(如应为 zImage 而不是 lzma)

    解决方案

    1. 确认 U-Boot 是否支持 Lzma 解压

    检查点:

    • 确保在编译 U-Boot 时启用了 LZMA 支持。
    • 查看 U-Boot 的配置文件(如 .config)中是否有以下选项:
    CONFIG_LZMA=y
    

    如果没有,请重新编译 U-Boot 并确保启用 LZMA 支持。

    修改后的编译命令示例:

    make menuconfig
    # 进入配置界面,导航到:
    # -> General setup
    # -> Enable LZMA compression support (LZMA)
    # 选择 [Y]
    make -j$(nproc)
    

    注意: 如果你的 U-Boot 版本较旧(如 2020.07),可能需要升级到更高版本(如 2023.07 或更新)以获得更好的 Lzma 支持。


    2. 验证内核镜像是否正确

    检查点:

    • 使用 file 命令查看镜像类型:
    file openwrt-mips-socfpga-generic-kernel-initramfs.tar.lzma
    

    预期输出应为:

    openwrt-mips-socfpga-generic-kernel-initramfs.tar.lzma: Lempel-Ziv-Markov chain algorithm (LZMA) compressed data, ...
    

    如果输出显示不是 Lzma 压缩数据,则可能是镜像损坏或格式错误。


    3. 使用正确的内核格式

    问题:

    • OpenWrt 通常使用 zImageuImage 格式,而不是直接的 Lzma 压缩文件。
    • 如果你使用的是 .tar.lzma 文件,这可能是整个固件包,而不是可直接加载的内核。

    解决方法:

    • 确认你使用的是 vmlinuxzImage 文件,而不是整个压缩包。
    • 如果你从 OpenWrt 编译生成了 .bin.img 文件,请确保它们是经过正确打包的。

    4. 使用 bootm 命令加载非压缩内核

    如果你的内核不是 Lzma 压缩的,可以尝试使用 bootm 命令加载原始内核(如 zImage)。

    示例命令:

    => tftp 0x80010000 openwrt-mips-socfpga-generic-zImage
    => bootm 0x80010000
    

    注意: 确保你使用的镜像格式是 zImage,而不是 Lzma 压缩的 tar 包。


    5. 检查 TFTP 传输是否正确

    问题:

    • TFTP 传输过程中可能出现丢包、文件损坏等问题。

    解决方法:

    • 使用 md 命令检查内存中的内容是否与原始文件一致:
    => md 0x80010000 0x100
    
    • 检查文件大小是否匹配:
    => env get filesize
    
    • 如果文件大小不匹配,重新通过 TFTP 传输。

    6. 尝试使用其他工具解压内核

    你可以将内核镜像下载到 PC 上,使用 lzma 工具手动解压,看看是否能成功:

    lzma -d openwrt-mips-socfpga-generic-kernel-initramfs.tar.lzma
    

    如果解压失败,说明镜像本身存在问题。


    总结步骤(有序列表)

    1. 确认 U-Boot 是否启用了 LZMA 支持

      • 检查 .config 中是否有 CONFIG_LZMA=y
      • 如果没有,请重新编译 U-Boot 并启用该功能
    2. 验证内核镜像格式是否正确

      • 使用 file 命令检查镜像类型
      • 确保是 Lzma 压缩的内核镜像(如 .lzma
    3. 确保使用的是正确的内核格式

      • 使用 zImageuImage 而不是 .tar.lzma 文件
      • 如果使用的是 OpenWrt 固件包,请提取其中的内核部分
    4. 检查 TFTP 传输是否完整

      • 使用 mdfilesize 验证文件是否正确加载
      • 重新传输镜像
    5. 尝试使用非压缩内核启动

      • 如果内核不是 Lzma 压缩,使用 bootm 加载原始镜像
    6. 手动解压测试

      • 将镜像下载到 PC 上,使用 lzma 工具解压
      • 如果解压失败,说明镜像损坏

    📌 附录:U-Boot 启动命令示例(参考)

    => setenv serverip 192.168.1.100
    => setenv ipaddr 192.168.1.200
    => tftp 0x80010000 openwrt-mips-socfpga-generic-zImage
    => bootm 0x80010000
    

    如果你提供具体的 OpenWrt 内核镜像名称和路径,我可以进一步帮助你判断其格式和兼容性。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月21日