必须在uboot的xxx_defconfig/.config进行配置

例子在:rv1106-spi-nand-nomcu_defconfig.md

CONFIG_FIT=y
# CONFIG_SPL_KERNEL_BOOT is not set #关闭spl启动内核

#CONFIG_ENVF=y #关闭校验env.img
#CONFIG_ENV_IS_NOWHERE=y
#CONFIG_ANDROID_BOOT_IMAGE=y #安卓镜像
#CONFIG_FIT_ENABLE_SHA256_SUPPORT=y
#CONFIG_FIT_ENABLE_RSASSA_PKCS=y
CONFIG_BOOTDELAY=3 #3s后无操作的话,启动kernel
CONFIG_BAUDRATE=115200
CONFIG_MTD=y
#CONFIG_CMD_MTD=y
#CONFIG_MTD_PARTITIONS=y #开启这个会导致mtd dev 1命令找不到设备号
CONFIG_ENVF=y
CONFIG_ENV_NAND_OFFSET=0x400000
CONFIG_ENV_NAND_SIZE=0x400000

3. 配置dev.img方式启动

CONFIG_ENVF=y
CONFIG_ENV_NAND_OFFSET=0x400000#烧录地址
CONFIG_ENV_NAND_SIZE=0x400000#大小

CONFIG_ENV_NAND_OFFSET=0x400000:设置 ENV 的物理偏移量为 4M( env 分区位置即烧录地址)。

CONFIG_ENV_NAND_SIZE=0x400000:设置 ENV 大小为 4M。

# 1. MTD 分区表(SPI NAND)
mtdparts=spi-nand0:4M(idblock),4M(env),512K(uboot),4M(boot),-(rootfs)
#    		↑          ↑                                        ↑
#         设备名    分区定义                                  剩余空间给rootfs

# 2. 内核启动参数
sys_bootargs= ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs rk_dma_heap_cma=66M
#              ↑         ↑              ↑                    ↑
#           MTD索引4  UBI卷名      文件系统类型        DMA内存预留66M

# 3. SD卡分区表(可选,用于SD卡启动)
sd_parts=mmcblk0:16K@512(env),512K@32K(idblock),4M(uboot)
../uboot/tools/mkenvimage -s 0x400000 -o env.img .env.txt
  • env注意点

    这3者必须完全对应。Config,mkenvimage,烧录地址。

U-Boot ConfigCONFIG_ENV_OFFSET=0x400000 CONFIG_ENV_SIZE=0x400000告诉 U-Boot 去 0x400000 读,读 4M
mkenvimage-s 0x400000生成4M 大小的镜像
烧录地址0x400000env.img 烧录到 Flash 的 0x400000 处

Rockchip 平台的特殊性

再次强调,Luckfox RV1106 默认使用 CONFIG_ENVF (Environment Framework)

  • 在这种模式下,U-Boot 可能忽略 CONFIG_ENV_OFFSET,而是通过 MTD 分区表 来查找名为 env 的分区。

  • 如果是这种情况,只要你:

    1. .env.txt 中的 mtdparts 定义了 env 在正确位置。
    2. 烧录工具根据 mtdpartsenv.img 烧录到正确位置。
    3. U-Boot 能正确解析 MTD 分区。

    那么即使 CONFIG_ENV_OFFSET 没改(或者是错的),系统可能仍然能正常工作,因为 ENVF 框架更智能。

  • 但是,如果你禁用了 CONFIG_ENVF 或强制使用 CONFIG_ENV_IS_IN_NAND,那么必须严格一致

启动命令解析(针对1,2)

mtd dev 1
mtd read 0x02000000 0x4400 0x4000
iminfo 0x02000000
bootm 0x02000000
  • **mtd:**选 NAND 设备
  • mtd read
    • 0x4400:nand存放boot.img镜像快地址 (0x0088 0000/512)
    • 0x02000000 :DDR 加载地址
    • 0x4000: boot.img 大小 0x0080 0000(8M) /512
  • **bootm:**启动 FIT 镜像(必须是boot.img)
  • **iminfo:**检查镜像

1. uboot命令行启动

在本篇md中启动命令解析这一章节

这种方式无法挂载文件系统!!

2. uboot配置修改启动

  • 目标:直接uboot直接启动kernel。不需要env.img配置

uboot启动kernel详细在:env.img文件&uboot启动kernel流程.md

  • 2.1 uboot/include/configs/rv1106_common.h修改

    include"rockchip-common.h"之后添加

#include "rockchip-common.h" 

#ifndef RKIMG_BOOTCOMMAND
#define RKIMG_BOOTCOMMAND	"mtd dev 1; mtd read 0x02000000 0x4400 0x4000; bootm 0x02000000"
#endif
  • 2.2 将
    #undef RKIMG_BOOTCOMMAND
    #ifdef CONFIG_FIT_SIGNATURE
    #define RKIMG_BOOTCOMMAND		\
    	"boot_fit;"
    #else
    #define RKIMG_BOOTCOMMAND		\
    	"boot_fit;"			\
    	"boot_android ${devtype} ${devnum};"
    #endif
    
  • 2.3改为
    #undef RKIMG_BOOTCOMMAND
    #define RKIMG_BOOTCOMMAND	"mtd dev 1; mtd read 0x02000000 0x4400 0x4000; bootm 0x02000000"
    

这种方式无法挂载文件系统!!