测试开发板:Firefly-RK3399 2+16
一、内存分区表:
分析上图:
bootcode下通过EMMC/SD启动有两种方式:
左侧为rockchip官方方式,右侧为TPL/SPL方式加载。左侧的需要生成trust.img
RK平台的启动流程 :
BOOTROM => ddr-bin => Miniloader => TRUST => U-BOOT => KERNEL
我们要做的流程为:
BOOTROM=>idbloader.img=>uboot.itb=>BOOT=>rootfs
打包需要的文件
idbloader.img <--------U-Boot TPL/SPL
u-boot.itb <-----------U-Boot 和 bl31.elf
代码实现:
./arch/arm/include/asm/arch-rockchip/rk_atags.h
./arch/arm/mach-rockchip/rk_atags.c
二、firefly移植u-boot 2020.10
1.1 获取u-boot 20.10源码(建议科学下载)
git clone https://gitlab.denx.de/u-boot/u-boot.git
vi Makefile
VERSION = 2024
PATCHLEVEL = 10
SUBLEVEL =
EXTRAVERSION = -rc5
NAME =
1.2 获取编译好的bl31.elf
GitHub - rockchip-linux/rkbin: Firmware and Tool Binarys
设置bl31路径:export BL31=…/rk3399_bl31_v1.36.elf
1.3编译
查看3399相关的defconfig
ls configs/ | grep rk3399
从log
记录来看,firefly-rk3399_defconfig
应该是Firefly官方提交的,因此,选择这个xxx_defconfig
文件作为默认config
生成默认配置文件,如下:
make firefly-rk3399_defconfig
Q1:
tools/mkeficapsule.c:19:10: fatal error: uuid/uuid.h: No such file or directory
#include <uuid/uuid.h>
缺少对应库:
sudo apt-get install uuid-dev
#include <gnutls/gnutls.h>
缺少对应库:sudo apt-get install libghc-gnutls-dev
Traceback (most recent call last): File "/home/liu/rockchip/u-boot-2020/u-boot-master/tools/binman/control.py", line 11, in <module> import importlib.resources ModuleNotFoundError: No module named 'importlib.resources'
检查 Python 版本: importlib.resources 模块是在 Python 3.7 中引入的。如果你使用的是 Python 3.6 或更早版本,则无法使用此模块
sudo apt update
sudo apt install python3.7
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
liu@liu-virtual-machine:~/rockchip/u-boot-2020/u-boot-master$ which python
/usr/bin/python
liu@liu-virtual-machine:~/rockchip/u-boot-2020/u-boot-master$ python --version
Python 3.6.9
切换python版本到python3.7
sudo apt install python-pip
python3 -m pip install importlib_resources
python3 -m pip install importlib.resources
python3 -m pip install pyelftools
至此,我们已经获取到了所需的idbloader.img
和u-boot.itb
两个文件
1.4 烧录
瑞芯微官方软件烧录即可(建议V2.84)