程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

Rockchip RK3399 - 官方固件方式加载uboot

----------------------------------------------------------------------------------------------------------------------------
开发板 :NanoPC-T4开发板
eMMC16GB
LPDDR34GB
显示屏 :15.6英寸HDMI接口显示屏
u-boot2017.09
----------------------------------------------------------------------------------------------------------------------------

NanoPC-T4开发板,主控芯片是Rockchip RK3399big.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初始化binminiloader bin,该方式不开源;

这一节我们将介绍采用官方固件方式,如何编译源码以及烧录程序到eMMC,从而完成uboot的启动。

一、 idbloader.img

我们基于Rockchip rkbin官方给的ddr.binminiloader.bin来构建rk3399_loader_v1.27.126.bin

  • ddr.bin:等价于我们之前说的TPL,用于初始化DDR
  • miniloader.binRockchip修改的一个bootloader,等价于我们之前说的SPL,用于加载uboot

1.1 下载rkbin

我们可以在Rockchipgithub上下载到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 miniloaderidbloader时,需要将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

其中0x00200000uboot加载到DDR中的地址。

三、trust.img

使用Rockchip miniloaderidbloader时,需要将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

rkdeveloptoolRockchip提供的一个与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 配置

首先安装libusbudev,例如对于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-configlibusb-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.binusbplug.binminiloader.bin这三个包:

  • ddr.bin:等价于我们之前说的TPL,用于初始化DDR
  • usbplug.binRockusb驱动程序,用于将程序通过usb下载到eMMC
  • miniloader.binRockchip修改的一个bootloader,等价于我们之前说的SPL,用于加载uboot

rkbin目录下执行如下命令,可以将ddr.binusbplug.binminiloader.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修改ddrusbplugminiloader

[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.imgu-boot.imgtrust.img文件,由于我们这里不进行内核和根文件系统的烧录,所以暂时不需要准备这俩。

按照Rockchip官方要求将idbloader.img烧录到eMMC0x40扇区,u-boot.img烧录到0x4000扇区,trust.img烧录到0x6000扇区。

我们需要将idbloader.imgu-boot.imgtrust.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-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
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-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(4836)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2019-05-15 Spring MVC -- JSP标准标签库(JSTL)
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示