编译uboot

添加串口打印输出

  • 路径

    /uboot/u-boot/board/rockchip/evb_rv1106/evb_rv1106.c
    
  • 添加

    int rk_board_init(void)
    {
    	printf("\n[MY_MOD] =====================================\n");
    	printf("[MY_MOD] U-Boot 已修改!当前为自定义版本!\n");
    	printf("[MY_MOD] =====================================\n\n");
    	return 0;
    }
    

uboot使用的设备树在:配置文件中

CONFIG_DEFAULT_DEVICE_TREE="rv1106-evb"

注意:

  • rkbin必须在uboot同级目录并且名称也必须时rkbin,可以在make.sh进行修改

    RKBIN_TOOLS=../rkbin/tools
    

使用rk-github仓库的uboot有两种编译方式。

  1. rk提供的build.sh编译
  2. 原生编译(Makefile),不推荐。

2. 手动编译

2.1 rkbin生成

cd rkbin
./tools/boot_merge RKBOOT/RV1106MINIALL.ini
rk-github编译流程-uboot编译5

2.2 修改xxx_defconfig

  • 复制一个新的
cp ./configs/rv1106-spi-nand-tb-nofastae_defconfig ./configs/rv1106-spi-nand-nomcu_defconfig
  • 配置内容,注释/删除
CONFIG_LOADER_INI="RV1106MINIALL.ini"
CONFIG_TRUST_INI="RV1106TOS.ini"
  • 检查nand配置项
rk-github编译流程-uboot编译2
  • 设置uboot倒计时
CONFIG_BOOTDELAY=3

2.3 手动make编译

如果删除了xxx_defconfig里面的CONFIG_LOADER_INI,CONFIG_TRUST_INI内容只能进行手动make。

make rv1106-spi-nand-nomcu_defconfig
make -j16 #不使用make.sh需要指定编译核数

2.4 在串口工具调试

进入串口工具之后,有3秒倒计时

ctrl + c #成功进入uboot

2.5 注意

  • 串口打印 Trying fit image at 0x4000 sector,说明从4000扇区开始读uboot,即0x00800000(nand 1扇区2k,共2048个块*16扇区)

  • 如果打印了,说明要进行env.img校验

    ENVF: !bad CRC @ 0x0
    ENVF: !bad CRC @ 0x0
    No env partition table
    ## Unknown partition table type 0
    

    注释或者删除即可处理这个问题。

    CONFIG_ENVF=y
    
  • 改uboot的env.img的获取地址

    CONFIG_ENV_NAND_OFFSET= 0x0 #放入第0扇区
    CONFIG_ENV_NAND_SIZE = 0x40000 #大小,按字节,而不是扇区
    
  • 如果要修改uboot的启动地址

    • xxx_defconfig修改,或者临时修改在**.config**文件
    CONFIG_MTD_BLK_U_BOOT_OFFS=0x2000 #0x00400000 / 512 = 0x2000
    
    • 利用uboot生成的spltpl

    • tplspl放到rkbin/bin目录

      u-boot-tpl.bin 和 u-boot-spl.bin
      
    • 创建在RKBOOT目录创建RV1106MINIALL_MY_TPL_SPL.ini,复制RV1106MINIALL.ini内容到RV1106MINIALL_MY_TPL_SPL.ini

      [CHIP_NAME]
      NAME=RV1106
      [VERSION]
      MAJOR=1
      MINOR=1
      [CODE471_OPTION]
      NUM=1
      Path1=bin/rv11/u-boot-tpl.bin
      Sleep=1
      [CODE472_OPTION]
      NUM=1
      Path1=bin/rv11/rv1106_usbplug_v1.09.bin
      [LOADER_OPTION]
      NUM=2
      LOADER1=FlashData
      LOADER2=FlashBoot
      FlashData=bin/rv11/u-boot-tpl.bin
      FlashBoot=bin/rv11/u-boot-spl.bin
      [OUTPUT]
      PATH=rv1106_download_v1.15.108.bin
      IDB_PATH=rv1106_idblock_v1.15.102.img
      [SYSTEM]
      NEWIDB=true
      [FLAG]
      471_RC4_OFF=true
      RC4_OFF=true
      CREATE_IDB=true
      
    • tpl可以不改也没必要改,但也提供思路

      [CHIP_NAME]
      NAME=RV1106
      [VERSION]
      MAJOR=1
      MINOR=1
      [CODE471_OPTION]
      NUM=1
      Path1=bin/rv11/rv1106_ddr_924MHz_v1.15.bin
      Sleep=1
      [CODE472_OPTION]
      NUM=1
      Path1=bin/rv11/rv1106_usbplug_v1.09.bin
      [LOADER_OPTION]
      NUM=2
      LOADER1=FlashData
      LOADER2=FlashBoot
      FlashData=bin/rv11/rv1106_ddr_924MHz_v1.15.bin
      FlashBoot=bin/rv11/u-boot-spl.bin #只改动这里
      [OUTPUT]
      PATH=rv1106_download_v1.15.108.bin
      IDB_PATH=rv1106_idblock_v1.15.102.img
      [SYSTEM]
      NEWIDB=true
      [FLAG]
      471_RC4_OFF=true
      RC4_OFF=true
      CREATE_IDB=true
      

1. make.sh编译uboot

1.1 配置交叉编译环境

  • 修改uboot根目录的make.sh,注意要绝对路径
CROSS_COMPILE_ARM32=/root/rk-tools/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
CROSS_COMPILE_ARM64=/root/rk-tools/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
  • 修改uboot根目录的makefile
ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-

1.2 修改xxx_defconfig

对于现有的uboot的_defconfig是不能满足我们需要的功能的。

  • 复制一个新的
cp ./configs/rv1106-spi-nand-tb-nofastae_defconfig ./configs/rv1106-spi-nand-nomcu_defconfig
  • 配置内容

由于官方提供得spi-nand都有TB,启动链方式要验证kernel。所以要配置RV1106TOS.ini

CONFIG_LOADER_INI="RV1106MINIALL.ini"
CONFIG_TRUST_INI="RV1106TOS.ini"
  • 检查nand配置项
rk-github编译流程-uboot编译2

1.3 使用make.sh选择xxx_defconfig文件

这一步相当于make xxx_defconfig,make.sh帮我们做了这个步骤。

#注意make.sh会自己拼接_defconfig
./make.sh rv1106-spi-nand-nomcu

等待执行完

rk-github编译流程-uboot编译3

1.4 烧录

rk官方提供的RV1106MINIALL.ini这个SPL会去nand flash的0x00800000找uboot。

如果要指定SPL找uboot的地址。需要在配置文件中配置

CONFIG_SYS_LOAD_ADDR = 

rk-github编译流程-uboot编译4