0
点赞
收藏
分享

微信扫一扫

[ROC-RK3399-PC Pro] 手把手教你移植主线U-Boot(基于v2022.04-rc5版本)

文章目录

一、编译环境

我的 PC 机用的是 Ubuntu 18.04,执行以下命令安装必要工具:

$ sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \
expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \
unzip device-tree-compiler python-pip ncurses-dev python-pyelftools

二、交叉工具链

从 Firefly 仓库克隆交叉工具链并添加到环境变量,这里的 GCC 版本为 6.3.1

$ git clone https://gitlab.com/firefly-linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
$ export PATH=$PATH:/home/neutionwei/project/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin

如果需要使用更高版本交叉编译工具链,可以点击以下链接:

三、克隆源代码

从 GitHub 仓库克隆主线U-Boot:

$ git clone git@github.com:u-boot/u-boot.git

使用 git tag 命令可以查看版本情况:

$ git tag

把页面翻到最底下,可以看到当前最新版本为 v2022.04-rc5

切换到 v2022.04-rc5分支:

git checkout -b v2022.04-rc5 v2022.04-rc5

四、编译源代码

在主线 U-Boot 中,ROC-RK3399-PC Plus使用的是roc-pc-mezzanine-rk3399_defconfig配置文件,由于ROC-RK3399-PC Pro是ROC-RK3399-PC Plus硬件迭代版本,因此两者是兼容的:
执行以下命令生成.config

make roc-pc-mezzanine-rk3399_defconfig


指定交叉工具链并开始编译:

$ make CROSS_COMPILE=aarch64-linux-gnu-


编译完成后打印了一个警告,意思是说没找到 bl31.elf文件!通过查阅 doc/README.rockchip文档了解到这个bl31.elf是必须的!

回到u-boot的上一层目录,克隆arm-trusted-firmware

$ git clone git@github.com:ARM-software/arm-trusted-firmware.git

编译 RK3399 的bl31.elf文件:

$ cd arm-trusted-firmware
$ make realclean
$ make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399

编译后报出一个缺少arm-none-eabi-gcc的工具链:

安装该工具链并重新编译:

$ sudo apt-get install gcc-arm-none-eabi
$ make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399

编译完成,我们可以看到bl31.elf文件所在目录:
回到 U-Boot 源代码根目录,指定 BL31环境变量并重新编译:

$ cd u-boot
$ export BL31=/home/neutionwei/project/arm-trusted-firmware/build/rk3399/release/bl31/bl31.elf
$ make CROSS_COMPILE=aarch64-linux-gnu-

编译完成:

我们可以看到添加bl31.elf后生成以下三个文件:

四、烧录固件

准备一张 TF卡,TF 卡接上读卡器,执行以下命令查看生成的设备节点:

dmesg | tail

我的设备节点是/dev/sdd,分别把idbloader.img烧录到第64扇区与 u-boot.itb烧录到16384扇区:

sudo dd if=idbloader.img of=/dev/sdd seek=64 conv=notrunc
sudo dd if=u-boot.itb of=/dev/sdd seek=16384 conv=notrunc

把 TF 卡接入到 ROC-RK3399-PC Pro,接上串口调试,上电可以看到以下日志:

请添加图片描述

举报

相关推荐

0 条评论