编译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有两种编译方式。
- rk提供的build.sh编译
- 原生编译(Makefile),不推荐。
2. 手动编译
2.1 rkbin生成
cd rkbin
./tools/boot_merge RKBOOT/RV1106MINIALL.ini
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配置项
- 设置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生成的spl和tpl
-
将tpl和spl放到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配置项
1.3 使用make.sh选择xxx_defconfig文件
这一步相当于make xxx_defconfig,make.sh帮我们做了这个步骤。
#注意make.sh会自己拼接_defconfig
./make.sh rv1106-spi-nand-nomcu
等待执行完
1.4 烧录
rk官方提供的RV1106MINIALL.ini这个SPL会去nand flash的0x00800000找uboot。
如果要指定SPL找uboot的地址。需要在配置文件中配置
CONFIG_SYS_LOAD_ADDR =
