Rockchip RK3399 - 官方固件方式加载uboot
目录
----------------------------------------------------------------------------------------------------------------------------
开发板 :NanoPC-T4
开发板
eMMC
:16GB
LPDDR3
:4GB
显示屏 :15.6
英寸HDMI
接口显示屏
u-boot
:2017.09
----------------------------------------------------------------------------------------------------------------------------
NanoPC-T4
开发板,主控芯片是Rockchip RK3399
,big.LITTLE
大小核架构,双Cortex-A72
大核(up to 2.0GHz
) + 四Cortex-A53
小核结构(up to 1.5GHz
);Cortex-A72
处理器是Armv8-A
架构下的一款高性能、低功耗的处理器。
我们接着上一节,介绍Rockchip
处理器启动支持的两种引导方式:
TPL/SPL
加载:使用Rockchip
官方提供的TPL/SPL
U-boot
(就是我们上面说的小的uboot
),该方式完全开源;- 官方固件加载:使用
Rockchip idbLoader
,来自Rockchip rkbin
项目的Rockchip DDR
初始化bin
和miniloader bin
,该方式不开源;
这一节我们将介绍采用官方固件方式,如何编译源码以及烧录程序到eMMC
,从而完成uboot
的启动。
一、 idbloader.img
我们基于Rockchip rkbin
官方给的ddr.bin
、miniloader.bin
来构建rk3399_loader_v1.27.126.bin
。
ddr.bin
:等价于我们之前说的TPL
,用于初始化DDR
;miniloader.bin
:Rockchip
修改的一个bootloader
,等价于我们之前说的SPL
,用于加载uboot
;
1.1 下载rkbin
我们可以在Rockchip
的github
上下载到Rockchip rkbin
项目,如下所示:
root@zhengyang:/work/sambashare/rk3399# git clone https://github.com/rockchip-linux/rkbin.git --depth 1
1.2 合并
在rkbin
根目录下执行如下命令:
root@zhengyang:/work/sambashare/rk3399# cd rkbin/
root@zhengyang:/work/sambashare/rk3399/rkbin# tools/mkimage -n rk3399 -T rksd -d bin/rk33/rk3399_ddr_800MHz_v1.27.bin idbloader.img
Image Type: Rockchip RK33 (SD/MMC) boot image
Init Data Size: 153600 bytes
root@zhengyang:/work/sambashare/rk3399/rkbin# cat bin/rk33/rk3399_miniloader_v1.26.bin >> idbloader.img
root@zhengyang:/work/sambashare/rk3399/rkbin# ll idbloader.img
-rw-r--r-- 1 root root 239900 5月 15 20:47 idbloader.img
这样我们就得到了idbloader.img
文件。
二、u-boot.img
使用Rockchip miniloader
的idbloader
时,需要将u-boot.bin
通过tools/loaderimage
转换为可加载的miniloader
格式。
2.1 编译uboot
关于uboot
的编译在上一篇博客中已经介绍的很详细了,这里不再重复介绍了,具体参考Rockchip RK3399- TPL/SPL
方式加载uboot
。
编译完成,在uboot
根录下生成文件有:
root@zhengyang:/work/sambashare/rk3399/u-boot# ll u-boot* Sys*
-rw-r--r-- 1 root root 153740 5月 14 10:30 System.map
-rwxr-xr-x 1 root root 6872736 5月 14 10:30 u-boot*
-rw-r--r-- 1 root root 931504 5月 14 10:30 u-boot.bin
-rw-r--r-- 1 root root 15808 5月 14 10:30 u-boot.cfg
-rw-r--r-- 1 root root 9996 5月 14 10:30 u-boot.cfg.configs
-rw-r--r-- 1 root root 51685 5月 14 10:30 u-boot.dtb # 设备树
-rw-r--r-- 1 root root 931501 5月 14 10:30 u-boot-dtb.bin # 等同u-boot.bin
-rw-r--r-- 1 root root 932864 5月 14 10:30 u-boot-dtb.img # 等同u-boot.img
-rw-r--r-- 1 root root 932864 5月 14 10:30 u-boot.img
-rw-r--r-- 1 root root 1304 5月 14 10:30 u-boot.lds
-rw-r--r-- 1 root root 800454 5月 14 10:30 u-boot.map
-rwxr-xr-x 1 root root 879816 5月 14 10:30 u-boot-nodtb.bin*
-rwxr-xr-x 1 root root 2529568 5月 14 10:30 u-boot.srec*
-rw-r--r-- 1 root root 300850 5月 14 10:30 u-boot.sym
2.2 生成u-boot.img
在uboot
项目根路径下执行如下命令生成u-boot.img
镜像文件:
root@zhengyang:/work/sambashare/rk3399/u-boot# ./tools/loaderimage --pack --uboot ./u-boot.bin u-boot.img 0x00200000
load addr is 0x200000!
pack input ./u-boot.bin
pack file size: 933064(911 KB)
crc = 0x0f6e6977
uboot version: U-Boot 2017.09-gef1dd65-dirty #root (May 14 2023 - 18:27:08)
pack u-boot.img success!
root@zhengyang:/work/sambashare/rk3399/u-boot#
root@zhengyang:/work/sambashare/rk3399/u-boot# ll u-boot.img
-rw-r--r-- 1 root root 4194304 5月 15 22:14 u-boot.img
其中0x00200000
为uboot
加载到DDR
中的地址。
三、trust.img
使用Rockchip miniloader
的idbloader
时,需要将bl31.bin
通过tools/trust_merge
转换为可加载的miniloader
格式。
在rkbin
项目根路径下执行如下命令生成trust.img
镜像文件:
root@zhengyang:/work/sambashare/rk3399/rkbin# ./tools/trust_merger ./RKTRUST/RK3399TRUST.ini
out:trust.img
merge success(trust.img)
root@zhengyang:/work/sambashare/rk3399/rkbin# ll trust.img
-rw-r--r-- 1 root root 4194304 5月 15 20:54 trust.img
其中./RKTRUST/RK3399TRUST.ini
文件内容如下:
root@zhengyang:/work/sambashare/rk3399/u-boot# cat ./RKTRUST/RK3399TRUST.ini
[VERSION]
MAJOR=1
MINOR=0
[BL30_OPTION]
SEC=0
[BL31_OPTION]
SEC=1
PATH=bin/rk33/rk3399_bl31_v1.35.elf
ADDR=0x00040000
[BL32_OPTION]
SEC=1
PATH=bin/rk33/rk3399_bl32_v2.10.bin
ADDR=0x08400000
[BL33_OPTION]
SEC=0
[OUTPUT]
PATH=trust.img
四、rkdeveloptool
rkdeveloptool
是Rockchip
提供的一个与Rockusb
设备进行通信的工具,通过该工具我们可以将镜像文件下载到开发板的eMMC
。它被认为是upgrade_tool
的一个开源版本,只有很少区别。
要使用rkdeveloptool
进行升级,首先要知道rkdeveloptool
是基于什么情况下才会起作用的,是在SoC
进入MASKROM
模式后而且跟主机通过USB
连接,因为这个时候主板的DDR
并没有初始化,而升级过程是需要很大的内存空间的,所以升级之前第一步要做的就是执行rkdeveloptool db rkxx_loader_vx.xx.bin
(这个固件本质上也是idbloader.img
),只不过这时候只是在内存中执行,如果不执行db命令的话其他的命令则无法执行因为没有做内存初始化工作。
4.1 下载源码
在/work/sambashare/rk3399
目录下执行如下命令:
root@zhengyang:/work/sambashare/rk3399# git clone https://github.com/rockchip-linux/rkdeveloptool.git --depth 1
4.2 配置
首先安装libusb
与udev
,例如对于ubuntu
:
root@zhengyang:/work/sambashare/rk3399# sudo apt-get install libudev-dev libusb-1.0-0-dev dh-autoreconf
切换到rkdeveloptool/
目录进行配置:
root@zhengyang:/work/sambashare/rk3399# cd rkdeveloptool/
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# autoreconf -i
configure.ac:12: installing 'cfg/compile'
configure.ac:19: installing 'cfg/config.guess'
configure.ac:19: installing 'cfg/config.sub'
configure.ac:7: installing 'cfg/install-sh'
configure.ac:7: installing 'cfg/missing'
Makefile.am: installing 'cfg/depcomp'
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# ./configure
4.3 编译安装
运行如下命令:
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# make
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# make install
如果遇到如下编译错误:
./configure: line 4269: syntax error near unexpected token `LIBUSB1,libusb-1.0'
./configure: line 4269: `PKG_CHECK_MODULES(LIBUSB1,libusb-1.0)'
还需要安装pkg-config
与libusb-1.0
:
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# sudo apt-get install pkg-config libusb-1.0
编译完成后,在当前路径下生成rkdeveloptool
可执行文件:
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# ll rkdeveloptool
-rwxr-xr-x 1 root root 1059720 5月 11 19:56 rkdeveloptool*
4.4 rk3399_loader_v1.27.126.bin
由于SoC
进入到MASKROM
模式后,目标板子会运行Rockusb
驱动程序。在MASKROM
模式下,需要使用到DDR
,因此需要下载固件进行DDR
的初始化。
Rockchip rkbin
项目提供了ddr.bin
、usbplug.bin
、miniloader.bin
这三个包:
ddr.bin
:等价于我们之前说的TPL
,用于初始化DDR
;usbplug.bin
:Rockusb
驱动程序,用于将程序通过usb
下载到eMMC
;miniloader.bin
:Rockchip
修改的一个bootloader
,等价于我们之前说的SPL
,用于加载uboot
;
在rkbin
目录下执行如下命令,可以将ddr.bin
、usbplug.bin
、miniloader.bin
这三个包合并,得到rk3399_loader_v1.27.126.bin
:
root@zhengyang:/work/sambashare/rk3399# cd rkbin/
root@zhengyang:/work/sambashare/rk3399/rkbin# tools/boot_merger /work/sambashare/rk3399/rkbin/RKBOOT/RK3399MINIALL.ini
********boot_merger ver 1.2********
Info:Pack loader ok.
root@zhengyang:/work/sambashare/rk3399/rkbin# ll rk3399_loader_v1.27.126.bin
-rw-r--r-- 1 root root 465230 5月 11 20:06 rk3399_loader_v1.27.126.bin
可以根据自己的需求可以在./RKBOOT/RK3399MINIALL.ini
修改ddr
、usbplug
、miniloader
:
[CHIP_NAME]
NAME=RK330C
[VERSION]
MAJOR=1
MINOR=26
[CODE471_OPTION]
NUM=1
Path1=bin/rk33/rk3399_ddr_800MHz_v1.27.bin
Sleep=1
[CODE472_OPTION]
NUM=1
Path1=bin/rk33/rk3399_usbplug_v1.26.bin
[LOADER_OPTION]
NUM=2
LOADER1=FlashData
LOADER2=FlashBoot
FlashData=bin/rk33/rk3399_ddr_800MHz_v1.27.bin
FlashBoot=bin/rk33/rk3399_miniloader_v1.26.bin
[OUTPUT]
PATH=rk3399_loader_v1.27.126.bin
将rk3399_loader_v1.27.126.bin
拷贝到rkdeveloptool
路径下:
root@zhengyang:/work/sambashare/rk3399/rkbin# cp rk3399_loader_v1.27.126.bin ../rkdeveloptool/
五、烧录程序
5.1 准备镜像
我们按照之前的流程得到了idbloader.img
、u-boot.img
,trust.img
文件,由于我们这里不进行内核和根文件系统的烧录,所以暂时不需要准备这俩。
按照Rockchip
官方要求将idbloader.img
烧录到eMMC
的0x40
扇区,u-boot.img
烧录到0x4000
扇区,trust.img
烧录到0x6000
扇区。
我们需要将idbloader.img
、u-boot.img
、trust.img
拷贝到rkdeveloptool
路径下:
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# cp ../rkbin/trust.img ./
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# cp ../u-boot/u-boot.img ./
root@zhengyang:/work/sambashare/rk3399/rkdeveloptool# cp ../rkbin/idbloader.img ./
5.2 进入MASKROM
升级模式
亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。
日期 | 姓名 | 金额 |
---|---|---|
2023-09-06 | *源 | 19 |
2023-09-11 | *朝科 | 88 |
2023-09-21 | *号 | 5 |
2023-09-16 | *真 | 60 |
2023-10-26 | *通 | 9.9 |
2023-11-04 | *慎 | 0.66 |
2023-11-24 | *恩 | 0.01 |
2023-12-30 | I*B | 1 |
2024-01-28 | *兴 | 20 |
2024-02-01 | QYing | 20 |
2024-02-11 | *督 | 6 |
2024-02-18 | 一*x | 1 |
2024-02-20 | c*l | 18.88 |
2024-01-01 | *I | 5 |
2024-04-08 | *程 | 150 |
2024-04-18 | *超 | 20 |
2024-04-26 | .*V | 30 |
2024-05-08 | D*W | 5 |
2024-05-29 | *辉 | 20 |
2024-05-30 | *雄 | 10 |
2024-06-08 | *: | 10 |
2024-06-23 | 小狮子 | 666 |
2024-06-28 | *s | 6.66 |
2024-06-29 | *炼 | 1 |
2024-06-30 | *! | 1 |
2024-07-08 | *方 | 20 |
2024-07-18 | A*1 | 6.66 |
2024-07-31 | *北 | 12 |
2024-08-13 | *基 | 1 |
2024-08-23 | n*s | 2 |
2024-09-02 | *源 | 50 |
2024-09-04 | *J | 2 |
2024-09-06 | *强 | 8.8 |
2024-09-09 | *波 | 1 |
2024-09-10 | *口 | 1 |
2024-09-10 | *波 | 1 |
2024-09-12 | *波 | 10 |
2024-09-18 | *明 | 1.68 |
2024-09-26 | B*h | 10 |
2024-09-30 | 岁 | 10 |
2024-10-02 | M*i | 1 |
2024-10-14 | *朋 | 10 |
2024-10-22 | *海 | 10 |
2024-10-23 | *南 | 10 |
2024-10-26 | *节 | 6.66 |
2024-10-27 | *o | 5 |
2024-10-28 | W*F | 6.66 |
2024-10-29 | R*n | 6.66 |
2024-11-02 | *球 | 6 |
2024-11-021 | *鑫 | 6.66 |
2024-11-25 | *沙 | 5 |
2024-11-29 | C*n | 2.88 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-05-15 Spring MVC -- JSP标准标签库(JSTL)