Linux系统移植(二)--- Uboot移植
# Linux系统移植(二)--- Uboot移植
以Orange Pi Zero3为例,介绍Uboot移植的基本操作。
Uboot官方文档: Allwinner SoC based boards — Das U-Boot unknown version documentation (opens new window)
# 编译bl31.bin(ATF)
使用 64 位 Soc(A64、H5、H6、H616、R329)的主板需要 bl31阶段的Arm Trusted Firmware-A固件 。这为 Armv8-A 提供了安全软件环境,并提供 PSCI 和 SMCCC 服务。全志支持已完全主流化。Orange Pi Zero3芯片是H618,我们下面编译平台选择相似的sun50i_h616就可以。编译 bl31.bin:
git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
cd trusted-firmware-a
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_h616 DEBUG=1 bl31
2
3
编译完成之后会生成bl31.bin文件
$ export BL31=$(pwd)/build/sun50i_h616/debug/bl31.bin
因为我们这里没用scp.bin,所以这里就不需要生产它了。
# 下载代码
下载步骤可以参考Das Uboot官方文档,Obtaining the source — Das U-Boot unknown version documentation (opens new window)。
您可以通过以下方式下载源代码
git clone https://source.denx.de/u-boot/u-boot.git
或者Github 上维护着源镜像
git clone https://github.com/u-boot/u-boot
不加分支默认下载最新代码。
# 配置
编译代码之前我们要选择开发板相关配置项,上面我们查找过,最新版本uboot项目中是存在orange pi zero 3的默认配置文件的。
通过运行以下指令,我们可以查看,
git grep -l sun50i-h618-orangepi-zero3 configs
可以看到在configs目录下是存在orangepi_zero3_defconfig默认配置文件的,使用它即可生成配置文件.config
.
make orangepi_zero3_defconfig
# 编译
- 对于 64 位板,这需要设置 BL31 环境变量BL31,或者在编译命令行上提供,下面在编译命令里设置了bl31.bin路径
- 同时还要制定使用的交叉编译器前缀
CROSS_COMPILE=aarch64-livingteam-linux-gnu-
(参考 Linux系统移植(一)--- 交叉编译工具链的配置 | 长生栈 (livingteam.cn) (opens new window) ) - 因为scp.bin文件我们没用,所以要指定为/dev/null,即SCP=/dev/null,否者会提示Image 'u-boot-sunxi-with-spl' is missing external blobs and is non-functional: scp错误
make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- BL31=/path/to/bl31.bin SCP=/dev/null
编译完成之后,顶层目录下会生成u-boot-sunxi-with-spl.bin文件,这个就是最终文件,里面包含ATF和SPL和uboot主体还有设备树。
至此,适用于Orange Pi Zero3的Uboot编译完成。
# 参考
从零开始移植最新版本(2023.10)主线Uboot到Orange Pi 3(全志H6) - 知乎 (zhihu.com) (opens new window)
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(三)--- Linux kernel移植02-05