2. 编译并烧录RK3399 U-Boot

任务目标

在RK3399 SDK环境中,从U-Boot源码编译生成uboot.img与trust.img镜像,通过RKDevTool烧录至开发板,并依据串口启动日志验证U-Boot正常运行。

环境准备

  • 主机:Ubuntu 18.04/20.04 x86_64(已安装SDK,路径如~/rk3399-sdk)
  • 开发板:RK3399(如Firefly-RK3399),Type-C数据线连接至主机
  • 依赖:gcc、make、python2.7(SDK自带交叉编译工具链)

编译U-Boot

进入SDK的U-Boot目录,加载交叉编译环境后执行编译脚本。SDK已提供一键编译脚本,内部自动完成配置与镜像生成。

cd ~/rk3399-sdk/u-boot
make distclean
make rk3399_defconfig
make ARCH=arm CROSS_COMPILE=../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- -j8

编译完成后,在u-boot目录下生成uboot.img,在SDK根目录的rockdev目录下生成trust.img(由脚本从U-Boot的TOS打包生成)。若SDK版本较新,可能直接生成uboot.img与trust.img于当前目录。

烧录镜像

使用RKDevTool(Windows)或upgrade_tool(Linux)烧录。以下为Linux命令行方式:

# 开发板进入MaskROM模式:按住RECOVERY键不松,上电,等待2秒后松开
sudo upgrade_tool db ~/rk3399-sdk/u-boot/rk3399_loader_v1.24.126.bin
sudo upgrade_tool wl 0 ~/rk3399-sdk/u-boot/uboot.img
sudo upgrade_tool wl 0 ~/rk3399-sdk/u-boot/trust.img
sudo upgrade_tool rd

若使用RKDevTool图形工具,在“下载镜像”页签中,将uboot.img与trust.img分别添加到对应地址(通常为0x0与0x0,分区由工具自动识别),点击“执行”即可。

验证启动日志

开发板串口(波特率1500000,电平3.3V TTL)连接主机,打开串口终端(如minicom或PuTTY)。烧录完成后重新上电,观察串口输出:

U-Boot 2017.09-... (Jan 01 2025 - 12:00:00)
...
Rockchip U-Boot
...
Net:   eth0: ethernet@fe300000
Hit any key to stop autoboot:  0

出现U-Boot 2017.09版本行且无报错即表示编译烧录成功。若在自动启动倒计时内按下任意键进入U-Boot命令行,输入version可显示编译时间与版本信息,进一步确认镜像正确。

通过条件

  • 编译过程无错误,生成uboot.img与trust.img文件
  • 烧录后开发板串口输出U-Boot启动横幅,且能进入命令行或正常引导内核
  • 若启动卡死或输出ERROR,检查loader版本与镜像匹配性,重新执行烧录步骤