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

Posted Neutionwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ROC-RK3399-PC Pro] 手把手教你移植主线U-Boot(基于v2022.04-rc5版本)相关的知识,希望对你有一定的参考价值。

🍇 博主主页:Systemcall小酒屋
🍇 博主简介:Neutionwei,C站嵌入式领域新星创作者之一,一枚热爱开源技术、喜欢分享技术心得的极客,注重简约风格,热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是厦大一位教数学的院士说过的一句话,另外“成就是最好的老师”,技术既要沉淀,也得分享,成就感的正反馈是支持我持续耕耘的动力!
🍇 专栏目录:Firefly-RK3399板卡
🍇 专栏说明:本专栏主要基于Firefly旗下的RK3399板卡进行入门篇讲述,欢迎订阅,博主会持续更新!

文章目录

一、编译环境

我的 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

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

http://releases.linaro.org/components/toolchain/binaries/

三、克隆源代码

从 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,接上串口调试,上电可以看到以下日志:

以上是关于[ROC-RK3399-PC Pro] 手把手教你移植主线U-Boot(基于v2022.04-rc5版本)的主要内容,如果未能解决你的问题,请参考以下文章

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

Firefly ROC-RK3399-PC Pro板卡详细介绍

Firefly RK3399 PC pro开发板资料

Firefly RK3399 PC pro开发板资料

[ROC-RK3568-PC] 手把手教你在Linux下解包与打包Ubuntu系统固件

[ROC-RK3568-PC] 手把手教你解包Ubuntu系统固件