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_ARC4和CONFIG_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 加载优化 |
内核配置问题
快启内核裁剪的原则
现象: 需要裁剪内核以适应快启系统的需求。
解决方案: 快启内核裁剪的主要原则是最小化内核体积和内存占用,主要措施包括:
- 禁用不必要的硬件驱动支持
- 关闭调试功能
- 禁用不需要的文件系统支持
- 关闭网络相关功能(如不需要网络)
- 禁用安全特性(如不需要)
- 减小内核日志缓冲区大小