跳到主要内容

FASTBOOT 常见问题

配置与打包问题

修改快启后打包失败

现象: 修改快启配置后,打包过程中出现错误。

原因: 通常是因为修改了压缩格式导致的问题。默认使用 gzip 压缩,而快启使用 lz4 压缩,两种压缩格式的压缩率不同,导致解压后的文件大小变化,需要更大的分区空间。

解决方案

  • 需要扩大分区表中的分区大小
  • 推荐使用 auto_update_partition 自动化脚本进行分区扩容,操作更简单高效

启动问题

修改快启后启动卡在 OpenSBI

现象: 系统启动过程中卡在 OpenSBI 阶段。

原因: 一般是踩内存导致问题,由于快启系统排布非常紧凑,内核过大就容易踩到内存,可以向上找日志,看启动的内核大小,按默认布局不建议内核超过 0x60000

解决方案

  • 减小内核体积,裁剪不必要的功能
  • 调整内存布局,为内核分配更大的空间

启动秒崩溃,无打印无显示

现象: 系统启动后立即崩溃,没有任何打印信息或显示输出。

原因: 极有可能是没有按照文档要求配置内核快启参数。例如,cmdline 参数不完整,或者内存配置过小(如只配置了 64MB)。

解决方案

  • 请参考【配置内核快启参数】章节,正确配置 bootargs 和内存参数
  • 确保 bootargs 包含完整的启动参数
  • 确保内存配置与实际硬件一致(如 128MB 内存应配置为 0x08000000
  • 确保没有踩内存,因为内存过大踩到了设备树的内存

启动秒崩溃,打印 "Unable to handle kernel paging request"

现象: 系统启动后立即崩溃,打印 "Unable to handle kernel paging request" 错误信息。

原因: 快启模式下可能存在踩内存的情况,此时应该是在初始化系统基础资源,可能是因为开启了不兼容的内核配置。

解决方案

  • 关闭不兼容的内核配置:CONFIG_CRYPTO_ARC4CONFIG_CRYPTO_USER_API_HASH
  • 这两个库不兼容快启流程,需要关闭

启动后 U-Boot 没有打印输出

现象: 系统启动后,U-Boot 阶段没有任何打印输出。

原因: 这是正常现象,因为快启系统对 U-Boot 进行了裁剪,移除了打印功能以提高启动速度。

解决方案: 无需处理,这是快启模式的预期行为。

启动后一直在 Waiting for root device

现象: 系统启动后卡在 "Waiting for root device" 阶段。

原因

  • 没有配置启用 SPI、MMC 控制器
  • 可能是因为没有同步 mbr_offset 配置,内核日志中可能会有 sunxipart: failed to parse sunxi_gpt! 的打印

解决方案

  • 请参考【配置内核快启参数】配置设备树
  • 同步 mbr_offset 配置,确保与 FLASH MAP 一致

异构 RAMDISK 问题

RTOS 打印 get_boot_param failed

现象: 在 RTOS 日志中看到 "get_boot_param failed" 错误信息。

原因: FLASH 的 GPT OFFSET 配置与 FLASH MAP 不一致。

解决方案

  • 确认配置 FLASH 的 GPT OFFSET,配置需要与 FLASH MAP 一致
  • 需要找到 uboot-board.dts 中的 flash_map 进行参考配置

异构 ROOTFS 问题

RTOS 打印 get_boot_param failed

现象: 在 RTOS 日志中看到 "get_boot_param failed" 错误信息。

原因: FLASH 的 GPT OFFSET 配置与 FLASH MAP 不一致。

解决方案

  • 确认配置 FLASH 的 GPT OFFSET,配置需要与 FLASH MAP 一致
  • 需要找到 uboot-board.dts 中的 flash_map 进行参考配置

性能优化问题

如何加速固件加载和解压

现象: 启动阶段从存储加载固件到内存解压运行的速度较慢。

原因: 存储读取速度有上限,影响启动性能。

解决方案

  • SDK 支持 LZ4 压缩格式的解压加速功能
  • 通过修改 BoardConfig 文件,在 LICHEE_SPL_BOARD_MK 中新增 cfg_lz4_parall_decomp 方式,启用 LZ4 加速解压功能

功能限制问题

快启系统不支持的 U-Boot 特性

现象: 无法使用某些 U-Boot 提供的功能。

原因: 快启系统由于没有 U-Boot,将不支持一些 U-Boot 提供的特性。

解决方案: 了解快启系统的功能限制:

  • U-Boot 下执行自动 OTA
  • U-Boot 初始化屏显示开机 LOGO
  • U-Boot 动态选择启动存储
  • U-Boot 启动 NFS 系统,以太网功能
  • 不支持卡烧录功能

内存配置问题

如何配置 RAMDISK 的预留内存

现象: 需要正确配置 RAMDISK 的预留内存大小和地址。

解决方案

  • 设备树需要配置 RAMDISK 的预留内存
  • 预留内存的大小需要参考 RAMDISK 的大小,一般需要包含压缩空间和解压空间
  • 例如,RAMDISK 的大小是 6M,经过 LZ4 压缩后的大小是 2M,所以需要配置总共 8M 内存
  • 推荐将 RAMDISK 的地址安排到多媒体内存池之前,避免内存碎片化

如何配置 ROOTFS 的预留内存

现象: 需要正确配置 ROOTFS 的预留内存大小和地址。

解决方案

  • 设备树需要配置 ROOTFS 的预留内存
  • 预留内存的大小需要参考需要读取的文件的总大小
  • 配置示例:linux,initrd-start = <0x47c00000>; linux,initrd-end = <0x48000000>;

文件系统配置问题

异构 RAMDISK 和异构 ROOTFS 的选择

现象: 不确定应该选择哪种启动方式。

解决方案: 根据需求选择合适的启动方式:

类别异构 RAMDISK异构 ROOTFS普通快启
存储占用高,需要单独存放 RAMDISK低,从 Linux 的 ROOTFS 中读取低,与异构 ROOTFS 一致
内存占用高,需要预留压缩空间和解压空间低,只需要运行空间低、无快启优化
启动速度最快,流程最简单,启动速度最快快,流程稍复杂,但也有提升一般、没有 ROOTFS 加载优化

内核配置问题

快启内核裁剪的原则

现象: 需要裁剪内核以适应快启系统的需求。

解决方案: 快启内核裁剪的主要原则是最小化内核体积和内存占用,主要措施包括:

  • 禁用不必要的硬件驱动支持
  • 关闭调试功能
  • 禁用不需要的文件系统支持
  • 关闭网络相关功能(如不需要网络)
  • 禁用安全特性(如不需要)
  • 减小内核日志缓冲区大小