[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
如果需要使用更高版本交叉编译工具链,可以点击以下链接:
三、克隆源代码
从 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板卡详细介绍